CentOS系統安裝完常規初始化操作

luashin發表於2016-03-31
環境準備:
1)設定本地國際化語言為en_US.UTF-8
[root@c58 ~]# sed -i 's/^\(LANG=\).*$/\1"en_US.UTF-8"/' /etc/sysconfig/i18n
[root@c58 ~]# cat /etc/sysconfig/i18n
LANG="en_US.UTF-8"
[root@c58 ~]# LANG=en_US.UTF-8

2)更新系統軟體包
備份預設yum源:
[root@c58 ~]# find /etc/yum.repos.d -name '*.repo' -exec mv {} {}.bak \;

新增163yum源:
RedHat 5或CentOS 5:
[root@c58 ~]# wget -P /etc/yum.repos.d
     
RedHat 6或CentOS 6
[root@c58 ~]# wget -P /etc/yum.repos.d

新增epel yum源:
RedHat 5.x 32bit:
[root@c58 ~]# rpm -ivh

RedHat 5.x 64bit:
[root@c58 ~]# rpm -ivh
  
RedHat 6.x 32bit:
[root@c58 ~]#  rpm -ivh
  
RedHat 6.x 64bit:
[root@c58 ~]# rpm -ivh
  
更新證書:
[root@c58 ~]# yum -y upgrade ca-certificates --disablerepo=epel
 
更新系統所有軟體包:
[root@c58 ~]# yum clean all
[root@c58 ~]# yum makecache
[root@c58 ~]# yum -y upgrade

下文以RedHat 5/CentOS 5為例
一、服務最小化原則
   關閉所有開機自啟動服務,僅開啟sshd、crond、network、iptables、syslog(RedHat 5)/rsyslog(RedHat 6),然後在此基礎上按需新增需要開機啟動的服務。
1)關閉所有開機自啟動服務
[root@c58 ~]# for i in `chkconfig --list | awk '{if ($1~/^$/) {exit 0;} else {print $1}}'`; do chkconfig $i off; done
 
2)開啟基礎服務
[root@c58 ~]# for i in sshd network syslog crond iptables; do chkconfig $i on; done
 
3)檢視開啟的服務
[root@c58 ~]# chkconfig --list | grep '3:on'
crond           0:off   1:off   2:on    3:on    4:on    5:on    6:off
iptables        0:off   1:off   2:on    3:on    4:on    5:on    6:off
network         0:off   1:off   2:on    3:on    4:on    5:on    6:off
sshd            0:off   1:off   2:on    3:on    4:on    5:on    6:off
syslog          0:off   1:off   2:on    3:on    4:on    5:on    6:off
 
二、使用者登入限制
1)禁止使用root使用者使用遠端ssh
[root@c58 ~]# cd /etc/ssh
[root@c58 ssh]# cp sshd_config sshd_config~
[root@c58 ssh]# sed -i 's/#\(PermitRootLogin \)yes/\1no/' sshd_config
[root@c58 ssh]# grep 'PermitRoot' /etc/ssh/sshd_config
PermitRootLogin no
 
2)禁用登入提示資訊
[root@c58 ssh]# >/etc/motd
 
3)修改ssh的預設監聽埠(tcp:22)
#這裡修改為tcp的11983埠
[root@c58 ssh]# sed -i 's/#\(Port \)22/\11983/' sshd_config
[root@c58 ssh]# grep 'Port ' sshd_config
Port 11983
 
4)只允許指定的ip可以ssh(可選)
   方法1(使用tcpwrapper):
#只允許192.168.124.0網段的ip使用ssh
[root@c58 ~]# echo "sshd:192.168.124.0/255.255.255.0" >> /etc/hosts.allow   
[root@c58 ~]# echo "sshd:ALL" >> /etc/hosts.deny
 
   方法2(使用iptables):
   注意:遠端操作時需留心,以免把自己也拒絕而導致無法遠端連線。如只允許192.168.1.0網段的所有ip進行ssh,其他所有ip都拒絕。
#先允許自己的ip,以防被後面的操作誤傷

[root@c58 ~]# iptables -I INPUT -s 10.0.0.1 -p tcp --dport 22 -j ACCEPT
 
#允許192.168.1.0網段
[root@c58 ~]# iptables -I 2 INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT
 
#拒絕所有
[root@c58 ~]# iptables -I 3 INPUT -p tcp --dport 22 -j DROP
 
#儲存iptables的設定:
[root@cloud ~]# cp /etc/sysconfig/iptables /etc/sysconfig/iptables~
[root@c58 ~]# iptables-save > /etc/sysconfig/iptables
 
最後,重啟sshd服務使上面配置生效(不用擔心重啟時已開啟的遠端終端連線會斷開,重啟只會對新開的終端生效)
[root@c58 ssh]# /etc/init.d/sshd restart
Stopping sshd:                                             [  OK  ]
Starting sshd:                                             [  OK  ]
 
