iptables中定義默認策略(policy)
當數據包不在我們設置的規則之內時,則該數據包的通過與否,是以Policy的設置為准。在安全性比較高的主機中,Filter內的INPUT鏈定義的比較嚴格,INPUT的Policy定義為DROP
ptables定義規則:
格式:iptables [-t table] -P [INPUT,OUTPUT,FORWARD] [ACCEPT,DROP ]
-p : 定義策略(Policy)。注意:P為大寫
ACCEPT:數據包可接受
DROP:數據包被丟棄,client不知道為何被丟棄。
iptables -P INPUT DROP //INPUT默認設置為DROP iptables -P OUTPUT DROP //OUTPUT默認設置為ACCEPT iptables -P FORWARD DROP // FORWARD默認設置為ACCEPT
iptables定義規則(filter)的格式:
iptables [-AI 鏈名] [-io 網絡接口 ] [ -p 協議 ] [ -s 來源IP/網絡 ] [ -d 目標IP/網絡 ] -j [ACCEPT | DROP|REJECT|LOG]
參數說明:
-A:新增一條規則,該規則在原規則的最后面。
-I:插入一條規則,默認該規則在原第一條規則的前面。即該新規則變為第一條規則。
-io 網絡接口:設置數據包進出的接口規范。
-i:表示輸入。即數據包進入的網絡接口。與INPUT鏈配合
-o : 表示輸出。數據包傳出的網絡接口。與OUTPUT鏈配合
-p 協定: 此規則適應於哪種數據包。如tcp,udp,icmp及all.
-s 來源 IP/網絡:設置次規則之前數據包的來源地,可指定單純的IP或網絡,例如:
IP : 192.168.0.100
網絡 : 192.168.0.0/24或者192.168.0.0/255.255.255.0
如果規則為不允許,則在IP/網絡前加 “!” 即可。
-s ! x.x.x.x
-d 目標 IP/網絡。與-s類似,只是是目標IP或者網絡而已。
-j:后面接操作。如ACCEPT,DROP ,REJECT或者LOG(記錄)
比如:開放lo這個本機的接口以及某個IP來源
//設置io成為受信任的設備,亦即進出lo的數據包都接受 iptables -t filter -A INPUT -i eth0 -j ACCEPT
我們可能會有疑惑,為什么沒有-s -d等規則,表示不論數據包來自何處或去到哪里,只要是來自lo這個接口全部接受。
設置來自192.168.100.10的就接受,192.168.100.11的就丟棄。
iptables -A INPUT -i eth0 -s 192.168.100.10 -j ACCEPT iptables -A INPUT -i eth0 -s 192.168.100.11 -j DROP iptables -I INPUT -i eth0 -s 192.168.100.0/24 -j ACCEPT
此時我們執行iptables-save
[root@localhost ~]# iptables-save # Generated by iptables-save v1.4.7 on Wed Jun 6 10:41:44 2018 *nat :PREROUTING ACCEPT [9:1155] :POSTROUTING ACCEPT [4:1312] :OUTPUT ACCEPT [4:1312] COMMIT # Completed on Wed Jun 6 10:41:44 2018 # Generated by iptables-save v1.4.7 on Wed Jun 6 10:41:44 2018 *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [65:5416] -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A INPUT -i eth0 -p tcp -m tcp --sport 80 -j ACCEPT -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT # Completed on Wed Jun 6 10:41:44 2018
TCP,UDP協議的規則對比:針對端口設置
- 在 -s 參數后面可以增加一個參數 -sport 端口范圍(限制來源端口),如:1024:65535
- 在-d 參數后面可以增加一個參數 -dport 端口范圍(限制目標端口)
需要特別注意,這兩個參數重點在port上面,並且僅有TCP和UDP數據包具有端口,因此要想使用–dport,–sport時需要加上-p tcp或者 -p udp才會成功。
下面做幾個小測試:
//丟棄所有想要鏈接本機21端口的數據包 iptables -A INPUT -i eth0 -p tcp --dport 21 -j DROP //想要鏈接到本機的網上鄰居(UDP port 137,138 tcp 139,445)就放行 iptables -A INPUT -i eth0 -p udp --dport 137:138 -j ACCEPT iptables -A INPUT -i eth0 -p tcp --dport 139 -j ACCEPT iptables -A INPUT -i eth0 -p tcp --dport 445 -j ACCEPT //只要來自192.168.1.0/24的1024:65535端口的數據包,且想要連接的本機的ssh port就阻擋 iptables -A INPUT -i eth0 -p tcp -s 192.168.1.0/24 --sport 1024:65535 --dport ssh -j DROP iptables -A INPUT -i eth0 -p tcp --dport 21 -j DROP
除了制訂端口號之外,TCP數據包還有特殊的標識,比如主動鏈接的SYN標志。iptables支持使用–syn來處理。
iptables -A INPUT -i eth0 -p tcp --sport 1:1023 -dport 1:1023 --syn -j DROP
啟動一個服務:systemctl start firewalld.service
關閉一個服務:systemctl stop firewalld.service
重啟一個服務:systemctl restart firewalld.service
顯示一個服務的狀態:systemctl status firewalld.service
在開機時啟用一個服務:systemctl enable firewalld.service
在開機時禁用一個服務:systemctl disable firewalld.service
查看服務是否開機啟動:systemctl is-enabled firewalld.service
查看已啟動的服務列表:systemctl list-unit-files|grep enabled
查看啟動失敗的服務列表:systemctl --failed
3.配置firewalld-cmd