iptables ipset詳解

iptables

iptables [-t 表名] 命令選項 [鏈名] [條件匹配] [-j 目標動作或跳轉]

  • -t 表名 可以省略,指定規則存放在哪個表中,默認爲filter表 用於存放相同功能的規則
    • filter表: 負責過濾功能能,
    • nat表: 網絡地址轉換功能
    • mangle表: 拆解報文 做出修改並重新封裝的功能
    • raw表: 關閉nat表上啓用的連接追蹤機制
  • 命令選項
    • -A 在指定鏈的末尾添加(append)一條新的規則
    • -D 刪除(delete)指定鏈中的某一條規則,可以按規則序號和內容刪除
    • -I 在指定鏈中插入(insert)一條新的規則,默認在第一行添加
    • -R 修改、替換(replace)指定鏈中的某一條規則,可以按規則序號和內容替換
    • -L 列出(list)指定鏈中所有的規則進行查看
    • -E 重命名用戶定義的鏈,不改變鏈本身
    • -F 清空(flush)
    • -N 新建(new-chain)一條用戶自己定義的規則鏈
    • -X 刪除指定表中用戶自定義的規則鏈(delete-chain)
    • -P 設置指定鏈的默認策略(policy)
    • -Z 將所有表的所有鏈的字節和數據包計數器清零
    • -n 使用數字形式(numeric)顯示輸出結果
    • -v 查看規則表詳細信息(verbose)的信息
    • -V 查看版本(version)
    • -h 獲取幫助(help)
  • 鏈名 鏈是指很多規則串在一起組成一條鏈條,有先後順序,總共就幾個,根據規則分類的
    • INPUT 針對網絡進入的報文規則
    • OUTPUT 針對網絡出的報文規則
    • PREROUTING 路由前
    • POSTROUTING 路由後
    • FORWARD 轉發
    • 也可以自定義鏈,但是自建鏈最終還是要放到上面的鏈上
  • 條件匹配 選擇匹配的選項
    • -p TCP/UDP/ICMP/all : 匹配的連接類型
    • -s ip/網段/hostname等 : 匹配source的具體項
    • -d ip/網段/hostname等 : 匹配destination的具體項
    • -i eth0等interface name
    • -m match extended match
    • –sport source port
    • –dport destination port
  • -j target 指定匹配上規則後的具體動作
    • ACCEPT 允許數據包通過
    • DROP 直接丟棄數據包,不給任何迴應信息
    • REJECT 拒絕數據包通過,必要時會給數據發送端一個響應的信息。
    • LOG在/var/log/messages文件中記錄日誌信息,然後將數據包傳遞給下一條規則
    • 當自定義鏈時 在掛載自定義鏈到具體鏈時在這裏指定自定義鏈

日常使用

  • iptables -L -nv 查看規則 iptables -L 鏈名字 查看某個鏈的規則 -line-numbers 列數規則的編號,這個編號可用於刪除
  • iptables -I INPUT -s 11.250.199.16 -j DROP 在INPUT鏈首上插入一條規則,丟棄 11.250.199.16的訪問
  • iptables -A INPUT -s 192.168.0.0/24 -j ACCEPT 在INPUT鏈尾上插入一條規則,允許 192.168 網段的訪問 -A換爲 -D就是刪除
  • iptables -A FORWARD -s 192.168.1.11 -j REJECT 拒絕轉發來自192.168.1.10主機的數據
  • iptables -I INPUT -s 121.14.48.1 -m statistic --mode random --probability 0.5 -j DROP 50%丟包
  • iptables -A INPUT -p tcp -s 11.160.13.129 --dport 3306 -j DROP 丟棄通過tcp連接 3306端口的訪問
  • iptables -D INPUT 1 刪除INPUT鏈的第一條規則
  • iptables -F INPUT 清空此鏈中的規則
  • service iptables save 它能把規則自動保存在/etc/sysconfig/iptables中, 當計算機啓動時,rc.d下的腳本將用命令iptables-restore調用這個文件,從而就自動恢復了規則 需要yum install iptables-services

創建自定義鏈

  • iptables -N xxx 創建自定義鏈xxx
  • iptables -I xxx -s 11.250.199.16 -j DROP 對自定義鏈設置規則
  • 注意: 到此爲止這個自定義鏈都是無用的,因爲沒有在任何的默認鏈中引用
  • iptables -I INPUT -ptcp --dport 3306 -j xxx 將自定義鏈xxx掛到INPUT鏈上 這時候次鏈就生效了
  • iptables -E xxx new_xxx 修改自定義鏈名字 修改了名字引用自動生效
  • iptables -X new_xxx 刪除自定義鏈,但是要滿足兩個條件
    • 1.自定義鏈沒有被任何默認鏈引用 有的話通過 iptables -D INPUT 1 刪除
    • 2.自定義鏈中沒有任何規則 有的話 iptables -F new_xxx 清空

