iptables 防火牆

防火牆的概念

防火牆( FireWall ):隔離功能,工做在網絡或主機邊緣,對進出網絡或主機的 數據包基於必定的規則檢查,並在匹配某規則時由規則定義的行爲進行處理的一組功能的組件,基本上的實現都是默認狀況下關閉全部的經過型訪問,只開放容許訪問的策略vim


防火牆的分類

從邏輯上分爲主機和網絡防火牆

主機防火牆:服務範圍爲當前主機
網絡防火牆:服務範圍爲防火牆一側的局域網 centos

從物理上分爲硬件和軟件防火牆

硬件防火牆:在專用硬件級別實現部分功能的防火牆;另外一個部分功能基於軟件實現
軟件防火牆:運行於通用硬件平臺之上的防火牆的應用軟件 安全

從osi協議分爲網絡層和應用層防火牆

網絡層防火牆服務器

  • 包過濾防火牆
  • 網絡層對數據包進行選擇,選擇的依據是系統內設置的過濾邏輯,被稱爲訪問控制 列表(ACL),經過檢查數據流中每一個數據的源地址,目的地址,所用端口號和協議 狀態等因素,或他們的組合來肯定是否容許該數據包經過
  • 優勢:對用戶來講透明,處理速度快且易於維護
  • 缺點:沒法檢查應用層數據,如病毒等

應用層防火牆/代理服務器網絡

  • 將全部跨越防火牆的網絡通訊鏈路分爲兩段
  • 內外網用戶的訪問都是經過代理服務器上的「連接」來實現
  • 優勢:在應用層對數據進行檢查,比較安全
  • 缺點:增長防火牆的負載

現實生產環境中所使用的防火牆通常都是兩者結合體,即先檢查網絡數據,經過以後再送到應用層去檢查


防火牆的基本結構

防火牆的規則

規則rule:根據規則的匹配條件嘗試匹配報文,對匹配成功的報文根據規則定義的處理動 做做出處理 併發

  1. 匹配條件:默認爲與條件,同時知足
    基本匹配:IP,端口,TCP的Flags(SYN,ACK等)
    擴展匹配:經過複雜高級功能匹配
  2. 處理動做:稱爲target,跳轉目標
    內建處理動做:ACCEPT,DROP,REJECT,SNAT,MASQUERADE,,LOG...
    自定義處理動做:自定義chain,利用分類管理複雜情形

報文進入主機以後,流經的路徑:
iptables   防火牆
由上圖能夠看出報文的流向:tcp

  1. 流入本機:prerouting –> input –> 用戶空間請求報文
  2. 流出本機:用戶空間響應報文 –> output –> postrouting
  3. 由本機轉發的:prerouting –> forward –> postrouting

規則要添加在鏈上,才生效;添加在自定義上不會自動生效 ide

防火牆的鏈

防火牆的做用就是對通過的報文匹配規則,而後執行響應的動做,當報文通過這些"關卡"的時候,必須匹配"關卡"上的規則,可是關卡上有不少的規則,當咱們把這些規則串到一條鏈上的時候,就造成了鏈,以下圖所示
iptables   防火牆
鏈chainpost

  1. 內置鏈:POSTROUTING ,FORWARD,PREROUTING,INPUT,OUTPUT
  2. 自定義鏈:用於對內置鏈進行擴展或補充,可實現更靈活的規則組織管理機制;只有鉤子調用自定義鏈時,才生效

防火牆的表

把具備相同規則的集合叫表
表的分類google

  • filter 負責過濾功能,防火牆,內核模塊 iptables_filter
  • nat :網路地址轉換功能,內核模塊 iptables_nat
  • mangle:拆解報文,作出修改,並從新封裝,內核模塊 iptables_mangle
  • raw :關閉nat表上啓用的鏈接追蹤機制,內核模塊 iptanles_raw

全部的規則都是這四張表中的規則,也就是說,全部的規則都存在這四張表中

防火牆表與鏈的關係

鏈到表的對應關係

  • PREROUTING 存放於 raw mangle nat
  • INPUT 存放於 mangle filter nat(centos 7)
  • FORWARD 存放於 mangle filter
  • OUTPUT 存放於raw mangle nat filter
  • POSTROUTING 存放於mangle nat

