SECURITY:iptables防火牆(網絡層)

防火牆

  • 防火牆指(firewall)的是一個由軟件和硬件設備組合而成、在內部網和外部網之間、專用網與公共網之間的界面上構造的保護屏障.是一種獲取安全性方法的形象說法,它是一種計算機硬件和軟件的結合,使Internet與Intranet之間建立起一個安全網關(Security Gateway),從而保護內部網免受非法用戶的侵入,防火牆主要由服務訪問規則、驗證工具、包過濾和應用網關4個部分組成,防火牆就是一個位於計算機和它所連接的網絡之間的軟件或硬件。該計算機流入流出的所有網絡通信和數據包均要經過此防火牆。
  • 防火牆是一種隔離工具,工作於主機和網絡邊緣,對於出入本機或網絡的報文,根據事先定義的檢查規則左匹配檢驗,對於能被匹配的報文做出處理的組件。
  • Firewall 分主機防火牆和網絡防火牆,從實現方式分軟件防火牆和硬件防火牆;防火牆是對報文的過濾和處理,首先我得知道報文的發送是單向的,這就涉及到源和目標的問題,如何理解什麼是源,什麼是目標
    A —————發送報文—————>B A:源主機,源IP, B:目標主機,目標IP
    A<—————收到報文響應———B A:目標主機,目標IP, B:源主機,源IP

包過濾防火牆

  • 包過濾防火牆是用一個軟件查看所流經的數據包的包頭(header),由此決定整個包的命運。它可能會決定丟棄(DROP)這個包,可能會接受(ACCEPT)這個包(讓這個包通過),也可能執行其它更復雜的動作。
  • 包過濾是一種內置於Linux內核路由功能之上的防火牆類型,其防火牆工作在網絡層

四表五鏈

  • filter(過濾表):過濾數據包
  • nat(地址轉換表):network address translation,用於網絡地址轉換(IP、端口)
  • mangle(包標記表):修改數據包的服務類型、TTL、並且可以配置路由實現QOS
  • raw(狀態跟蹤表):決定數據包是否被狀態跟蹤機制處理

  • INPUT:進來的數據包應用此規則鏈中的策略
  • FORWARD:轉發數據包時應用此規則鏈中的策略
  • OUTPUT:外出的數據包應用此規則鏈中的策略
  • PREROUTING:對數據包作路由選擇前應用此鏈中的規則(所有的數據包進來的時侯都先由這個鏈處理)
  • POSTROUTING:對數據包作路由選擇後應用此鏈中的規則(所有的數據包出來的時侯都先由這個鏈處理)

表實現的鏈

在這裏插入圖片描述

包過濾匹配流程

  • 規則鏈內的匹配順序
    – 順序對比,匹配即停止(LOG除外)
    – 若無任何匹配,則按該鏈的默認策略處理

iptables用法解析

  • 管理程序位置
    /sbin/iptables

iptabels基本用法

  • 注意事項/整體規律
    – 可以不指定表,默認爲filter表
    – 可以不指定鏈,默認對應表的所有鏈
    – 如果沒有匹配的規則,則使用防火牆默認規則
    – 選項/鏈名/目標操作 用 大寫字母,其餘都小寫

iptabels語法格式

  • iptables [-t 表名] 選項 [鏈名] [條件] [-j 目標操作]
  • iptables命令的常用選項
    在這裏插入圖片描述

iptables命令

-L 列出指定鏈上的所有規則
-t 指定表,默認爲filter
-n 以數字格式顯示地址和端口號
-v 顯示詳細信息
–line-number 顯示規則編號
-F 清空規則鏈,省略鏈表示清空指定表上的所有鏈
-N 創建新的自定義規則鏈
-X 刪除用戶自定義的空的規則鏈
-P 指定鏈的默認策略,包括accept、drop
-A 將新規則追加至指定鏈的尾部
-I 將新規則插入鏈的指定位置
-D 刪除指定鏈上的指定規則

匹配規則

-s 指定源ip(也可以指定網段)
-d 指定目標ip(也可以指定網段)
-p 指定協議
–dport 指定端口
-j jump至指定的targrt
-j target:jump至指定的target
ACCEPT:允許通過/放行
DROP:丟棄
REJECT:拒絕
LOG:記錄日誌
RETURN:返回調用鏈
REDIRECT:端口重定向
MARK:做防火牆標記
DNAT:目標地址轉換
SNAT:源地址轉換
MASQUERADE:地址僞裝

防火牆規則實例

  • 清空所有策略:
    iptables -F #默認filter表
    iptables -t nat -F #nat表
  • 自定義一個鏈:
    iptables -I INPUT -p udp -j ACCEPT#插入規則至filter表中的INPUT鏈的開頭,允許任何人使用UDP協議訪問本機
    iptables -I INPUT 2 -p icmp -j ACCEPT#插入規則至filter表中的INPUT鏈的第2行,允許任何人使用ICMP協議訪問本機
    iptables -t filter -A INPUT -p tcp -j ACCEPT #追加規則至filter表中的INPUT鏈的末尾,允許任何人使用TCP協議訪問本機
  • 查看iptables防火牆規則
    iptables -nL # 查看filter表所用鏈的規則
    iptables -nL INPUT --line-numbers #僅查看INPUT鏈的規則,同時顯示行號
  • 刪除規則
    iptables -D INPUT 3 #刪除filter(默認)表中INPUT鏈的第3條規則
    iptables -t filter -D INPUT 3 #刪除filter表中INPUT鏈的第3條規則
  • 設置防火牆默認規則
    iptables -t filter -P INPUT DROP
  • 保存規則
    iptables-save > /etc/sysconfig/iptables