ipset

ipset是iptables的擴展,它允許你創建 匹配整個地址集合的規則。而不像普通的iptables鏈只能單IP匹配, ip集合存儲在帶索引的數據結構中,這種結構即時集合比較大也可以進行高效的查找,除了一些常用的情況,比如阻止一些危險主機訪問本機,從而減少系統資源佔用或網絡擁塞,IPsets也具備一些新防火牆設計方法,並簡化了配置.官網:http://ipset.netfilter.org/

  • ipset create blacklist hash:net maxelem 1000000
    • 創建名爲blacklist的ipset
    • hash:net 用什麼進行hash ,也可以是hash:ip 就只能ip不能網段 hash:ip,port ip+port進行hash
    • ipset默認可以存儲65536個元素,使用maxelem指定數量
    • 也可以有timeout 數字 這種參數,指定這個集合裏默認的超時時間單位s,超時後會自動把裏面的對象刪除
  • ipset list 查看已創建的ipset ipset list xxx 也可以帶名字
  • ipset add blacklist 10.60.10.10 加入一個名單ip 也可以是網段
    • ipset add blacklist 6.6.6.6 timeout 60 指定這個ip的超時時間,超時會自動被刪除了 前提是create要有timeout 0 (0表示裏面的對象可有超時可沒有)
    • ipset -exist add blacklist 6.6.6.6 timeout 100 重新爲其指定超時時間
  • ipset del blacklist 10.60.10.xx 去除名單ip
  • ipset flush 清空所有集合 ipset flush blacklist 清空blacklist集合
  • ipset destroy blacklist 刪除ipset 不能有任何下游依賴 ipset destroy 銷燬所有集合
    • 如果這個集合被鏈使用着不能刪除 需要先去掉 iptables -D INPUT 1
    • 如果這個集合非空不能刪除 需要ipset flush blacklist
    • 如果這個集合有被其他鏈使用着也不能被刪除 需要 iptables -F 鏈名 清空鏈下的內容
  • ipset save blacklist -f blacklist.txt 將ipset規則保存到文件
  • ipset save blacklist 輸出到標準輸出 ipset save 輸出所有集合到標準輸出
  • ipset restore -f blacklist.txt 導入ipset規則 這個規則其實就是一些語句,必須ipsetname不存在才能導入
  • ipset restore 根據輸入內容導入
  • ipset rename old_name new_name 改名
  • iptables -I INPUT -m set --match-set blacklist src -p tcp --dport 80 -j DROP 使用ipset集合到INPUT鏈,相當於就是批量添加
  • service ipset save save後重啓自動生效 需要yum install ipset-service 會把配置放到/etc/sysconfig/ipset.d/ 下
  • ipset 不支持0.0.0.0/0 所有ip,可以替換爲 0.0.0.0/1 128.0.0.0/1

ipset+自定義鏈

  • ipset create WhiteList hash:net maxelem 1000000 # 創建白名單集合
  • iptables -N xxxx # 創建自定義鏈xxxx
  • iptables -I xxxx -mset --match-set WhiteList src -j ACCEPT # 匹配白名單的包予以通過 -I換爲-D就是刪除這個規則
  • iptables -A xxxx -j REJECT #攔截所有未通過白名單的包 不加任何區域默認爲 0.0.0.0/0 all
  • iptables -I INPUT -ptcp --dport 3306 -j xxxx #將鏈掛到input中

總結使用規則

  • 規則的順序
    • 已經被前面規則匹配的,iptables會對報文執行相應的-j動作,後面的規則就不能再匹配了,已經執行動作了。只有沒有匹配的纔會繼續匹配下面的規則
    • 所以針對相同服務的規則,更嚴格的規則應該放在前面,這樣在前面就能擋掉大部分的連接,減少過多的匹配耗時
  • 當規則中存在多個匹配條件時,條件之間是與的關係, 比如既有-s 又有 -dport 又有-p 這些是與的關係
  • 要將更容易匹配到的規則放在最前面 跟第一條有所矛盾
    • 比如數據庫服務的白名單,最多訪問數據庫的是應用,所以應用白名單規則應該放在最前面避免影響多數連接的匹配耗時
  • 當使用iptables做網絡防火牆時,要考慮方向性,即進入的和出去的網絡
  • 在做白名單服務時,應當把鏈的默認策略設置爲ACCEPT,鏈的最後端設置爲REJECT規則實現白名單機制
    • 假如把默認設置爲DROP,後端設置爲ACCEPT時候,當後端規則被清空了,則管理員請求也會被drop

參考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章