導(dǎo)讀:雖然我們并不能完全阻止攻擊行為,但一些安全工作還是必須要做的。在Linux系統(tǒng)中,我們可以通過配置Iptabels來加強(qiáng)服務(wù)器的安全,配置Iptables有些復(fù)雜,但通過本文的講解一步一步配置就不是很困難了。
-
雖然我們無法完全避免被攻擊,但還是有必要對(duì)服務(wù)器進(jìn)行一些安全設(shè)置。就像在寒冷的冬天里,雖然穿一件衣服也無法完全抵御寒冷,但總比裸奔要好得多吧?
在Linux下對(duì)防火墻的配置,事實(shí)上就是編輯/etc/sysconfig/iptables文件,下面琿琿詳細(xì)介紹。
首先我們可以查看一下服務(wù)器各服務(wù)的端口是多少:
netstat –apn
檢查Iptables是否安裝:
service iptables status
如果提示為iptables:unrecognized service,則表示還沒有安裝,如果是Centos系統(tǒng),請(qǐng)執(zhí)行以下命令安裝:
yum install iptables
如果是Debian系統(tǒng),請(qǐng)執(zhí)行以下命令安裝:
apt-get install iptables
查看本機(jī)Iptables的設(shè)置情況:
iptables -L -n
如果提示:
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
表示還沒有設(shè)置Iptables,如果已經(jīng)有設(shè)置規(guī)則,但需要重新設(shè)置過,可以通過以下命令清除舊的規(guī)則。
清除預(yù)設(shè)表filter中的所有規(guī)則鏈的規(guī)則:
iptables -F
清除預(yù)設(shè)表filter中使用者自定鏈中的規(guī)則:
iptables -X
將指定鏈中所有規(guī)則的包字節(jié)計(jì)數(shù)器清零:
iptables –Z
允許本地回環(huán)接口:
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
允許已建立的或相關(guān)連的通行:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
允許訪問22端口,即SSH端口,如果你的SSH端口有修改過,請(qǐng)將命令中的22替換成你的實(shí)際SSH端口號(hào):
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
對(duì)于Web服務(wù)器,我們應(yīng)該允許訪問80端口:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
允許訪問數(shù)據(jù)庫:
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
開啟郵件服務(wù)端口:
iptables -A INPUT -p tcp --dport 110 -j ACCEPT
iptables -A INPUT -p tcp --dport 25 -j ACCEPT
開啟FTP端口:
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 20 -j ACCEPT
如果你想允許用戶Ping服務(wù)器,需要添加:
iptables -A INPUT -p icmp -j ACCEPT
開啟DNS服務(wù)器端口:
iptables -A INPUT -p udp --dport 53 -j ACCEPT
在做NAT時(shí),如果FORWARD默認(rèn)規(guī)則是DROP,必須開啟轉(zhuǎn)發(fā)功能:
iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth1 -o eh0 -j ACCEPT
下面進(jìn)行一些安全的設(shè)置,雖然只是輕量級(jí)的防攻擊,但還是有必要設(shè)置一下。
打開syncookie:
sysctl -w net.ipv4.tcp_syncookies=1 &>/dev/null
設(shè)置默認(rèn)TCP連接癡呆時(shí)長為10800秒,即3小時(shí):
sysctl -w net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=10800 &>/dev/null
設(shè)置支持最大連接數(shù),具體數(shù)值需要根據(jù)公式來計(jì)算,這里以2G內(nèi)存的32位系統(tǒng)為例:
sysctl -w net.ipv4.ip_conntrack_max=131072 &>/dev/null
計(jì)算公式為:
CONNTRACK_MAX = RAMSIZE(內(nèi)存大小,單位字節(jié))/16384/(bit數(shù)/32)
舉個(gè)例子,32位系統(tǒng)512M內(nèi)存的服務(wù)器,就這樣計(jì)算:
512*1024*1024/16384/(32/32)=32768
防止SYN攻擊(輕量級(jí)):
iptables -N syn-flood
iptables -A INPUT -p tcp --syn -j syn-flood
iptables -A syn-flood -p tcp -m limit --limit 3/s --limit-burst 6 -j RETURN
iptables -A syn-flood -j REJECT
對(duì)于不管來自哪里的Ip碎片都進(jìn)行控制,允許每秒通過100個(gè)碎片:
iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT
iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
丟棄壞的TCP包:
iptables -A FORWARD -p TCP ! --syn -m state --state NEW -j LOG --log-prefix “New not syn:”
iptables -A FORWARD -p TCP ! --syn -m state --state NEW -j DROP
保存配置文件:
service iptables save
使用以下命令也可以保存:
/etc/rc.d/init.d/iptables save
禁止Iptables中未允許的規(guī)則訪問:
vi /etc/sysconfig/iptables
修改以下參數(shù):
:INPUT DROP [162:14797]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [144:22674]
重啟Iptables:
service iptables restart
設(shè)置開機(jī)自動(dòng)啟動(dòng):
chkconfig iptables on
至此,防火墻已經(jīng)配置好了。在我們?cè)O(shè)置允許通過的端口時(shí),可以根據(jù)自己的需要開放端口,例如DA面板的2222端口:
iptables -A INPUT -p tcp --dport 2222 -j ACCEPT