防火牆做爲一種內部網與外部網之間的訪問控制設備,一般安裝在內部網絡與外部網絡的邊際,防火牆具備很好的網絡保護做用。入侵者必須先經過防火牆的安全防線才能接觸計算機。能夠將防火牆配置不一樣的安全級別,達到不一樣的安全防禦。web
netfilter/iptables是集成在Linux2.4x版本內核中的包過濾防火牆系統。它能夠實現數據包過濾
,網絡地址轉換
以及數據包管理功能
。Linux中的防火牆系統中,netfilter位於內核空間,負責對本機全部流入,流出,轉發的數據包進行查看,修改,丟棄,拒絕等操做,因爲netfilter位於內核空間,用戶通常沒法接觸內核和修改內核,因此就須要一些命令行工具進行管理,經常使用的有iptables,firewalld等工具。所以,真正實現防火牆功能的是netfilter,它是Linux內核中實現包過濾的內部結構。安全
簡單來講,iptables是由表組成,表是鏈的集合,鏈上有規則。若是將iptables比做一棟樓,那麼表、鏈、規則是:服務器
iptables | 表(tables) | 鏈(chains) | 規則(policy) |
---|---|---|---|
大樓 | 每一層樓 | 一層樓的房間 | 房間內的佈局 |
iptables中有四表五鏈網絡
表 | 做用 |
---|---|
filter | 實現數據包的過濾(經常使用) |
nat | 修改數據包的地址和端口(經常使用) |
mangle | 修改數據包的服務類型、TTL、而且能夠配置路由實現QOS內核模塊(用得很少) |
raw | 決定數據包是否被狀態跟蹤機制處理(用得很少) |
而鏈分別是:PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING。tcp
filter表的鏈
filter表是iptables默認的表,有3條鏈,分別是INPUT、FORWARD和OUTPUT鏈。工具
nat表的鏈
對於nat表來講有3條鏈,分別是PREROUTING、OUTPUT和POSTROUTING鏈。佈局
規則表之間的優先順序:
Raw>mangle>nat>filter測試
規則鏈的優先順序
分3種狀況spa
入站數據流向
從外界到達防火牆的數據包,先被PREROUTING規則鏈處理(是否修改數據包地址等),以後會進行路由選擇(判斷該數據包應該發往何處),若是數據包的目標主機是防火牆本機(好比說Internet用戶訪問防火牆主機中的web服務器的數據包),那麼內核將其傳給INPUT鏈進行處理(決定是否容許經過等),經過之後再交給系統上層的應用程序(好比Apache服務器)進行響應。命令行
轉發數據流向
來自外界的數據包到達防火牆後,首先被PREROUTING規則鏈處理,以後會進行路由選擇,若是數據包的目標地址是其它外部地址(好比局域網用戶經過網 關訪問QQ站點的數據包),則內核將其傳遞給FORWARD鏈進行處理(是否轉發或攔截),而後再交給POSTROUTING規則鏈(是否修改數據包的地 址等)進行處理。
出站數據流向
防火牆本機向外部地址發送的數據包(好比在防火牆主機中測試公網DNS服務器時),首先被OUTPUT規則鏈處理,以後進行路由選擇,而後傳遞給POSTROUTING規則鏈(是否修改數據包的地址等)進行處理。
工做流程小結:
一、防火牆是一層層過濾的。實際是按照配置規則的順序從上到下,從前到後進行過濾的。
二、若是匹配上了規則,即明確代表是阻止仍是經過,此時數據包就不在向下匹配新規則了。
三、若是全部規則中沒有明確代表是阻止仍是經過這個數據包,也就是沒有匹配上規則,向下進行匹配,直到匹配默認規則獲得明確的阻止仍是經過。
四、防火牆的默認規則是對應鏈的全部的規則執行完之後纔會執行的(最後執行的規則)。
iptables的語法命令格式:
iptables -t [表名] 命令選項 [鏈名] 匹配參數 [-j目標動做]
說明:
表名和鏈名:用於指定iptables操做的是哪一個表哪條鏈
命令選項:用於指定管理iptables規則的方式(增長,刪除等)
匹配參數:用於指定對符合什麼條件的數據包進行處理
目標動做:用於指定對數據包的處理
選項:
-t
:指定須要維護的防火牆規則表,不使用-t時,默認操做filter表命令選項:
-A:
追加防火牆規則-D:
刪除防火牆規則-I:
插入防火牆規則-F:
清空防火牆規則-L:
列出防火牆規則-R:
替換防火牆規則-Z:
清空防火牆數據表統計信息-P:
設置鏈默認規則匹配參數
[!] -P:
匹配協議,!表明取反即不匹配[!] -s:
匹配源地址[!] -d:
匹配目標地址[!] -i:
匹配入站網卡接口[!] -o:
匹配出站網卡接口[!] --sport:
匹配源端口[!] --dport:
匹配目標端口[!] --src-range:
匹配源地址範圍[!] --dst-range:
匹配目標地址範圍[!] --limit:
匹配數據錶速率[!] --mac-source:
匹配源MAC地址[!] --sports:
匹配源端口[!] --dports:
匹配目標端口[!] --state:
匹配狀態[!] --string:
匹配應用層字串目標動做
ACCEPT:
容許數據包經過DROP:
丟棄數據包REJECT:
拒絕數據包經過LOG:
將數據包信息記錄syslog日誌DNAT:
目標地址轉換SNAT:
源地址轉換MASQUERADE:
地址欺騙REDIRECT:
重定向iptables的保存
默認的iptables防火牆規則會馬上生效,但若是不保存,當計算機重啓後全部的規則都將丟失,因此對防火牆規則進行及時的保存操做是有必要的。
備份工具:
iptables-save > /etc/sysconfig/iptables
還原工具:
iptables-restore < /etc/sysconfig/iptables
或者執行service iptables save
也行。
一、查看filter表的全部規則
iptables -nL
二、查看nat表的全部規則
iptables -t nat -nL
三、清空filter表的全部規則
iptables -t filter -F
四、往filter表添加一條規則,丟棄192.168.0.1主機發給本機的全部數據包
iptables -t filter -A INPUT -s 192.168.0.1 -j DROP
五、往filter表插入一條規則,拒絕192.168.0.2主機ping本機
iptables -I INPUT -s 192.168.0.2 -p icmp -j REJECT
六、查看filter表中防火牆規則並顯示規則編號
iptables -nL --line-number
七、刪除filter表中INPUT鏈的第一條規則
iptables -D INPUT 1
八、替換filter表INPUT鏈的第二條規則,拒絕除了192.168.0.3以外的任何主機鏈接本機
iptables -R INPUT 2 ! -s 192.168.0.3 -j REJECT
九、修改filter表INPUT鏈的默認規則爲接收數據包
iptables -P INPUT ACCEPT
十、禁止來自10.0.0.188 ip地址訪問80端口的請求
iptables -A INPUT -s 10.0.0.188 -p tcp --dport 80 -j DROP
十一、實現把訪問10.0.0.3:80的請求轉到172.16.1.17:80
iptables -t nat -A PREROUTING -d 10.0.0.3 -p tcp --dport 80 -j DNAT --to-destination 172.16.1.6:80
十二、只容許遠程主機訪問本機的80端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp -j DROP
1三、實現172.16.1.0/24段全部主機經過124.32.54.26外網IP共享上網。
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 124.32.54.26 iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j MASQUERADE
1四、容許任意客戶端訪問服務主機提供的平常服務(HTTP,HTTPS,DNS,NTP,SMTP,POP3)
iptables -A INPUT -p udp --dport 25 -j ACCEPT iptables -A INPUT -p udp --dport 53 -j ACCEPT iptables -A INPUT -p tcp --dport 53 -j ACCEPT iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 110 -j ACCEPT iptables -A INPUT -p tcp --dport 143 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT iptables -P INPUT DROP iptables -P OUTPUT ACCEPT
1五、禁止任何主機訪問本機22端口
iptables -A INPUT -p tcp -dport 22 -j DROP