表到鏈的對應關係

  • raw PREROUTING,OUTPUT
  • mangle PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
  • nat PREROUTING,FORWARD,OUTPUT,POSTROUTING,INPUT(centos 7有)
  • filter INPUT,FORWARD,OUTPUT

數據通過防火牆的流程iptables   防火牆

紅色箭頭是表的執行順序,藍色箭頭是數據流向


防火牆的處理動做

處理動做:(處理動做被稱爲target)
基本動做:

  • ACCEPT 容許數據包經過
  • DROP 直接丟棄數據包,不給任何迴應信息
  • REJECT 拒絕數據包經過,必要時會給數據發送端一個響應的信息,客戶端剛請求就會受到拒絕的信息
  • SNAT  源地址轉換,解決內網用戶用同一個公網地址上網的問題
  • MASQUERADE 是SNAT的一種特殊形式,適用於動態的臨時會變的IP上
  • DNAT 目標地址轉換
  • REDIRECT 在本機作端口映射
  • LOG 在/var/log/message文件中記錄日誌信息,而後將數據包傳遞給下一條規則,也就是說除了記錄外之外不對數據包作任何其餘操做,仍然讓下一規則去匹配
    iptables -I INPUT -p tcp --dport 80 -j LOG --log-prefix "new connection:"

擴展動做:
–reject-with 後面跟參數


防火牆的模塊

  1. icmp模塊
    #實現本身能夠ping其餘人,其餘人沒法ping本身.icmp-type 8是請求icmp-type 0是迴應
    iptables -A INPUT -p icmp -j REJECT
    iptables -A OUTPUT -p icmp -j REJECT
    iptables -I OUTPUT 1 -p icmp --icmp-type 8 -j ACCEPT
    iptables -I INPUT 1 -p icmp --icmp-type 0 -j ACCEPT
  2. multiport模塊
    #只贊成接受某些端口
    iptables -R INPUT 1 -p tcp -m multiport --dport 21:23,80,53 -j ACCEPT
  3. iprange模塊
    #只容許規定的網段IP訪問
    iptables -I INPUT 1 -p tcp --dport 22 -m iprange --src-range 192.168.153.101-192.168.153.103 -j ACCEPT
  4. ipset模塊
    #若是IP過多,能夠加到一個集合裏,經過控制集合來實現控制大量IP
    ipset create httplist hash:net maxelem 10000   #限制一個集合裏的最大IP數
    ipset add httplist 192.168.153.101   #添加IP到集合裏
    ipset --list   #查看集合裏的IP
    iptables -I OUTPUT 1 -p tcp --sport 80 -m set --match-set httplist dst -j ACCEPT
    iptables -I INPUT 1 -p tcp --dport 80 -m set --match-set httplist src -j ACCEPT
  5. string&time模塊
    iptables -I INPUT 1 -m string --algo bm --string "google" -j REJECT #限制路徑裏有"google"的請求
    iptables -R INPUT 1 -m time --timestart 7:00 --timestop 8:55 --weekdays Mon,Thu -m string --algo bm --string "baidu" -j REJECT  #每週的週一,週二的早7點到早8:55訪問路徑中有"baidu"的請求拒絕
  6. connlimit模塊
    #控制訪問併發樹,即每一個IP同時鏈接到一個服務器個數
    iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 1 -j REJECT
  7. limit模塊
    #控制每分鐘鏈接的個數爲10,即6個只容許一個訪問被迴應
    iptables -A INPUT -p icmp --icmp-type 8 -m limit --limit 10/minute --limit-burst 8 -j ACCEPT
  8. 狀態跟蹤
    下圖爲ftp的創建鏈接的過程
    iptables   防火牆
    如上圖所示,服務端21號端口收到客戶端的請求,這個狀態是new(第一次創建鏈接的狀態),而後服務端收到請求,開啓隨機端口Y,而且經過21號端口把開啓的隨機端口Y告訴客戶端,讓客戶端訪問這個端口,這個狀態是ESTABLISHED,而後客戶端就去訪問服務端開啓的端口,這個狀態叫RELATED
    #
    modprobe nf_conntrack_ftp  #加載ftp的這個模塊
    lsmod |grep nf_conntrack_ftp #查看是否加載模塊
    iptables -I INPUT -p tcp --dport 21 -m state --state NEW -j ACCEPT  #這裏的--state NEW能夠不寫,只是強調是否經過21號端口第一次簡歷端口
    iptables -I INPUT 2 -m state --state ESTABLISHED,RELATED -j ACCEPT #讓追蹤服務器開啓的這個Y端口

