iptables 使用

https://www.zsythink.net/archives/1199
https://www.zsythink.net/archives/1517
http://www.zsythink.net/archives/1604

基礎(chǔ)知識

到本機某進程的報文:PREROUTING --> INPUT
由本機轉(zhuǎn)發(fā)的報文:PREROUTING --> FORWARD --> POSTROUTING
由本機的某進程發(fā)出報文(通常為響應(yīng)報文):OUTPUT --> POSTROUTING

iptables為我們提供了如下"表"
filter表:負責(zé)過濾功能,防火墻;內(nèi)核模塊:iptables_filter
nat表:network address translation,網(wǎng)絡(luò)地址轉(zhuǎn)換功能;內(nèi)核模塊:iptable_nat
mangle表:拆解報文,做出修改,并重新封裝 的功能;iptable_mangle
raw表:關(guān)閉nat表上啟用的連接追蹤機制;iptable_raw
也就是說,我們自定義的所有規(guī)則,都是這四種分類中的規(guī)則,或者說,所有規(guī)則都存在于這4張"表"中

每個"鏈"中的規(guī)則都存在于哪些"表"中。
PREROUTING 的規(guī)則可以存在于:raw表,mangle表,nat表。
INPUT 的規(guī)則可以存在于:mangle表,filter表,(centos7中還有nat表,centos6中沒有)。
FORWARD 的規(guī)則可以存在于:mangle表,filter表。
OUTPUT 的規(guī)則可以存在于:raw表mangle表,nat表,filter表。
POSTROUTING 的規(guī)則可以存在于:mangle表,nat表。

但是,我們在實際的使用過程中,往往是通過"表"作為操作入口,對規(guī)則進行定義的,之所以按照上述過程介紹iptables,是因為從"關(guān)卡"的角度更容易從入門的角度理解,但是為了以便在實際使用的時候,更加順暢的理解它們,此處我們還要將各"表"與"鏈"的關(guān)系羅列出來,

表(功能)<--> 鏈(鉤子):
raw 表中的規(guī)則可以被哪些鏈?zhǔn)褂茫篜REROUTING,OUTPUT
mangle 表中的規(guī)則可以被哪些鏈?zhǔn)褂茫篜REROUTING,INPUT,F(xiàn)ORWARD,OUTPUT,POSTROUTING
nat 表中的規(guī)則可以被哪些鏈?zhǔn)褂茫篜REROUTING,OUTPUT,POSTROUTING(centos7中還有INPUT,centos6中沒有)
filter 表中的規(guī)則可以被哪些鏈?zhǔn)褂茫篒NPUT,F(xiàn)ORWARD,OUTPUT

處理動作

處理動作在iptables中被稱為target(這樣說并不準(zhǔn)確,我們暫且這樣稱呼),動作也可以分為基本動作和擴展動作。
此處列出一些常用的動作,之后的文章會對它們進行詳細的示例與總結(jié):
ACCEPT:允許數(shù)據(jù)包通過。
DROP:直接丟棄數(shù)據(jù)包,不給任何回應(yīng)信息,這時候客戶端會感覺自己的請求泥牛入海了,過了超時時間才會有反應(yīng)。
REJECT:拒絕數(shù)據(jù)包通過,必要時會給數(shù)據(jù)發(fā)送端一個響應(yīng)的信息,客戶端剛請求就會收到拒絕的信息。
SNAT:源地址轉(zhuǎn)換,解決內(nèi)網(wǎng)用戶用同一個公網(wǎng)地址上網(wǎng)的問題。
MASQUERADE:是SNAT的一種特殊形式,適用于動態(tài)的、臨時會變的ip上。
DNAT:目標(biāo)地址轉(zhuǎn)換。
REDIRECT:在本機做端口映射。
LOG:在/var/log/messages文件中記錄日志信息,然后將數(shù)據(jù)包傳遞給下一條規(guī)則,也就是說除了記錄以外不對數(shù)據(jù)包做任何其他操作,仍然讓下一條規(guī)則去匹配。

基本操作

1. 查看

-t 指定表

iptables -nvL
iptables -t filter -L 等價于:iptables -L 默認查看filter
iptables -t raw -L
iptables -t mangle -L
iptables -t nat -L

指定鏈路

iptables -t filter -L INPUT

可顯示規(guī)則的編號

iptables --line -nvL INPUT

2. 新增

-I: 插入最前面
-A: 在后面添加
與匹配策略順序有關(guān),從上到下

命令語法:iptables -t 表名 -A 鏈名 匹配條件 -j 動作

