關(guān)于ipitables防火墻的介紹,以及如何查看規(guī)則及清理規(guī)則等,在之前的一篇文章中已經(jīng)講述了,今天這里是演示如何制定防火墻的規(guī)則。因為工作中,主要會對filter鏈制定規(guī)則,所以這里我們主要也以fitler鏈做演示。
準備工作
制定規(guī)則前,我們首先關(guān)閉firewalld服務(wù)、開啟iptables服務(wù),然后清除已有的規(guī)則。
#?systemctl?stop?firewalld #?systemctl?start?iptables #?iptables?-F #?iptables?-X #?iptables?-Z
新增規(guī)則鏈
關(guān)于iptables的添加規(guī)則鏈,選項非常繁多,下面我們看基本用法:
iptables?[-t?tables]?-A|I?鏈名?[-i|o?網(wǎng)絡(luò)接口]?[-m?state]?[--state?數(shù)據(jù)包狀態(tài)]? >?[-p?網(wǎng)絡(luò)協(xié)議]??[-s?源地址?--sport?端口范圍]?[-d?目標地址?--dport?端口范圍]? >?-j?[ACCEPT|DROP|REJECT]
選項與參數(shù):
-
-A|I 鏈名 ? ? ? ?A表示在已有規(guī)則后添加規(guī)則,而I則是在最前面插入規(guī)則
-
-i|o 網(wǎng)絡(luò)接口 ? ? ? i表示數(shù)據(jù)包進入的那個網(wǎng)絡(luò)接口,需要和INPUT或PREROUTING鏈配合使用;o表示數(shù)據(jù)包出去的那個接口,需和OUTPUT鏈配合使用
-
-p 網(wǎng)絡(luò)協(xié)議 ? 常見的有tcp、upd、icmp以及all
-
-m state 數(shù)據(jù)包的狀態(tài)
-
–state 數(shù)據(jù)包狀態(tài) ?常見的狀態(tài)有INVALID(無效的數(shù)據(jù)包)、ESTABLISHED(已經(jīng)成功連接的狀態(tài))、NEW(新建立的數(shù)據(jù)包)、RELATED(新連接與現(xiàn)有連接相關(guān)聯(lián))
-
-s 源地址 ?地址可以是ip地址,如192.168.1.110 或網(wǎng)絡(luò)地址192.168.1.0/24
-
-d 目的地址
-
-j 后面接操作,常見的有ACCEPT(接受)、DROP(丟棄)、REJECT(拒絕)
針對ip、網(wǎng)絡(luò)、網(wǎng)卡接口的規(guī)則制定
下面,給出幾個規(guī)則鏈案例。我們允許從192.168.1.110發(fā)來的數(shù)據(jù)、拒絕192.168.1.111發(fā)來的數(shù)據(jù)。
#?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網(wǎng)絡(luò)地址訪問
#?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的數(shù)據(jù)包是會被接受還是會拒絕。從INPUT第一條規(guī)則看是會被拒絕,但從最后一條看,會接受。答案是會被拒絕,當滿足其中一條規(guī)則時,就不會再走下面的規(guī)則了,所以說規(guī)則鏈的順序也是非常重要的。
繼續(xù)看案例:只要是本地回環(huán)地址lo都允許
#?iptables?-A?INPUT?-i?lo?-j?ACCEPT
針對端口的規(guī)則制定
將進入本地的21端口數(shù)據(jù)包都阻擋掉
#?iptables?-A?INPUT?-i?eth0?-p?tcp?--dport?21?-j?DROP
將1024至65534之間的端口都開放,可以用 端口號:端口號 來表示一段連續(xù)的端口號
#?iptables?-A?INPUT?-i?eth0?-p?tcp?--dport?1024:65534?-j?ACCEPT
下面來看兩個個綜合性的規(guī)則
本機的3306端口,不對192.168.1.0/24這個網(wǎng)絡(luò)開放。
本機的ssh服務(wù),不接受192.168.1.0/24這個網(wǎng)絡(luò)的1024:65535端口的數(shù)據(jù)包
#?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
針對數(shù)據(jù)包的連接狀態(tài)的規(guī)則制定
數(shù)據(jù)包常見的狀態(tài)有INVALID(無效的數(shù)據(jù)包)、ESTABLISHED(已經(jīng)成功連接的狀態(tài))、NEW(新建立的數(shù)據(jù)包)、RELATED(新連接與現(xiàn)有連接相關(guān)聯(lián))。
針對ESTABLISHED以及RELATED狀態(tài)的數(shù)據(jù)包全都接受,針對INVALID狀態(tài)的數(shù)據(jù)包全部丟棄
#?iptables?-t?filter?-A?INPUT?-m?state?--state?RELATED,ESTABLISHED?-j?ACCEPT? #?iptables?-A?INPUT?-m?state?--state?INVALID?-j?DROP
刪除規(guī)則鏈
刪除規(guī)則鏈基本和添加規(guī)則鏈一致,只不過-A換成-D即可,下面我們一起來刪除幾條規(guī)則。
#?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
注:以上關(guān)于iptables的設(shè)置只會保存到內(nèi)存中去,重啟服務(wù)后系統(tǒng)后,這些設(shè)置將消失。所以,只要不把自己阻擋在外情況下,請盡管練習吧
若想保存規(guī)則的話,請輸入/usr/libexec/iptables/iptables.init save來保存。
相關(guān)推薦:《linux視頻教程》