【來源】
所謂防火牆,實質上是指由軟硬件組合成的一個在內外網之間構造的一種保護屏障,它是一種隔離技術。因此從物理上區分,可以分爲軟件和硬件防火牆,從邏輯上區分,可以分爲主機和網絡防火牆,而我們現在要講到的iptables,是屬於防火牆中的軟件防火牆的範疇,但它只是一個命令行工具或者說是一種客戶端代理,並不是真正的防火牆,用戶通過這個代理,把安全設定執行到真正的防火牆框架中,這個框架叫做Netfilter
【原理】
Netfilter是Linux中的一個子項目,它的主要功能是進行數據包過濾、連接跟蹤、地址轉換等,而iptables則是netfilter提供的對用戶數據包進行過濾、修改等操作的一種命令行工具,當數據包通過網卡進入進入內核時,它得先經過iptables的五條鏈,這些鏈都有相應的處理數據包的規則,而我們正是通過在這些鏈上設置規則來控制管理數據包,從而達到防火牆的功能。每當數據包到達一個鏈時,iptables就會從鏈中的所有規則逐一開始校驗該數據包是否符合規則中限定的條件。若滿足,系統就會根據每個規則定義的方法來處理該數據包;若不滿足,iptables則繼續檢查下一條規則,如果該數據包不符合鏈中的任意規則,iptables則會該鏈的默認策略去處理該數據包。
【四個表】
iptables的結構是由tables組成,而tables是由鏈組成,鏈又是由具體的規則組成。因此我們在編寫iptables的規則時,通過要先指定表,再指定鏈。tables的作用是區分不同功能的規則,並且存儲這些規則。
tables的類型分別有:
表名 |
功能 |
優先級 |
內建鏈 |
filter |
數據包的過濾功能 |
4 |
INPUT OUTPUT FORWARD |
nat |
網絡地址轉換功能 |
3 |
PREROUTING POSTROUTING OUTPUT |
mangle |
數據包的修改功能,拆解數據包,進行修改,然後重新組裝成數據包 |
2 |
PREROUTING OUTPUT FORWARD INPUT POSTROUTING |
raw |
數據跟蹤 |
1 |
PREROUTING OUTPUT |
【五條鏈】
鏈,也稱爲鉤子函數,它是一系列規則的一個組合,當數據包經過這些狗子函數時,她必須完全匹配每一個鉤子函數中的所有規則,方能進入下一個鉤子函數。
鉤子函數的類型分別有:
鏈類型 |
作用域 |
PREROUTING |
數據包進入路由表之前 |
INPUT |
通過路由表後目的地爲本機 |
OUTPUT |
由本機產生,向外轉發 |
FORWARD |
通過路由表後,目的地不爲本機 |
POSTROUTING |
發送到網卡接口之前 |
【語法規則】
語法:iptables [-t 表名] 命令選項 [鏈名] [條件匹配] [-j 目標動作或跳轉]
1)常用的命令選項:
-t:指定要操縱的表(四個表);
-A:向規則鏈中添加條目;
-D:從規則鏈中刪除條目;
-i:向規則鏈中插入條目;
-R:替換規則鏈中的條目;
-L:顯示規則鏈中已有的條目;
-F:清楚規則鏈中已有的條目;
-Z:清空規則鏈中的數據包計算器和字節計數器;
-N:創建新的用戶自定義規則鏈;
-P:定義規則鏈中的默認目標;
-h:顯示幫助信息;
-p:指定要匹配的數據包協議類型;
-s:指定要匹配的數據包源
2)常用的處理動作:
ACCEPT:允許數據包通過
DROP:直接丟棄數據包,不給任何迴應信息
REJECT: 拒絕數據包通過,必要時會給數據發送端一個響應的信息。
LOG:在/var/log/messages文件中記錄日誌然後將數據包傳遞給下一條規則
REDIRECT: 端口映射。
SNAT :源地址轉換,修改包來源IP爲某IP或IP範圍,做內網和公網之間的轉換。
DNAT::目標地址轉換。 修改數據包目的地IP爲某 Ip 或 IP 範圍。
3)常用的條件匹配:
1、狀態匹配:-m state --state 連接狀態
NEW:與任何連接無關的
ESTABLISHED:響應請求或已建立連接的
RELATED:與已有連接有相關性的,如FTP數據連接
2、MAC地址匹配:-m mac --mac-source MAC地址
eg:iptables -A INPUT -m mac --mac-source f0:1b:12:12:22:4f -j DROP
3、IP範圍匹配:-m iprange --src-range IP範圍
eg:iptables -A FORWARD -p tcp -m iprange --src-range 192.168.0.1-192.168.0.10 -j ACCEPT
4、多端口匹配:-m multiport --sports 源端口列表 和 -m multiport --sports 目的端口列表
eg:iptables -A INPUT -p tcp -m multiport --dport 11,29,116,121 -j ACCEPT
4)常用的一些iptables策略:
1、拒絕轉發來自192.168.2.33主機的數據
iptables -A FORWARD -s 192.168.2.33 -j REJECT
2、允許轉發來自192.168.2.1/99網段的數據
iptables -A FORWARD -s 192.168.2.1/99 -j ACCEPT
3、允許本機開放從TCP端口20-1024提供的應用服務。
iptables -A INPUT -p tcp --dport 20:1024 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 20:1024 -j ACCEPT
4、只允許管理員從202.13.0.0/16網段使用SSH遠程登錄防火牆主機。
iptables -A INPUT -p tcp --dport 22 -s 202.13.0.0/16 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP
5、 允許轉發來自192.168.0.0/24局域網段的DNS解析請求數據包。
iptables -A FORWARD -s 192.168.0.0/24 -p udp --dport 53 -j ACCEPT
iptables -A FORWARD -d 192.168.0.0/24 -p udp --sport 53 -j ACCEPT
6、屏蔽ip 110.1.1.1的訪問
iptables -I INPUT -s 110.1.1.1 -j DROP
7、屏蔽從123.0.0.1到123.255.255.254 iptables -I INPUT -s 123.0.0.0/8 -j DROP
8、屏蔽從從123.45.0.1到123.45.255.254 iptables -I INPUT -s 124.45.0.0/16 -j DROP
9、屏蔽從從123.45.6.1到123.45.6.254 iptables -I INPUT -s 123.45.6.0/24 -j DROP
10、允許所有本機向外的訪問 iptables -A OUTPUT -j ACCEPT
11、允許訪問22端口 iptables -A INPUT -p tcp --dport 22 -j ACCEPT
5)常用的iptables命令:
1、查看當前 IPTABLES 規則
service iptables status
2、 將所有iptables以序號標記顯示
iptables -L -n --line-numbers
3、 比如要刪除INPUT裏序號爲22的規則
iptables -D INPUT 22
覺得本文對你有幫助?請分享給更多人
關注「編程無界」,提升裝逼技能