Linux運維:防火牆管理工具iptables

防火牆

防火牆做爲一種內部網與外部網之間的訪問控制設備,一般安裝在內部網絡與外部網絡的邊際,防火牆具備很好的網絡保護做用。入侵者必須先經過防火牆的安全防線才能接觸計算機。能夠將防火牆配置不一樣的安全級別,達到不一樣的安全防禦。web

iptables與netfilter的關係

netfilter/iptables是集成在Linux2.4x版本內核中的包過濾防火牆系統。它能夠實現數據包過濾網絡地址轉換以及數據包管理功能。Linux中的防火牆系統中,netfilter位於內核空間,負責對本機全部流入,流出,轉發的數據包進行查看,修改,丟棄,拒絕等操做,因爲netfilter位於內核空間,用戶通常沒法接觸內核和修改內核,因此就須要一些命令行工具進行管理,經常使用的有iptables,firewalld等工具。所以,真正實現防火牆功能的是netfilter,它是Linux內核中實現包過濾的內部結構。安全

iptables結構

簡單來講,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鏈。工具

  1. INPUT:對於指定到本地套接字的包,即到達本地防火牆服務器的數據包。
  2. FORWARD:路由穿過的數據包,即通過本地防火牆服務器的數據包。
  3. OUTPUT:本地建立的數據包

nat表的鏈
對於nat表來講有3條鏈,分別是PREROUTING、OUTPUT和POSTROUTING鏈。佈局

  1. PREROUTING:全部的數據包進來的時侯都先由這個鏈處理
  2. OUTPUT:本地建立的數據包在路由前進行改變
  3. POSTROUTING:在數據包即將出去時改變數據包信息,全部的數據包出來的時侯都先由這個鏈處理

iptables工做流程

  1. 當一個數據包進入網卡時,它首先進入PREROUTING鏈,內核根據數據包目的IP判斷是否須要轉送出去。
  2. 若是數據包就是進入本機的,它就會沿着圖向上移動,到達INPUT鏈。數據包到了INPUT鏈後,任何進程都會收到它。本機上運行的程序能夠發送數據包,這些數據包會通過OUTPUT鏈,而後到達POSTROUTING鏈輸出。
  3. 若是數據包是要轉發出去的,且內核容許轉發,數據包就會如圖所示向右移動,通過FORWARD鏈,而後到達POSTROUTING鏈輸出。

clipboard.png

規則表之間的優先順序:
Raw>mangle>nat>filter測試

規則鏈的優先順序
分3種狀況spa

入站數據流向

從外界到達防火牆的數據包,先被PREROUTING規則鏈處理(是否修改數據包地址等),以後會進行路由選擇(判斷該數據包應該發往何處),若是數據包的目標主機是防火牆本機(好比說Internet用戶訪問防火牆主機中的web服務器的數據包),那麼內核將其傳給INPUT鏈進行處理(決定是否容許經過等),經過之後再交給系統上層的應用程序(好比Apache服務器)進行響應。命令行

轉發數據流向

來自外界的數據包到達防火牆後,首先被PREROUTING規則鏈處理,以後會進行路由選擇,若是數據包的目標地址是其它外部地址(好比局域網用戶經過網 關訪問QQ站點的數據包),則內核將其傳遞給FORWARD鏈進行處理(是否轉發或攔截),而後再交給POSTROUTING規則鏈(是否修改數據包的地 址等)進行處理。

出站數據流向

防火牆本機向外部地址發送的數據包(好比在防火牆主機中測試公網DNS服務器時),首先被OUTPUT規則鏈處理,以後進行路由選擇,而後傳遞給POSTROUTING規則鏈(是否修改數據包的地址等)進行處理。

工做流程小結:

一、防火牆是一層層過濾的。實際是按照配置規則的順序從上到下,從前到後進行過濾的。
二、若是匹配上了規則,即明確代表是阻止仍是經過,此時數據包就不在向下匹配新規則了。
三、若是全部規則中沒有明確代表是阻止仍是經過這個數據包,也就是沒有匹配上規則,向下進行匹配,直到匹配默認規則獲得明確的阻止仍是經過。
四、防火牆的默認規則是對應鏈的全部的規則執行完之後纔會執行的(最後執行的規則)。

iptables語法

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也行。

iptables常見規則示例

一、查看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
相關文章
相關標籤/搜索