linux係統防火牆iptables命令規則及配置的示例
linux係統防火牆iptables命令規則及配置的示例(本機IP為172.16.63.7):
1、允許172.16網段內的主機訪問:
#iptables -t filter -A INPUT -s 172.16.0.0/16 -d 172.16.63.7 -j ACCEPT
譯:-t表,默認filter -A追加規則 INPUT進入 -s檢查源 -d檢查目標 -j處理動作 ACCEPT接受;入棧的目標是本機所以-d是本機IP;
2、以數值格式顯示詳細信息,列出表中鏈上的規則:
#iptables -vnL
pkts bytes譯:XXX報文,XXXXX個字節
3、以數值格式顯示詳細信息,列出表中鏈上的規則,並數字標記規則條數:
#iptables -vnL --line-numbers
4、拒絕172.16.63.66主機訪問(目前172.16.63.66可以ping通本機,也可以ssh等):
#iptables -t filter -A INPUT -s 172.16.63.66 -d 172.16.63.7 -j REJECT
注:如果你操作過第一個,那麼此時設置完後,發現172.16.63.66依舊可以ping進來,原來是我們剛才已經添加了允許172.16網段訪問的規則,所以此規則是後添加的,所以不生效。同一服務規則,小範圍放上麵,次序很重要。
如果是多個不同的服務,規則排序要根據實際情況,例如web服務每天訪問量巨大,而禁止某IP服務屬於小範圍,如果把某IP禁止服務放在前麵,每次web服務都要先檢查次IP,所以應該把匹配性較大的規則放在前麵。
5、刪除剛才添加的“允許172.16網段訪問的”規則:
#iptables -D INPUT 1
注:需要先-vnL --line-numbers查詢下,此規則屬於第幾條,這裏第一條則刪除第一條。
6、清空規則;
#iptables -F
注:當前策略一定要是ACCEPT,不然會被阻斷(你可以試試),任何清空刪除規則前,都要保證自己不會被阻斷!!!
7、插入一條規則,不讓172.16.63.66的主機訪問本機:
#iptables -I INPUT -s 172.16.63.66 -d 172.16.63.7 -j REJECT
注:默認插入第一條,如果插入第二條,則:#iptables -I INPUT 2 -s 172.16.63.66 -d 172.16.63.7 -j REJECT
注:這樣172.16.63.66進行ping本機時,會直接提示拒絕,當然這樣是不友好的(就是拒絕你,嗬嗬...),所以我們一般建議使用DROP直接丟棄。
#iptables -I INPUT -s 172.16.63.66 -d 172.16.63.7 -j DROP
8、替換第一條規則,不讓172.16.63.77的主機訪問本機:
#iptables -R INPUT 1 -s 172.16.63.77 -d 172.16.63.7 -j DROP
9、放行本機上的ssh:
#iptables -A INPUT -s 172.16.0.0/16 -d 172.16.63.7 -p tcp --dport 22 -j ACCEPT
#iptables -A OUTPUT -d 172.16.0.0/16 -s 172.16.63.7 -p tcp --sport 22 -j ACCEPT
#iptables -p INPUT DROP
#iptables -p OUTPUT DROP
#iptables -p FORWARD DROP
如果此時還要允許本機ping其它(其它主機不寫,表示全部):
#iptables -A OUTPUT -s 172.16.63.7 -p icmp --icmp-type 8 -j ACCEPT 允許ping其他了,但隻放出了,進不來
#iptables -A INPUT -d 172.16.63.7 -p icmp --icmp-type 0 -j ACCEPT 所以還要開放進入的
如果此時也要允許其他主機ping本機:
#iptables -A INPUT -d 172.16.63.7 -p icmp --icmp-type 8 -j ACCEPT 8是回顯請求
#iptables -A OUTPUT -s 172.16.63.7 -p icmp --icmp-type 0 -j ACCEPT 0是回顯應答,此時其他主機也可以ping通本機
注意:此時如果直接使用#iptables -F清空,清空後的後果你懂得,嗬嗬嗬...
所以此時我們要清空規則,則:
#iptables -p OUTPUT ACCEPT
#iptables -p INPUT ACCEPT
#iptables -p FORWARD ACCEPT
#iptables -F
10、iptables隻開啟ssh、web、telnet訪問
先確定ss -lnt端口是否都已打開。
iptables -A INPUT -d 172.16.63.7 -p tcp -m multiport --dports 22:23,80 -j ACCEPT 連續的端口可用:表示XX端口到XX端口
iptables -A OUTPUT -s 172.16.63.7 -p tcp -m multiport --sports 22:23,80 -j ACCEPT
iptables -A INPUT -d 172.16.63.7 -j DROP
iptables -A OUTPUT -s 172.16.63.7 -j DROP
11、(根據上麵繼續來做)指定ip地址範圍可以訪問本機mysql
iptables -I INPUT 2 -d 172.16.63.7 -p tcp --dport 3306 -m iprange --src-range 172.16.63.70-172.16.63.100 -j ACCEPT
iptables -I OUTPUT 2 -s 172.16.63.7 -p tcp --sport 3306 -m iprange --dst-range 172.16.63.70-172.16.63.100 -j ACCEPT
mysql 本機添加一個mysql測試
GRANT ALL ON . TO 'root'@'%' IDENTIFIED BY 'whsir';
使用172.16.63.70-172.16.63.100之間的一個主機訪問下試試:
mysql -uroot -h172.16.63.7 -pwuhao 可以連接上,沒問題
12、(接上麵操作)本機html內添加admin字符串,禁止網段內的IP不能訪問帶admin字符串的頁麵,但是可以訪問其他頁麵
iptables -I OUTPUT -s 172.16.63.7 -p tcp --sport 80 -m iprange ! --dst-range 172.16.63.70-172.16.63.100 -m string --string "admin" --algo kmp -j REJECT 限製172.16.63.70-172.16.63.100網段
13、僅允許周2、4、6,9點到18點訪問本機telnet
iptables -I INPUT -d 172.16.63.7 -p tcp --dport 23 -m time --timestart 09:00:00 --timestop 18:00:00 --weekdays Tue,Thu,Sat -j ACCEPT
14、限製客戶端對本機telnet服務並發連接數小於等於3
iptables -A INPUT -d 172.16.63.7 -p tcp --dport 23 -m connlimit --connlimit-upto 3 -j ACCEPT 同一主機最大同時能連接3個
iptables -A INPUT -d 172.16.63.7 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -d 172.16.63.7 -j DROP
iptables -A OUTPUT -s 172.16.63.7 -j DROP
15、允許客戶端對本機連續ping5個包,然後每三秒鍾ping一個
iptables -I INPUT -d 172.16.63.7 -p icmp --icmp-type 8 -m limit --limit-burst 5 --limit 20/minute -j ACCEPT
每分鍾ping20個,也就是3秒一個,這樣可以防止客戶端對本機的大量ping操作
最後更新:2017-06-26 18:32:00