示例:
iptables -t filter -A INPUT -s 192.168.1.146 -j DROP
iptables -t filter -I INPUT -s 10.40.66.185 -j ACCEPT
iptables -t filter -I INPUT -s 10.40.66.205 -j DROP

命令語法:iptables -t 表名 -I 鏈名 規(guī)則序號 匹配條件 -j 動作

示例:
iptables -t filter -I INPUT 5 -s 192.168.1.146 -j REJECT

命令語法:iptables -t 表名 -P 鏈名 動作

示例:iptables -t filter -P FORWARD ACCEPT

3. 刪除規(guī)則

按照規(guī)則序號刪除規(guī)則,刪除指定表的指定鏈的指定規(guī)則,-D選項表示刪除對應(yīng)鏈中的規(guī)則。
命令語法:iptables -t 表名 -D 鏈名 規(guī)則序號

示例:
   iptables -t filter -D INPUT 3

上述示例表示刪除filter表中INPUT鏈中序號為3的規(guī)則。
按照具體的匹配條件與動作刪除規(guī)則,刪除指定表的指定鏈的指定規(guī)則。

命令語法:
iptables -t 表名 -D 鏈名 匹配條件 -j 動作
示例:iptables -t filter -D INPUT -s 192.168.1.146 -j DROP

4. 清空規(guī)則

刪除指定表的指定鏈中的所有規(guī)則,-F選項表示清空對應(yīng)鏈中的規(guī)則,執(zhí)行時需三思。

命令語法:iptables -t 表名 -F 鏈名
示例:iptables -t filter -F INPUT

5. 修改規(guī)則

注意點:如果使用-R選項修改規(guī)則中的動作,那么必須指明原規(guī)則中的原匹配條件,例如源IP,目標(biāo)IP等。
修改指定表中指定鏈的指定規(guī)則,-R選項表示修改對應(yīng)鏈中的規(guī)則,使用-R選項時要同時指定對應(yīng)的鏈以及規(guī)則對應(yīng)的序號,并且規(guī)則中原本的匹配條件不可省略。

命令語法:iptables -t 表名 -R 鏈名 規(guī)則序號 規(guī)則原本的匹配條件 -j 動作
示例:iptables -t filter -R INPUT 3 -s 192.168.1.146 -j ACCEPT

上述示例表示修改filter表中INPUT鏈的第3條規(guī)則,將這條規(guī)則的動作修改為ACCEPT, -s 192.168.1.146為這條規(guī)則中原本的匹配條件,如果省略此匹配條件,修改后的規(guī)則中的源地址可能會變?yōu)?.0.0.0/0。

其他修改規(guī)則的方法:先通過編號刪除規(guī)則,再在原編號位置添加一條規(guī)則。

6. 保存規(guī)則

在centos7中,使用firewall替代了原來的iptables service
我們只要通過yum源安裝iptables與iptables-services即可(iptables一般會被默認安裝,但是iptables-services在centos7中一般不會被默認安裝),在centos7中安裝完iptables-services后,即可像centos6中一樣,通過service iptables save命令保存規(guī)則了,規(guī)則同樣保存在/etc/sysconfig/iptables文件中。

#配置好yum源以后安裝iptables-service
# yum install -y iptables-services
#停止firewalld
# systemctl stop firewalld
#禁止firewalld自動啟動
# systemctl disable firewalld
#啟動iptables
# systemctl start iptables
#將iptables設(shè)置為開機自動啟動,以后即可通過iptables-service控制iptables服務(wù)
# systemctl enable iptables

上述配置過程只需一次,以后即可在centos7中愉快的使用service iptables save命令保存iptables規(guī)則了。

其他通用保存方法

使用如下方法保存規(guī)則

iptables-save > /etc/sysconfig/iptables

可以使用如下命令從指定的文件載入規(guī)則,注意:重載規(guī)則時,文件中的規(guī)則將會覆蓋現(xiàn)有規(guī)則。

iptables-restore < /etc/sysconfig/iptables

7. iptables的黑白名單機制

允許指定ip段訪問指定端口,其余ip不可以訪問此端口

實例:172.16.65開頭的ip可以訪問此機器的2181 端口,其余不可以訪問
iptables -I INPUT -s 172.16.65.0/24 -p tcp --dport 2181 -j ACCEPT
iptables -A INPUT -p tcp --dport 2181 -j DROP
黑名單:阻止10.1.1.1 訪問3010端口,其他都可以訪問
iptables -I  INPUT -s 10.1.1.1 -p tcp --dport 3010 -j DROP

我們就來做一個簡單的白名單吧,也就是說,只放行被規(guī)則匹配到的報文,其他報文一律拒絕

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容