本文以CentOS 5.4為例進行說明,對於5.x版本應該都是適用的,其他版本的話主要是命令的路徑不同,思路是一致的。
第一步、賬戶安全管理
1. 修改密碼長度
代碼如下 |
複製代碼 |
#vi /etc/login.defs PASS_MIN_LEN 18 |
2. 建立一個普通使用者帳號並設定密碼,這樣所有的操作都使用該普通帳號進行
代碼如下 |
複製代碼 |
#useradd ru #passwd ru |
3. Linux預設提供了很多帳號,帳號越多,系統就越容易受到攻擊,所以應該禁止所有預設的被作業系統本身啟動的並且不必要的帳號。
可以使用 vi /etc/passwd 查看系統帳號,使用 vi /etc/group 查看系統的使用者組。
代碼如下 |
複製代碼 |
#userdel adm #userdel lp #userdel sync #userdel shutdown #userdel halt #userdel news #userdel uucp #userdel operator #userdel games #userdel gopher #userdel ftp #groupdel adm #groupdel lp #groupdel news #groupdel uucp #groupdel games #groupdel dip #groupdel pppusers |
4. 使用chattr命令將下面的檔案加上不可更改屬性,從而防止非授權使用者獲得許可權。
代碼如下 |
複製代碼 |
#chattr +i /etc/passwd #chattr +i /etc/shadow #chattr +i /etc/group #chattr +i /etc/gshadow |
這樣操作之後也無法建立帳號和修改密碼,後面可以使用chattr -i命令恢複之後再進行操作。
5. 禁止Ctrl+Alt+Delete重啟命令
修改 /etc/inittab 檔案,將下面一行注釋掉
代碼如下 |
複製代碼 |
ca::ctrlaltdel:/sbin/shutdown -t3 -r now |
然後重新設定 /etc/rc.d/init.d/ 目錄下所有檔案的許可許可權,僅root帳號可以讀、寫和執行其中的所有指令檔:
代碼如下 |
複製代碼 |
#chmod -R 700 /etc/rc.d/init.d/* |
6. 限制su命令
限制只有特定使用者組的使用者才能使用su命令作為root許可權,可以編輯 /etc/pam.d/su 檔案,修改或增加下面的內容
代碼如下 |
複製代碼 |
# 這一行預設是有的 auth sufficient pam_rootok.so # 確認wheel使用者組是存在的 auth required pam_wheel.so group=wheel |
這樣設定之後只有wheel使用者組的使用者可以使用su切換為root。如果系統使用者ru能夠su切換為root,可以運行如下命令:
代碼如下 |
複製代碼 |
#usermod -G10 ru |
這裡注意,使用 su - 命令可以切換為root使用者並將root的環境變數資訊進行切換,而 su 命令僅僅是切換角色但還是原來使用者的環境變數。
第二步、SSH安全配置
SSH作為系統登入的入口,其安全性好比城樓的城門,重要性不言而喻。
首先查看系統中是否安裝了SSH:
#chkconfig --list |grep sshd
如果出現內容則說明安裝了sshd服務,否則使用 yum install ssh 命令進行安裝。
接下來先備份原來的設定檔
代碼如下 |
複製代碼 |
#cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak 然後修改 /etc/ssh/sshd_config 檔案: # 修改SSH的連接埠,預設為22 Port 5028 # 將#protocol 2,1改為 protocol 2 # 不允許root使用者直接登入 PermitRootLogin no # 不允許空密碼登入 PermitEmptyPasswords no # 不適用DNS UseDns no |
最後使用 service sshd restart 重啟SSH服務
第三步、關閉系統中不需要的服務和連接埠
1. 系統中少開一個服務就少一個危險,以下僅列出需要啟動的服務,未列出的服務一律關閉,如果沒有下面的服務則直接忽略:
代碼如下 |
複製代碼 |
#setup acpid anacron cpuspeed crond iptables irqbalance \僅當伺服器CPU為S.M.P架構或支援雙核心、HT技術時,才需開啟,否則關閉。 microcode_ctl network random sendmail sshd syslog yum-updatesd |
2. 使用iptables防火牆只開啟指定的連接埠
首先建立如下的sh檔案:
下載: closeports.sh#!/bin/bash
iptables -F INPUT
iptables -P INPUT DROP
代碼如下 |
複製代碼 |
# 開啟80連接埠 /sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT # 開啟SSH連接埠,這一點很重要,否則無法使用SSH了,注意將5028修改為你的SSH連接埠 /sbin/iptables -A INPUT -p tcp --dport 5028 -j ACCEPT |
然後儲存為closeports.sh檔案,使用下面的命令執行該檔案:
代碼如下 |
複製代碼 |
#chmod +x closeports.sh #./closeports.sh |
詳細的iptables配置資訊存放在 /etc/sysconfig/iptables 檔案中。
第四步、防止攻擊
1. 阻止ping
將 /proc/sys/net/ipv4/icmp_echo_ignore_all 檔案的內容修改為1,不過這樣的話如果伺服器重啟之後就會恢複為0了。
可以將下面的內容加入到 /etc/rc.d/rc.local 檔案中:
代碼如下 |
複製代碼 |
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all |
2. 防止IP欺騙攻擊
編輯 /etc/host.conf 檔案,在下面增加如下幾行:
代碼如下 |
複製代碼 |
#vi /etc/host.conf order bind,hosts multi off nospoof on |
3. 防止DoS攻擊
對系統所有的使用者佈建資源限制可以防止DoS類型攻擊。如最大進程數和記憶體使用量數量等。對 /etc/security/limits.conf 檔案添加如下內容:
代碼如下 |
複製代碼 |
# 禁止調試檔案 * hard core 0 # 限制記憶體使用量為5MB * hard rss 5000 # 限制進程數為20 * hard nproc 20 |
接下來必須編輯 /etc/pam.d/login 檔案確認下面一行是否存在,如果不存在的話添加上:
代碼如下 |
複製代碼 |
session required /lib/security/pam_limits.so |
對於DDos攻擊可以使用DDoS deflate指令碼,詳細介紹見下面的參考資料。
第五步、系統配置及效能調優
1. 修改系統預設字元集
如果使用英文安裝系統之後,如果系統中有中文會顯示亂碼,這個時候需要修改系統預設的字元集:
代碼如下 |
複製代碼 |
#vi /etc/sysconfig/i18n LANG="zh_CN.UTF-8" #source /etc/sysconfig/i18n |
將系統的編碼修改為zh_CN.UTF-8,後面一句命令是讓修改立即生效。
2. 使用ntp服務補救伺服器時間
首先檢查系統中是否安裝了ntp服務:
#chkconfig --list |grep ntp
如果沒有安裝的話使用yum進行安裝並更新時間
代碼如下 |
複製代碼 |
#yum install ntp #ntpdate time.windows.com |
也可以將更新命令加入到cron中進行自動更新時間:
代碼如下 |
複製代碼 |
#crontab -e * */12 * * * ntpdate time.windows.com #service crond restart |
以上操作是每隔12小時自動更新一次時間,可以通過 crontab -l 命令進行查看。
3. 加大伺服器檔案描述符
當系統服務開啟後,訪問量變大,會使用到更多的檔案描述符。使用 ulimit –n 命令顯示當前的檔案描述符數(需要使用 su – 命令切換到root帳號)。可以使用如下方法加大檔案描述符數:
代碼如下 |
複製代碼 |
#vi /etc/security/limits.conf * - nofile 65536 #在文本的最後一行添加 |
重新登入之後,可以使用 ulimit –n 命令再次查看檔案描述符會看的已經發生了變化。
4. 調整核心參數
代碼如下 |
複製代碼 |
#cp /etc/sysctl.conf /etc/sysctl.conf.bak #vi /etc/sysctl.conf net.ipv4.tcp_fin_timeout = 2 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_keepalive_time = 600 net.ipv4.ip_local_port_range = 4000 65000 net.ipv4.tcp_max_syn_backlog = 16384 net.ipv4.tcp_max_tw_buckets = 36000 net.ipv4.route.gc_timeout = 100 net.ipv4.tcp_syn_retries = 1 net.ipv4.tcp_synack_retries = 1 net.ipv4.ip_conntrack_max = 25000000 net.ipv4.netfilter.ip_conntrack_max=25000000 net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=180 net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait=120 net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait=60 net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait=120 |
最後,使用 sysctl –p 命令讓上述設定立即生效。