一、Linux防火牆介紹
IPTABLES由四個表(raw表、mangle表、nat表、filter表)和五個鏈(INPUT鏈、OUTPUT鏈、FORWARD鏈、PREROUTING鏈、POSTROUTING鏈)組成。
1、規則表分為以下4種
1)filter表:用來對資料包進行過濾,表內包含三個鏈,即:INPUT,FORWARD,OUTPUT
2)Nat表:nat表主要用來修改資料包的ip地址、埠號等資訊。包含三個鏈,即PREROUTING,POSTROUTING,OUTPUT
3)Mangle表:用來修改資料包的TOS、TTL,或者為資料包設定MARL標記,實現流量×××,策略路由等高階應用,包含五個鏈,PREROUTING,POSTROUTING,INPUT,OUTPUT,FORWARD
4)Raw表:用來決定是否對資料包進行狀態跟蹤,包含兩個鏈:即OUTPUT,PREROUTING
2、規則鏈分為以下5種
1)INPUT鏈:當收到訪問防火牆本機地址的資料包(入站),應用此鏈中的規則。
2)OUTPUT鏈:當防火牆本機向外傳送資料包(出站)時,應用此鏈中的規則。
3)FORWARD鏈:當收到需要透過防火牆中轉傳送給其他地址的資料包(轉發)時,應用此鏈中的規則。
4)PREROUTING鏈:在對資料包做路由選擇之前,應用此鏈中的規則。
5)POSTROUTING鏈:在對資料包做路由選擇之後,應用此鏈中的規則。
3、資料包過濾的匹配流程
1)規則表的順序
當資料包抵達防火牆時,將依次應用raw表,mangle表,nat表和filter表中對應鏈內的規則,應用順序為raw-mangle-nat-filter
2)規則鏈之間的順序
A、入站資料流向:來自外界的資料包到達防火牆後,首先被PRETOUTING鏈處理,然後進行路由選擇,如果資料包的目標地址是防火牆本機,那麼核心將其傳遞給INPUT鏈進行處理,透過以後再講給系統的上層應用程式進行響應。
B、轉發資料流向:來自外界的資料包到達防火牆後,首先被PREROUTING鏈處理,然後再進行路由選擇,如果資料包的目的地址是其他外部的地址,則核心將其傳遞給FORWARD鏈進行處理,最後交給POSTROUTING鏈進行處理。
C、出站資料流向:防火牆本機向外部地址傳送的資料包,首先被OUTOUT處理,然後進行路由選擇,再交給POSTROUTING鏈進行處理。
3)規則鏈內部各條防火牆規則之間的順序
當資料包經過每條規則鏈時,依次按第一條規則,第二條規則......的順序進行匹配和處理,鏈內的過濾遵循“匹配即停止”的原則,一旦找到一條相匹配的規則,則不再檢查本鏈內後續的其它規則,如果比對完整個鏈,也找不到與資料包相匹配的規則,就按照規則鏈的預設策略進行處理。
二、IPTABLES執行規則順序
iptables執行規則時,是從規則表中從上至下順序執行的,如果沒遇到匹配的規則,就一條一條往下執行,如果遇到匹配的規則後,那麼就執行本規則,
執行後根據本規則的動作(accept, reject, log等),決定下一步執行的情況,後續執行一般有三種情況。
1)一種是繼續執行當前規則佇列內的下一條規則。比如執行過Filter佇列內的LOG後,還會執行Filter佇列內的下一條規則.
2)一種是中止當前規則佇列的執行,轉到下一條規則佇列。比如從執行過accept後就中斷Filter佇列內其它規則,跳到nat佇列規則去執行.
3)一種是中止所有規則佇列的執行.
iptables 是採用規則堆疊的方式來進行過濾,當一個封包進入網路卡,會先檢查 Prerouting,然後檢查目的 IP 判斷是否需要轉送出去,接著就會跳到 INPUT 或 Forward 進行過濾,如果封包需轉送處理則檢查 Postrouting,如果是來自本機封包,則檢查 OUTPUT 以及 Postrouting。過程中如果符合某條規則將會進行處理,處理動作除了 ACCEPT、REJECT、DROP、REDIRECT 和 MASQUERADE 以外,還多出 LOG、ULOG、DNAT、SNAT、MIRROR、QUEUE、RETURN、TOS、TTL、MARK 等,其中某些處理動作不會中斷過濾程式,某些處理動作則會中斷同一規則煉的過濾,並依照前述流程繼續進行下一個規則煉的過濾(注意:這一點與 ipchains 不同),一直到堆疊中的規則檢查完畢為止。透過這種機制所帶來的好處是,我們可以進行復雜、多重的封包過濾,簡單的說,iptables 可以進行縱橫交錯式的過濾(tables)而非煉狀過濾(chains)。
ACCEPT:將封包放行,進行完此處理動作後,將不再比對其它規則,直接跳往下一個規則煉(nat:postrouting)
REJECT:攔阻該封包,並傳送封包通知對方,可以傳送的封包有幾個選擇:ICMP port-unreachable、ICMP echo-reply 或是 tcp-reset(這個封包會要求對方關閉聯機),進行完此處理動作後,將不再比對其它規則,直接 中斷過濾程式。 範例如下:
iptables -A FORWARD -p TCP --dport 22 -j REJECT --reject-with tcp-reset
DROP :丟棄封包不予處理,進行完此處理動作後,將不再比對其它規則,直接中斷過濾程式。
REDIRECT:將封包重新導向到另一個埠(PNAT),進行完此處理動作後,將會繼續比對其它規則。 這個功能可以用來實作通透式 porxy 或用來保護 web 伺服器。例如:iptables -t nat -A PREROUTING -p tcp ——dport 80 -j REDIRECT ——to-ports 8080
三、IPTABLES規則介紹
1、增加一條規則
iptables [-AI 鏈名] [-io 網路介面] [-p 協議] [-s 來源IP/網域] [-d 目標IP/網域] -j [ACCEPT|DROP|REJECT|LOG] -A :新增一條規則,該規則增加在規則的最後面。 -I :插入一條規則,如果沒有指定此規則的順序,預設是插入成第一條規則。 -io:網路介面,設定封包進出的介面規範。 -i :封包所進入的那個網路介面,例如 eth0, lo 等介面。需與 INPUT 鏈配合。 -o :封包所傳出的那個網路介面,需與 OUTPUT 鏈配合。 -p :協定,設定此規則適用於哪種封包格式。主要的封包格式有:tcp, udp, icmp 及 all。 -s :來源 IP/網域:設定此規則之封包的來源專案,可指定單純的 IP 或包括網域,例如: IP :192.168.0.100 網域:192.168.0.0/24, 192.168.0.0/255.255.255.0 均可。 若規範為『不許』時,則加上 ! 即可,例如:-s ! 192.168.100.0/24 表示不許 192.168.100.0/24 之封包來源; -d :目標 IP/網域:同 -s ,只不過這裡指的是目標的 IP 或網域。 -j :後面接動作,主要的動作有接受(ACCEPT)、丟棄(DROP)、拒絕(REJECT)及記錄(LOG)
2、刪除一條規則
iptables -D INPUT [line-number]
-D :刪除一條規則。
通常使用:iptables -nL --line-numbers,顯示規則及序號,然後透過前面的序號來刪除。
注意:每刪除一條規則後,它後面的規則的序號是會改變的。
3、檢視iptables情況
-L :list, 列出指定鏈上的所有規則,本選項須置後。 -n :numberic,以數字格式顯示地址和埠號。 -v :verbose,詳細資訊。 -vv:更詳細。 -x :exactly,顯示計數器結果的精確值,而非單位轉換後的易讀值。 --line-numbers:顯示規則的序號。
常用組合:
--vnL
--vvnxL --line-numbers
四、常用命令
1、遮蔽某個IP地址
iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP
注意需要將上述的 XXX 改成要遮蔽的實際 IP 地址,其中的 -A 參數列示在 INPUT 鏈的最後追加本條規則。(IPTables中的規則是從上到下匹配的,一旦匹配成功就不再繼續往下匹配)
2、使用Multiport控制多埠
iptables -A INPUT -p tcp -m multiport --dports 22,80,443 -j ACCEPT
3、在規則中使用 IP 地址範圍
iptables -A OUTPUT -p tcp -d 192.168.100.0/24 --dport 22 -j ACCEPT
4、配置埠轉發
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j REDIRECT --to-port 2525
上述命令會將所有到達 eth0 網路卡 25 埠的流量重定向轉發到 2525 埠。
5、遮蔽HTTP服務Flood攻擊
iptables -A INPUT -p tcp --dport 80 -m limit --limit 100/minute --limit-burst 200 -j ACCEPT
上述命令會將連線限制到每分鐘 100 個,上限設定為 200。
6、禁止PING
iptables -A INPUT -p icmp -i eth0 -j DROP
7、允許訪問迴環網路卡
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
環回訪問(127.0.0.1)是比較重要的,建議都開放。
8、限制併發連線數
iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT
以上規則限制每客戶端不超過 3 個連線。
9、清空IPtables規則
iptables -F iptables -F INPUT #要清空特定的表可以使用 -t 引數進行指定,例如: iptables -t nat -F
10、丟棄無效資料包
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
11、遮蔽郵件傳送規則
iptables -A OUTPUT -p tcp --dports 25,465,587 -j REJECT
12、阻止連線到某塊網路卡
iptables -A INPUT -i eth0 -s xxx.xxx.xxx.xxx -j DROP
13、限制某個IP(網段/某段IP)連線指定埠
iptables -I INPUT -s 192.168.20.0/24 -p tcp -d 192.168.20.40 --dport 3008 -j ACCEPT
14、配置完規則後記得:儲存和重啟
service iptables save
service iptables restart
15、透過字串實現URL過濾
iptables -I OUTPUT -p tcp -m string --string "myqcloud.com" --algo bm -j ACCEPT
16、插入一條限來源 、限去向的規則
iptables -I INPUT -p tcp -s 192.168.1.0/24 -d 192.168.200.40 --dport 3388 -j ACCEPT
注:CentOS中iptables存在位置:/etc/sysconfig/iptables