filter過濾和轉發控制

開啓內核的IP轉發

Linux內核默認支持軟路由功能,通過修改內核參數即可開啓或關閉路由轉發功能

echo 0 > /proc/sys/net/ipv4/ip_forward            #關閉路由轉發
echo 1 > /proc/sys/net/ipv4/ip_forward            #開啓路由轉發
//注意以上操作僅當前有效,計算機重啓後無效
echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf
#修改/etc/sysctl.conf配置文件,可以實現永久有效規則

iptables防火牆規則的條件

iptables防火牆可以根據很多很靈活的規則進行過濾行爲,具體常用的過濾條件如下表
在這裏插入圖片描述

主機型防火牆案例

iptables -I INPUT -p tcp --dport 80 -j REJECT
iptables -I INPUT -s 192.168.2.100 -j REJECT
iptables -I INPUT -d 192.168.2.5 -p tcp --dport 80 -j REJECT
iptables -I INPUT -i eth0 -p tcp --dport 80 -j REJECT
iptables  -A  INPUT  -s 192.168.4.100  -j  DROP
//丟棄192.168.4.100發給本機的所有數據包
iptables  -A  INPUT -s  192.168.2.0/24  -j  DROP
//丟棄192.168.2.0/24網絡中所有主機發送給本機的所有數據包
iptables -A  INPUT -s  114.212.33.12  -p tcp --dport 22 -j  REJECT
//拒絕114.212.33.12使用tcp協議遠程連接本機ssh(22端口)

網絡型防火牆案例

  • 打開proxy的路由轉發功能
  • 實驗拓撲圖:
    在這裏插入圖片描述

添加網關的命令

  • 方法一(臨時)
route add default gw 192.168.4.5
  • 方法二(永久)
nmcli connection modify eth0 ipv4.gateway 192.168.4.5
nmcli connection up eth0
  • 方法三(永久)
vim /etc/sysconfig/network-scripts/ifcfg-eth0
GATEWAY=192.168.4.200  #添加這一行
  • 修改防火牆規則
iptables -P FORWARD DROP  #設置filter表FOEWARD鏈默認DROP規則
iptables -A FORWARD -p tcp --sport 80 -j ACCEPT  #添加filter表FOEWARD鏈通過tcp協議中原端口爲80的規則
iptables -A FORWARD -p tcp --dport 80 -j ACCEPT  #添加filter表FOEWARD鏈通過tcp協議中目的端口爲80的規則
  • 一次定義多個端口
iptables -A FORWARD -p tcp -m multiport --sports 22,80,8080,3306 -j ACCEPT
iptables -A FORWARD -p tcp -m multiport --dports 22,80,8080,3306 -j ACCEPT

測試結果,client1可以訪問web1的tcp協議80等等端口的服務

擴展匹配

擴展條件的方法

  • 前提條件
    – 有對應的防火牆模塊支持
  • 基本用法
    – -m 擴展模塊 --擴展條件 條件值

常見的擴展條件類型

選項 用法
MAC地址匹配 -m mac --mac-source MAC地址
多端口匹配 -m multiport --sports 源端口列表
多端口匹配 -m multiport --dports 目標端口列表
IP範圍匹配 -m iprange --src-range IP1-IP2
IP範圍匹配 -m iprange --dst-range IP1-IP2

擴展案例

根據MAC地址過濾

iptables  -A  INPUT  -p tcp --dport 22\
> -m   mac --mac-source  52:54:00:00:00:0b  -j  DROP
#拒絕52:54:00:00:00:0b這臺主機遠程本機

基於多端口設置過濾規則

iptables  -A  INPUT  -p tcp   \
> -m  multiport --dports  20:22,25,80,110,143,16501:16800  -j  ACCEPT
#一次性開啓20,21,22,25,80,110,143,16501到16800所有的端口

根據IP地址範圍設置規則

iptables  -A  INPUT  -p tcp  --dport  22  \
> -m  iprange  --src-range  192.168.4.10-192.168.4.20   -j  ACCEPT
#允許從 192.168.4.10-192.168.4.20 登錄
注意,這裏也可以限制多個目標IP的範圍,參數是--dst-range,用法與--src-range一致。
iptables -A INPUT -p tcp --dport 22  -s 192.168.4.0/24  -j  DROP
禁止從 192.168.4.0/24 網段其他的主機登錄

配置SNAT實現共享上網

SANT源地址轉換

  • Source Network Address Translation
    – 修改數據包的源地址
    – 僅用於nat表的POSTROUTING

設置防火牆規則,實現IP地址的僞裝(SNAT源地址轉換)

  • 確保proxy主機開啓了路由轉發功能
  • 設置防火牆規則,實現SNAT地址轉換
iptables  -t  nat  -A POSTROUTING \
> -s  192.168.4.0/24 -p tcp --dport 80  -j SNAT  --to-source 192.168.2.5
  • 登陸web主機查看日誌
tail  /var/log/httpd/access_log
.. ..
192.168.2.5 - - [12/Aug/2018:17:57:10 +0800] "GET / HTTP/1.1" 200 27 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"

通過日誌會發現,客戶端是先僞裝爲了192.168.2.5之後再訪問的web服務器!

  • 擴展知識,對於proxy外網IP不固定的情況可以執行下面的地址僞裝,動態僞裝IP。
iptables  -t  nat  -A POSTROUTING \
> -s  192.168.4.0/24 -p tcp --dport 80 -j MASQUERADE

最後,所有iptables規則都是臨時規則,如果需要永久保留規則需要執行如下命令:

service  iptables save
或者
iptables-save > /etc/sysconfig/iptables
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章