標籤:linux營運
環境準備:
1)設定本地國際化語言為en_US.UTF-8
[[email protected] ~]# sed -i ‘s/^\(LANG=\).*$/\1"en_US.UTF-8"/‘ /etc/sysconfig/i18n
[[email protected] ~]# cat /etc/sysconfig/i18n LANG="en_US.UTF-8"
[[email protected] ~]# LANG=en_US.UTF-8
2)更新系統軟體包
備份預設yum源:
find /etc/yum.repos.d -name ‘*.repo‘ -exec mv {} {}.bak \;
添加163yum源:
redhat5或centos5:
wget -P /etc/yum.repos.d
redhat6或centos6
wget -P /etc/yum.repos.d
添加epel yum源:
redhat5.x 32bit
rpm -ivh http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
redhat5.x 64bit
rpm -ivh http://dl.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
redhat6.x 32bit
rpm -ivh http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
redhat6.x 64bit
rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
更新認證:
yum -y upgrade ca-certificates --disablerepo=epel
更新系統所有軟體包:
yum clean all
yum makecache
yum -y upgrade
下文以redhat5/centos5為例
一、服務最小化原則
關閉所有開機自啟動服務,僅開啟sshd、crond、network、iptables、iptables、syslog(redhat5)、rsyslog(redhat6),然後在此基礎上按需添加需要開機啟動的服務。
1)關閉所有開機自啟動服務
[[email protected] ~]# for i in `chkconfig --list | awk ‘{if ($1~/^$/) {exit 0;} else {print $1}}‘`; do chkconfig $i off; done
2)開啟基礎服務
[[email protected] ~]# for i in sshd network syslog crond iptables; do chkconfig $i on; done
3)查看開啟的服務
[[email protected] ~]# 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
[[email protected] ~]# cd /etc/ssh
[[email protected] ssh]# cp sshd_config sshd_config~
[[email protected] ssh]# sed -i ‘s/#\(PermitRootLogin \)yes/\1no/‘ sshd_config
[[email protected] ssh]# grep ‘PermitRoot‘ /etc/ssh/sshd_config
PermitRootLogin no
2)禁用登入提示資訊
[[email protected] ssh]# >/etc/motd
3)修改ssh的預設監聽連接埠(tcp:22)
[[email protected] ssh]# sed -i ‘s/#\(Port \)22/\11983/‘ sshd_config
(這裡修改為tcp的11983連接埠)
[[email protected] ssh]# grep ‘Port ‘ sshd_config
Port 11983
4)只允許指定的ip可以ssh (可選)
方法1(使用tcpwrapper):
echo "sshd:192.168.124.0/255.255.255.0" >> /etc/hosts.allow //只允許192.168.124.0網段的ip使用ssh
echo "sshd:ALL" >> /etc/hosts.deny
方法2(使用iptables):
注意,遠程操作時需留心,以免把自己也拒絕而導致無法遠端連線
如只允許192.168.1.0網段的所有ip進行ssh,其他所有ip都拒絕
iptables -I INPUT -s 10.0.0.1 -p tcp --dport 22 -j ACCEPT //先允許自己的ip,以防被後面的操作誤傷
iptables -I 2 INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT //允許192.168.1.0網段
iptables -I 3 INPUT -p tcp --dport 22 -j DROP //拒絕所有
儲存iptables的設定:
cp /etc/sysconfig/iptables /etc/sysconfig/iptables~
iptables-save > /etc/sysconfig/iptables
最後,重啟sshd服務使上面配置生效(不用擔心重啟時已開啟的遠程終端串連會斷開,重啟只會對新開的終端生效)
[[email protected] ssh]# /etc/init.d/sshd restart
Stopping sshd: [ OK ]
Starting sshd: [ OK ]
三、使用者及命令許可權最小化
建立一個普通使用者tom,將其加入sudo組,該使用者作為系統管理員
groupadd sudo //建立sudo組
useradd -G sudo tom //建立tom使用者,加入sudo組
passwd tom //設定tom使用者的登陸密碼
修改sudo設定檔,授權sudo組的使用者可以以root身份執行所有命令(可以針對不同使用者授予不同的命令執行許可權,這裡允許執行所有命令,生產環境中系統管理員應該按需為使用者指派儘可能少的可執行命令,以實現許可權最少化),使用者執行的所有sudo操作都將記錄在/var/log/sudo.log中,以便日後的安全事件排查。執行命令如下:
[[email protected] ~]# cat >> /etc/sudoers <<EOF
> %sudo ALL=(root) ALL
> Defaults logfile=/var/log/sudo.log
> EOF
visudo -c //該命令用於檢查 /etc/sudoers 檔案的文法正確性
[[email protected] ~]# echo "local2.debug /var/log/sudo.log" >> /etc/syslog.conf
[[email protected] ~]# /etc/init.d/syslog restart
四、核心安全參數設定
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"命令將以上設定載入到核心使其立刻生效
五、 核心效能相關參數設定(可選)
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
CentOS系統常規初始化操作