Netfilter組件前端
運行在內核空間,集成在linux內核中,擴展各類網絡服務的結構化底層框架。linux
在內核中選取五個位置放了五個hook(勾子) function(INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING),而這五個hook function向用戶開放。安全
而咱們常說iptables(Centos 6)和firewalld(Centos 7)只是配置Netfilter的前端工具。網絡
iptables由四個表和五個鏈以及一些規則組成併發
四個表框架
表tcp (tables)ide |
鏈工具 (chains)性能 |
filter |
這是默認表,過濾規則表,根據預約義的規則過濾符合條件的數據包 應用場景:主機防火牆 |
INPUT |
過濾全部目標是本機地址的數據包 |
FORWARD |
轉發流經本機的數據包。起到轉發的做用 |
OUTPUT |
處理全部源地址是本機地址的數據包,就是處理從主機發出的數據包 |
nat |
負責網絡地址轉換 應用場景:局域網共享上網 |
FREROUTING |
在數據包到達防火牆時,進行路由判斷以前執行的規則, 做用是改變數據包的目的地址、目的端口等 |
OUTPUT |
與主機流出去的數據包有關,改變主機發出數據包的目的地址 |
POSTROUTING |
在數據包離開防火牆時進行路由判斷以後執行的規則, 做用改變數據包的源地址,源端口等。 |
mangle |
這個表專門用於改變數據包的結構(通常改變數據包首部格式) 修改數據標記位規則表 |
INPUT |
進入到設備自己的包 |
FORWARD |
對路由後的數據包信息進行修改 |
FREROUTING |
在路由以前更改傳入的包 |
OUTPUT |
本地建立的數據包在路由以前改變 |
POSTROUTING |
在數據包即將離開時更改數據包信息 |
raw |
關閉NAT表上啓用的鏈接跟蹤機制,加快封包穿越防火牆速度 |
PREROUTING |
for packets arriving via any network interface |
OUTPUT |
for packets generated by local processes |
五個內置鏈chain
Centos 6
表(tables) |
鏈(chains) |
INPUT |
FORWARD |
OUTPUT |
PREROUTING |
POSTROUTING |
filter |
O |
O |
O |
× |
× |
nat |
× |
× |
O |
O |
O |
mangle |
O |
O |
O |
O |
O |
raw |
× |
× |
O |
O |
× |
說明:O 表示有,× 表示無。 |
Centos 7
表(tables) |
鏈(chains) |
INPUT |
FORWARD |
OUTPUT |
PREROUTING |
POSTROUTING |
filter |
O |
O |
O |
× |
× |
nat |
O |
× |
O |
O |
O |
manale |
O |
O |
O |
O |
O |
raw |
× |
× |
O |
O |
× |
說明:O 表示有,× 表示無。 |
iptables工做流程
內核中數據包的傳輸過程
當一個數據包進入網卡時,數據包首先進入PREROUTING鏈,內核根據數據包目的IP判斷是否須要轉發出去
若是數據包就是進入本機的,數據包就會沿着圖向上移動,到達INPUT鏈。數據包到達INPUT鏈後,任何進程都會收到它。本機上運行的程序能夠發送數據包,這些數據包通過OUTPUT鏈,而後到達POSTROUTING鏈輸出
若是數據包是要轉發出去的,且內核容許轉發(net.ipv4.ip_forward=1),數據包就會向右移動,通過FORWARD鏈,而後到達POSTROUTING鏈輸出
一、iptables主要工做在OSI七層的2.3.4層。
二、防火牆是一層層過濾的。實際是按照配置規則的順序從上到下,從前到後進行過濾的。全部順序 很重要。
三、若是匹配上了規則,即明確代表是阻止仍是經過,此時數據包就不在向下匹配新規則了。
四、若是全部規則中沒有匹配規則,則向下進行匹配,直到匹配默認規則。通常最後的默認規則是拒絕全部。
五、防火牆的默認規則是對應鏈的全部的規則執行完之後纔會執行的(最後執行的規則)。
六、生產中根據具體狀況啓用服務。大併發的狀況不能開iptables,影響性能,iptables是要消耗CPU的,大併發的狀況下,使用硬件防火牆。
七、規則要添加在鏈chain上,才生效;添加在自定義上不會自動生效。只有Hook鉤子調用自定義鏈時才生效。
iptables添加要點
iptables規則添加時考量點
要實現哪一種功能:判斷添加在哪張表上
報文流經的路徑:判斷添加在哪一個鏈上
報文的流向:判斷源和目的地址
匹配規則:根據業務須要
規則優化
任何不容許的訪問,應該在請求到達時給予拒絕
規則在連接上的次序即爲其檢查時的生效次序
1 安全放行全部入站和出站的狀態爲ESTABLISHED狀態鏈接
2 謹慎放行入站的新請求
3 有特殊目的限制訪問功能,要在放行規則以前加以拒絕
4 同類規則(訪問同一應用),匹配範圍小的放在前面,用於特殊處理
5 不一樣類的規則(訪問不一樣應用),匹配範圍大的放在前面
6 應該將那些可由一條規則可以描述的多個規則合併爲一條
7 設置默認策略,建議白名單(只放行特定鏈接)
1) iptables -P 設置默認策略爲拒絕,不建議。由於iptables -F 連本身都沒法遠程了。悲劇。
2) 建議在規則的最後定義規則作爲默認策略
在Centos7上,iptables和firewalld只能2選一
iptables工具
iptables v1.4.7 (Centos 6)
iptables v1.4.21 (Centos 7)
參數 |
參數說明 |
保存配置 |
方法一:/etc/init.d/iptables save 或 service iptables save 方法二:iptables-save > /etc/sysconfig/iptables |
載入配置文件 |
方法一:iptables-restore < /etc/sysconfig/iptables 方法二:service iptables reload 或 service iptables restart -n:不清除原有規則 |
顯示相關參數 |
-n |
以數字的方式顯示地址或端口信息 |
-L |
列出一個鏈或全部鏈中的規則信息 |
-S |
以iptables-save 命令格式顯示鏈上規則 |
--line-number |
顯示規則的序號 |
-v 或 -vv |
顯示詳細信息 |
-x |
顯示計數器結果的精確值,而非單位轉換後的易讀值 |
鏈管理相關參數 |
iptables -X |
刪除自定義的空的規則鏈 |
iptables -Z |
鏈的計數器清零(數據包計數器與數據包字節計數器) |
iptables -N |
建立新的用戶定義鏈 |
iptables -P |
設置默認策略;對filter表中的鏈而言,其默認策略有: ACCEPT:接受 DROP:丟棄 |
iptables -E |
重命名自定義鏈;引用計數不爲0的自定義鏈不可以被重命名,也不能被刪除 |
規則管理經常使用參數(在前面加感嘆號,表示是取反) |
-t 表名稱 |
指定配置哪一個表(4表),指定配置表名稱。 |
-A 鏈名稱 |
追加到指定鏈(鏈名稱必須大寫),默認將配置的規則插入到當前規則最後一條。 |
-I 鏈名稱 |
插入相應規則策略,到指定鏈上,默認將配置的規則插入到第一條 (能夠根據規則序號插入到指定位置) |
-D 鏈名稱 |
刪除指定的規則(能夠根據如下方法刪除 (1) 指明規則序號 (2) 指明規則自己) |
-R 鏈名稱 規則編號 |
替換指定鏈上的指定規則編號 例:iptables -R INPUT 2 |
-C |
檢查規則是否存在 |
-F |
清除全部規則,不會處理默認的規則 |
-Z |
置零計數器 iptables的每條規則都有兩個計數器 (1) 匹配到的報文的個數 (2) 匹配到的全部報文的大小之和 |
[!] -p 協議名稱 |
指定規則的協議名稱,可使用協議表明的數字表示 常見值爲all ,tcp, udp, icmp, 參看:/etc/protocols |
-j 動做 |
匹配數據包後的動做 |
ACCEPT |
容許 |
DROP |
丟棄(沒有響應)推薦使用 |
REJECT |
拒絕(迴應請求者明確的拒絕) |
MASQUERADE |
假裝上網時使用 |
SNAT |
共享地址上網 |
DNAT |
目的地址改寫 |
RETURN |
返回調用鏈,繼續判斷其餘規則 |
REDIRECT |
端口重定向 |
MARK |
作防火牆標記 |
LOG |
記錄日誌,dmesg |
[!] -i |
報文流入的接口;只能應用於數據報文流入環節, 只應用於INPUT、FORWARD、PREROUTING鏈 |
[!] -o |
報文流出的接口;只能應用於數據報文流出的環節, 只應用於FORWARD、OUTPUT、POSTROUTING鏈 |
[!] -s |
指定源IP地址或源網段信息 address[/mask][,...] |
[!] -d |
指定目標IP地址或目標網段信息 address[/mask][,...] |
擴展參數 須要加載擴展模塊(/usr/lib64/xtables/*.so),方可生效 查看幫助 man iptables-extensions |
隱式擴展 在使用 -p 選項指明瞭特定的協議時,無需再用-m選項指明擴展模塊的擴展機制, 不須要手動加載擴展模塊 |
TCP/UDP協議的擴展選項 |
--dport |
匹配報文目標端口,可爲端口範圍 |
--sport |
匹配報文源端口,可爲端口範圍 |
顯式擴展 必須使用-m選項指明要調用的擴展模塊的擴展機制 要手動加載擴展模塊 |
-m 模塊 |
表示加載擴展功能的參數(能夠加載擴展參數) |
multiport |
以離散方式定義多端口匹配, 最多指定15個端口 |
iprange |
指明連續的ip地址範圍 (但通常不是整個網絡) |
icmp |
使用icmp的擴展 |
mac |
指明源MAC地址 |
time |
根據將報文到達的時間與指定的時間範圍 進行匹配 |
string |
對報文中的應用層數據作字符串模式匹配檢測 |
connlimit |
根據每客戶端IP作併發鏈接數數量匹配 可防止CC(Challenge Collapsar挑戰黑洞)*** |
limit |
基於收發報文的速率作匹配 |
state |
根據」鏈接追蹤機制「去檢查鏈接的狀態, 較耗資源 |
示例請看iptables (二)
更多說明:
man 8 iptables iptables-extensions(8) (Centos 7纔有)