關於ipitables防火牆的介紹,以及如何查看規則及清理規則等,在之前的一篇文章中已經講述了,今天這裡是演示如何制定防火牆的規則。因為工作中,主要會對filter鏈制定規則,所以這裡我們主要也以fitler鏈做示範。
準備工作
制定規則前,我們先關閉firewalld服務、開啟iptables服務,然後清除現有的規則。
# systemctl stop firewalld # systemctl start iptables # iptables -F # iptables -X # iptables -Z
新增規則鏈
關於iptables的新增規則鏈,選項非常繁多,下面我們看基本用法:
iptables [-t tables] -A|I 链名 [-i|o 网络接口] [-m state] [--state 数据包状态] \ > [-p 网络协议] [-s 源地址 --sport 端口范围] [-d 目标地址 --dport 端口范围] \ > -j [ACCEPT|DROP|REJECT]
選項與參數:
-A|I 鏈名 A表示在已規則後面加上規則,而I則是在最前面插入規則
-i|o 網路介面 i表示封包進入的那個網路接口,需要和INPUT或PREROUTING鏈配合使用;o表示封包出去的那個接口,需和OUTPUT鏈配合使用
#-p 網路協定 常見的有tcp、upd、icmp以及all
-m state 封包的狀態
#--state 封包狀態 常見的狀態有INVALID(無效的封包)、ESTABLISHED(已成功連線的狀態)、NEW(新建立的封包)、RELATED(新連線與現有連線相關聯)
-s 來源位址 位址可以是ip位址,如192.168.1.110 或網路位址192.168.1.0/24
-d 目的位址
-j 後面接著操作,常見的有ACCEPT(接受)、DROP(丟棄)、REJECT(拒絕)
針對ip、網路、網卡介面的規則制定
下面,給出幾個規則鏈案例。我們允許從192.168.1.110發來的資料、拒絕192.168.1.111發來的資料。
# iptables -A INPUT -s 192.168.1.110 -j ACCEPT # iptables -I INPUT -s 192.168.1.111 -j DROP # iptables -vnL Chain INPUT (policy ACCEPT 33 packets, 3048 bytes) pkts bytes target prot opt in out source destination 0 0 DROP all -- * * 192.168.1.111 0.0.0.0/0 0 0 ACCEPT all -- * * 192.168.1.110 0.0.0.0/0 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 18 packets, 1844 bytes) pkts bytes target prot opt in out source destination
允許192.168.1.0/24網路位址存取
# iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT # iptables -vnL Chain INPUT (policy ACCEPT 29 packets, 2328 bytes) pkts bytes target prot opt in out source destination 0 0 DROP all -- * * 192.168.1.111 0.0.0.0/0 0 0 ACCEPT all -- * * 192.168.1.110 0.0.0.0/0 0 0 ACCEPT all -- * * 192.168.1.0/24 0.0.0.0/0 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 15 packets, 1460 bytes) pkts bytes target prot opt in out source destination
思考一個問題,192.168.1.111的封包是會被接受還是會拒絕。從INPUT第一條規則看是會被拒絕,但從最後一條看,會接受。答案是會被拒絕,當滿足其中一條規則時,就不會再走下面的規則了,所以說規則鏈的順序也是非常重要的。
繼續看案例:只要是本機回環位址lo都允許
# iptables -A INPUT -i lo -j ACCEPT
#針對連接埠的規則制定
##將進入本地的21埠封包都阻擋掉# iptables -A INPUT -i eth0 -p tcp --dport 21 -j DROP將1024至65534之間的連接埠都開放,可以用連接埠號碼:連接埠號碼來表示一段連續的連接埠號碼
# iptables -A INPUT -i eth0 -p tcp --dport 1024:65534 -j ACCEPT下面來看兩個個綜合性的規則本機的3306端口,不對192.168.1.0/24這個網絡開放。 本機的ssh服務,不接受192.168.1.0/24這個網路的1024:65535埠的封包
# iptables -A INPUT -i eth0 -s 192.168.1.0/24 -p tcp --dport 3306 -j DROP # iptables -A INPUT -i etc0 -p tcp -s 192.168.1.0/24 \ > --sport 1024:65535 --dport 22 -j DROP
#針對封包的連線狀態的規則制定
資料包常見的狀態有INVALID(無效的資料包)、ESTABLISHED(已經成功連線的狀態)、NEW(新建立的資料包)、RELATED(新連線與現有連接相關聯)。 針對ESTABLISHED以及RELATED狀態的封包全都接受,針對INVALID狀態的封包全部丟棄# iptables -t filter -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT # iptables -A INPUT -m state --state INVALID -j DROP
刪除規則鏈
#刪除規則鏈基本上和添加規則鏈一致,只不過-A換成-D即可,下面我們一起來刪除幾條規則。# iptables-save # Generated by iptables-save v1.4.21 on Sun Nov 15 22:36:41 2020 *filter :INPUT ACCEPT [4:1920] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [16:1380] -A INPUT -s 192.168.1.111/32 -j DROP -A INPUT -s 192.168.1.110/32 -j ACCEPT -A INPUT -s 192.168.1.0/24 -j ACCEPT …… # iptables -t filter -D INPUT -s 192.168.1.111/32 -j DROP # iptables -D INPUT -s 192.168.1.110/32 -j ACCEPT
註:以上關於iptables的設定只會儲存到記憶體中去,重新啟動服務後系統後,這些設定將會消失。所以,只要不把自己阻擋在外情況下,請儘管練習吧
若想保存規則的話,請輸入/usr/libexec/iptables/iptables.init save來保存。 相關推薦:《linux影片教學》
以上是linux下的軟體防火牆iptables-規則的定義與刪除的詳細內容。更多資訊請關注PHP中文網其他相關文章!