三、使用者及命令許可權最小化
   建立一個普通使用者tom,將其加入sudo組,該使用者作為系統管理員
[root@cloud ~]# groupadd sudo                 #建立sudo組
[root@cloud ~]# useradd -G sudo tom           #建立tom使用者,加入sudo組
[root@cloud ~]# passwd tom                    #設定tom使用者的登陸密碼
 
   修改sudo配置檔案,授權sudo組的使用者可以以root身份執行所有命令(可以針對不同使用者授予不同的命令執行許可權,這裡允許執行所有命令,生產環境中系統管理員應該按需為使用者分配儘可能少的可執行命令,以實現許可權最少化),使用者執行的所有sudo操作都將記錄在/var/log/sudo.log中,以便日後的安全事件排查。執行命令如下:
[root@cloud ~]# cat >> /etc/sudoers <<eof
> %sudo ALL=(root) ALL
> Defaults logfile=/var/log/sudo.log
> EOF
[root@cloud ~]# visudo -c 
[root@cloud ~]# echo "local2.debug /var/log/sudo.log" >> /etc/syslog.conf
[root@cloud ~]# /etc/init.d/syslog restart
注:"visudo -c"命令用於檢查/etc/sudoers檔案的語法正確性
 
四、核心安全引數設定
[root@cloud ~]# vim /etc/sysctl.conf                #新增如下內容:
#關閉對ping包的響應(可選,一般不建議,因為不方便網路故障時的排查)
net.ipv4.icmp_echo_ignore_all = 1
 
#關閉對廣播ping的響應
net.ipv4.icmp_echo_ignore_broadcasts = 1  
 
#開啟syncookie用於防範syn flood攻擊,當出現syn等待佇列溢位時(syn數量超過tcp_max_syn_backlog的設定值),啟用cookie來處理,server在回覆syn_ack前會先請求client回覆一個序列號,該序列號中要求包含原先syn包中的資訊,如果序列號不正確,則server端會忽略此syn連線。
net.ipv4.tcp_syncookies = 1 
 
#設定sync_ack的最大重傳次數,預設值為5,範圍0-255,重傳5次的時間大約為180s
net.ipv4.tcp_synack_retries =  3
 
# 設定當keepalive開啟的情況下,keepalive訊息的傳送間隔,預設為2小時(由於目前網路攻擊等因素,造成了利用這個進行的攻擊很頻繁,如果兩邊建立了連線,然後不傳送任何資料或者rst/fin訊息,那麼持續的時間就是2小時,成就了空連線攻擊,tcp_keepalive_time就是預防此情形的.)
net.ipv4.tcp_keepalive_time = 1200
儲存退出後,執行"sysctl -p"命令將以上設定載入到核心使其立刻生效
 
五、 核心效能相關引數設定(可選)
[root@cloud ~]# vim /etc/sysctl.conf                #新增如下內容:
#設定syn等待佇列的長度,對於記憶體大於128M的機器,預設值是1024,在併發請求較大時,可以調大該值
net.ipv4.tcp_max_syn_backlog
 
#開啟timewait重用。允許將time_wait socket重新用於新的tcp連線
net.ipv4.tcp_tw_reuse = 1
 
#開啟tcp連線中time_wait socket的快速回收  
net.ipv4.tcp_tw_recycle = 1
 
#TCP傳送keepalive探測以確定該連線已經斷開的次數,預設值為9
net.ipv4.tcp_keepalive_probes = 5 
 
#指定探測訊息傳送的頻率,該值乘以tcp_keepalive_probes就可以得到從開始探測到連線被刪除所需的時間。預設值為75,也就是沒有活動的連線將在大約11分鐘以後將被丟棄。(對於普通應用來說,這個值有一些偏大,可以根據需要改小.特別是web類伺服器需要改小該值,15是個比較合適的值)
net.ipv4.tcp_keepalive_intvl = 15  
 
#表示系統同時保持TIME_WAIT socket的最大數量,如果超過這個數字,TIME_WAIT套接字將立刻被清除並輸出警告資訊。預設為180000,改為5000.對於squid伺服器來說,此引數可以控制TIME_WAIT套接字的最大數量,避免squid伺服器被大量的TIME_WAIT socket拖死。
net.ipv4.tcp_max_tw_buckets = 5000
 
#表示向外連線的埠範圍。預設值很小:32768~61000,改為1024~65000
net.ipv4.ip_local_port_range=1024 65000
儲存退出後,執行"sysctl -p"命令將以上設定載入到核心使其立刻生效
</eof

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9034054/viewspace-2073006/,如需轉載,請註明出處,否則將追究法律責任。

相關文章