一、iptables的基本認識
iptables的實現是通過Netfilter組件,該組件集成在linux內核中,具有iptables,NAT等功能,
官網文檔:https://netfilter.org/documentation/
爲了擴展各種網絡服務的結構化底層框架內核中選取五個位置放了五個hook(勾子函數) function(INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING),而這五個hook function向用戶開放,用戶可以通過一個命令工具(iptables)向其寫入規則
由五個過濾表(table)組成,包含控制IP包處理的規則集(rules),規則被分組放在5個鏈(chain)上。
iptables組成:
由五個表table:filter、nat、mangle、raw、security,五個鏈以及一些規則組成。
filter表:過濾規則表,根據預定義的規則過濾符合條件的數據包(常用,默認包含3個鏈)
nat表:network address translation 地址轉換規則表(常用,默認包含2個鏈)
mangle:修改數據標記位規則表
raw:關閉NAT表上啓用的連接跟蹤機制,加快封包穿越防火牆速度
security:用於強制訪問控制(MAC)網絡規則,由Linux安全模塊(如SELinux)實現
三種報文流向:
1、流入本機:PREROUTING --> INPUT-->用戶空間進程(比如httpd服務 )
2、流出本機:用戶空間進程 -->OUTPUT--> POSTROUTING
3、轉發:PREROUTING --> FORWARD --> POSTROUTING
二、iptables的用法
規則格式:
iptables [-t table] SUBCOMMAND chain [-m matchname [per-match-options]] -j targetname [per-target-options]
簡單格式
SUBCOMMAND
1、查看
-L:list, 列出指定鏈上的所有規則,本選項須置後
-n:numberic,以數字格式顯示地址和端口號
-v:verbose,詳細信息
-vv 更詳細
-x:exactly,顯示計數器結果的精確值,而非單位轉換後的易讀值
--line-numbers:顯示規則的序號
常用組合:
-vnL --line-numbers
使用 iptables 的 -vnL 選項 和 -t 選項查看每個表所涉及的鏈, 默認表是filter可以不寫
iptables -t filter -vnL
iptables -vnL
iptables -t filter -vnL INPUT
2、鏈管理
-N:new, 自定義一條新的規則鏈
-X:delete,刪除自定義的空的規則鏈
-P:Policy,設置默認策略;對filter表中的鏈而言,其默認策略有:
ACCEPT:接受
DROP:丟棄
-E:重命名自定義鏈;引用計數不爲0的自定義鏈不能夠被重命名,也不能
被刪除
3、規則管理:
-A:append,追加
-I:insert, 插入,要指明插入至的規則編號,默認爲第一條
-D:delete,刪除
(1) 指明規則序號
(2) 指明規則本身
-R:replace,替換指定鏈上的指定規則編號
-F:flush,清空指定的規則鏈
基本匹配條件:無需加載模塊,由iptables/netfilter自行提供
-s, --source address[/mask][,...]:源IP地址或範圍
-d, --destination address[/mask][,...]:目標IP地址或範圍
-p, --protocol protocol:指定協議,可使用數字如0(all)
protocol: tcp, udp, icmp, icmpv6, udplite,esp, ah, sctp, mh or“all“
-i, --in-interface name:報文流入的接口;只能應用於數據報文流入環節,只應用於INPUT、
FORWARD、PREROUTING鏈
-o, --out-interface name:報文流出的接口;只能應用於數據報文流出的環節,只應用於FORWARD、OUTPUT、 POSTROUTING鏈
處理動作:稱爲target,跳轉目標
-j
內建處理動作:ACCEPT,DROP,REJECT,SNAT,DNATMASQUERADE,MARK,LOG...
示例
1、禁止ping迴環網卡,
2、在當前規則前面插入一條規則,會自動佔用當前規則的位置,INPUT 後面不跟編號加在第一條
3、刪除第一條規則,或者iptables -D INPUT -s 127.0.0.1 -p icmp -j ACCEPT
4、清空鏈中匹配的數據包記錄值,
5、清空所有規則 iptables -F
6、修改某個鏈上一條指定的規則,可以使用 -R 選項來完成。
iptables -R INPUT 1 -s 127.0.0.1 -p icmp -j ACCEPT
7、每個鏈都有其默認的處理規則,可以使用 -P 選項修改,一般不修改,沒有允許的規則,全部拒絕xshell會斷開
iptables -t filter -P INPUT DROP
8、自定義鏈
使用自定義鏈,
沒有生效的原因在於,自定義鏈沒有被執行,表內的鏈只有默認鏈會被執行,自定義鏈需要在默認鏈中調用才能執行,調用
重新命名鏈
iptables -E mychain mychain11
刪除鏈
iptables -t filter -X mychain
iptables規則的持久性
由於規則是保存在內核內存中的,系統重啓後會丟失。因此我們希望使用配置文件保存所有的 iptables 規則,方便進行規則重
置和系統啓動後自動加載。
備份規則到iptables.rule
方法一
chmod +x /etc/rc.d/rc.local
vi /etc/rc.d/rc.local
重啓查看之前的規則還在
方法二
yum install iptables
systemctl enable iptables
iptalbes-save -c > /etc/sysconfig/iptables
在centos中不推薦使用iptables服務會和firewalld服務衝突