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