網絡防火牆

實驗環境
host ip:192.168.153.7 ip: 10.10.10.7 兩塊網卡
inside ip:192.168.153.101
outside ip:10.10.10.102

  1. 在firewalld上開啓ip轉發
    [root@firewall ~]# vim /etc/sysctl.conf 
    net.ipv4.ip_forward = 1
    [root@firewall ~]# sysctl -p  #檢查是否開啓轉發
    net.ipv4.ip_forward = 1
  2. 在inside增長默認路由
    [root@inside ~]# route add default gw 192.168.153.7
  3. 在outside增長默認路由
    [root@outside ~]# route add default gw 10.10.10.7
  4. 只容許inside ping outside 不容許outside ping inside
    #方法一   #利用icmp 的8 和 0 端口來作轉發實現限制ping
    [root@firewall ~]# iptables -A FORWARD -j REJECT
    [root@firewall ~]# iptables -I FORWARD -s 192.168.153.0/24 -d 10.0.0.0/8 -p icmp --icmp-type 8 -j ACCEPT
    [root@firewall ~]# iptables -I FORWARD -d 192.168.153.0/24 -s 10.0.0.0/8 -p icmp --icmp-type 0 -j ACCEPT
    #方法二#利用發過去的icmp報文返回的響應作追蹤
    [root@firewall ~]# iptables -A FORWARD -j REJECT
    [root@firewall ~]# iptables -I FORWARD -s 192.168.153.0/24 -d 10.0.0.0/8 -p icmp --icmp-type 8 -j ACCEPT
    [root@firewall ~]# iptables -I FORWARD -m state --state ESTABLISHED -j ACCEPT
    #方法三#利用狀態追蹤,對第一次發送的icmp報文後返回的icmp響應追蹤
    [root@firewall ~]# iptables -A FORWARD -j REJECT
    [root@firewall ~]# iptables -I FORWARD -s 192.168.153.0/24 -d 10.0.0.0/8 -p icmp -m state --state NEW -j ACCEPT
    [root@firewall ~]# iptables -I FORWARD -m state --state ESTABLISHED -j ACCEPT
  5. 實現SNAT
    原理:在路由器後(PSOTROUTING)將內網的ip地址修改成外網網卡的ip地址。
    適合場景:共享內部主機上網。
    編寫規則
    iptables -t nat -I POSTROUTING -s 內網網段 -j SNAT --to-source 外網ip地址
    iptables -t nat -I POSTROUTING -s 內網網段 -j MASQUERADE
    [root@firewall ~]# iptables -t nat -A POSTROUTING -s 192.168.153.0/24 -j SNAT --to-source 172.18.254.96
    [root@firewall ~]# iptables -t nat -A POSTROUTING -s 192.168.153.0/24 -j MASQUERADE
  6. 實現DNAT
    原理:在路由前(PREROUTING)未來自外網訪問網關公網ip及對應端口的目的ip及端口修改成內部服務器的ip及端口,實現發佈內部服務器。
    應用場景:發佈內部主機服務。
    防火牆規則:
    iptables -t nat -I PREROUTING -i 外網網卡 -d 外網ip tcp --dport 發佈的端口 -j DNAT --to-destination 內網服務ip:端口
    #在inside開啓httpd服務,設置默認端口爲9527端口
    [root@firewall ~]# iptables -t nat -A PREROUTING -d 172.18.254.96 -p tcp --dport 80 -j DNAT --to-destination 192.168.153.101:9527
相關文章
相關標籤/搜索