iptables

1、簡介

netfilter/iptables(簡稱 iptables)組成 Linux 平臺下的包過濾防火牆網絡

iptables 組件是一種工具,也稱爲用戶空間,它使插入、修改和除去信息包過濾表中的規則變得容易ssh

netfilter 組件也稱爲內核空間,是內核的一部分,由一些信息包過濾表組成,這些表包含內核用來控制信息包過濾處理的規則集tcp

安裝 iptables工具

yum -y install iptables iptables-services

重啓:systemctl restart iptables
保存:service iptables saverest

2、經常使用參數

iptables + -t 表名 + 規則/鏈管理參數 + 匹配參數 + 動做類型參數日誌

#  選擇表
-t	#  對指定表進行操做(必須是 raw、nat、filter、mangle 中的一個。如沒有指定則默認爲 filter表)

#  規則管理
-A	#  在指定規則鏈的末尾加入新規則
-I	#  在指定規則鏈的頭部加入新規則(默認在第一行添加)
-D	#  刪除指定鏈中的一條規則(可按規則序號和內容刪除)
-R	#  修改、替換指定鏈中的某一條規則(可按照規則序號和內容替換)

#  鏈管理
-P	#  設置指定鏈默認策略 
-N	#  新建一條用戶本身定義的規則鏈
-X	#  刪除指定表中用戶自定義的規則鏈
-E	#  重命名用戶定義的鏈(不改變鏈自己)
-Z	#  將全部表的全部鏈的字節和數據包計數器清零

#  規則鏈
INPUT		#  處理入站的數據包
OUTPUT		#  處理出站的數據包
FORWARD         #  處理轉發的數據包
PREROUTING	#  處理入站的路由規則
POSTROUTING	#  處理出站的路由規則

#  匹配(加感嘆號 「!「表示這個目標除外(加感嘆號後需加空格後在加匹配項))
-s	#  匹配來源地址 IP/MASK
-d	#  匹配目標地址
-i	#  網卡名稱(匹配從這塊網卡流入的數據)
-o	#  網卡名稱(匹配從這塊網卡流出的數據)
-m	#  使用擴展模塊
-p	#  匹配協議(如:tcp、udp、icmp)
	tcp     #  擴展選項:--source-port (擴展選項可用 iptables -p tcp -h 查看)
	udp     #  擴展選項:--source-port (擴展選項可用 iptables -p icmp -h 查看)
	icmp    #  可用擴展:  --icmp-type  (可用擴展可用 iptables -p icmp -h 查看)
	--dport 80	#  匹配目標端口 80
	--sport 81	#  匹配來源端口 81

#  指定動做類型
-j  #  指定動做類型
    動做類型:
    ACCEPT	#  容許數據包經過
    REJECT	#  拒絕數據包經過(必要時會發送響應信息)
    DROP	#  直接丟棄(不給出任何迴應)
    QUEUE	#  中斷過濾程序,將封包放入隊列,交由其它程序處理
    RETURN	#  中止當前鏈中的後續規則,並返回到調用鏈(the calling chain)中
    REDIRECT	#  在本機上作端口映射
    DNAT	#  改變數據包的目的地址
    SNAT	#  改變數據包的源地址
    MASQUERADE	#  SNAT 的一種特殊形式,適用於動態、臨時會變的 IP 上(只能用戶 nat 表的 POSTROUTING 鏈)
    LOG		#  在 /var/log/messages 文件中記錄日誌信息,而後在將數據包傳遞給下一條規則

#  查看/清空 規則
-L	#  列出指定鏈中全部的規則
-n	#  IP地址和端口會一數字的形式打印
-v	#  詳細輸出
-F	#  清空規則鏈

3、擴展模塊

使用方法:iptables + -m + 擴展模塊名
可用擴展選項可用:iptables + -m + 擴展名 + -h 查看code

limit(速率限制)
#  每分鐘容許經過 5 個 icmp 包(默認爲 3/小時,秒:/sec  分鐘:/minute   小時:/hour  天:/day)
iptables -A INPUT -p icmp -m limit --limit 5/minute -j ACCEPT
#  每分鐘容許經過 5 個 icmp 包,最多不超過 10 個
iptables -A INPUT -p icmp -m limit --limit 5/minute --limit-burst 10 -j ACCEPT
multiport( 多端口匹配)
#  匹配 22,端口(最多可指定15個端口)
iptables -A INPUT -p tcp -m multiport --dport 22,80 -j ACCEPT
iprange(匹配指定範圍內的地址)
#  匹配指定範圍內的地址
iptables -A INPUT -p tcp -m iprange --src-range 192.168.1.0-192.168.1.111 --dport 22 -j ACCEPT
string(字符串匹配)
#  當服務端返回數據報文檢查到有關鍵字 「test" 時,則丟棄該報文(可以檢測到報文應用層中的字符串  注:該條規則需添加到 OUTPUT 鏈)
iptables -A OUTPUT -p tcp --dport 80 -m string --algo kmp --string "test" -j DROP
connlimit(鏈接數限制)
#  限制同一 IP 最多同時 10 個 http 鏈接
iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 10 -j REJECT
#  限制每組 C 類 IP 最多同時 10 個 http 鏈接
iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 10 --connlimit-mask 24 -j DROP
#  限制指定網段的 IP 最多同時 10 個 http 鏈接
iptables -A INPUT -s 192.168.1.0/24 -p tcp --syn --dport 80 -m connlimit --connlimit-above 10 -j REJECT
recent(時間限制)
--name	        #  設置列表名稱
--resource	#  源地址
--redest	#  目的地址
--seconds	#  指定時間內(單位:秒)
--hitcount	#  匹配次數
--set		#  將地址添加進列表,並更新信息(包含地址加入的時間戳)
--rcheck	#  匹配列表中的源地址(以第一個匹配計算時間)
--update	#  相似 rcheck(以最後一個匹配計算時間)
--remove	#  在列表裏刪除相應地址(後面接列表名稱及地址)

#  將訪問的主機記錄到 test 列表,並放行
iptables -A INPUT -p tcp --dport 80 --syn -m recent --name test --set -j ACCEPT
#  如訪問的主機在 test 列表有記錄則限制 80 端口 60 秒 內每一個 IP 只能發起 20 個新的鏈接,超過則記錄日誌(日誌前綴爲 DDOS:)
iptables -A INPUT -p tcp --dport 80 --syn -m recent --name test --rcheck --seconds 60 --hitcount 20 -j LOG --log-prefix 'DDOS:' --log-ip-options
#  如訪問的主機在 test 列表有記錄則限制 80 端口 60 秒 內每一個 IP 只能發起 20 個新的鏈接,超過則丟包
iptables -A INPUT -p tcp --dport 80 --syn -m recent --name test --rcheck --seconds 60 --hitcount 20 -j DROP
state(狀態檢查)
NEW:新創建一個會話
ESTABLISHED:已創建的鏈接
RELATED:有關聯關係的鏈接
INVALID:沒法識別的鏈接

#  放行 ssh 的首次鏈接狀態
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT
#  放行有關聯的鏈接跟已創建的鏈接
iptables -A INPUT -m state --state  RELATED,ESTABLISHED -j ACCEPT

4、規則表和規則鏈

規則表(tables)

規則表提供特定的功能(內置了4個表),相似用戶組,每一個組都有不一樣的功能,而且都有對應的用戶(規則鏈)blog

filter	#  負責過濾功能(內核模塊:iptables_filter)
nat     #  負責網絡地址轉換功能(內核模塊:iptable_nat)
mangle	#  拆解、修改、封裝報文(內核模塊;iptable_mangle)
raw     #  決定數據包是否被狀態跟蹤機制處理內核(內核模塊:iptable_raw)

規則表優先順序(從左往右):raw <--- mangle <--- nat <--- filter隊列

規則表對應的規則鏈:ip

raw 表:PREOUTING、OUTPUT
mangle 表:PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING
nat 表:PREROUTING、INPUT、OUTPUT、POSTROUTING
filter 表:INTPUT、FORWARD、OUTPUT

規則鏈(chains)

規則鏈是規則的集合。對特定的數據包設置相應的規則(讀取規則鏈時是按照從上往下的順序)

INPUT		#  處理入站的數據包
OUTPUT		#  處理出站的數據包
FORWARD         #  處理轉發的數據包
PREROUTING	#  數據包進入路由表前
POSTROUTING	#  數據包進入路由表後

入站順序(從左往右):PREROUTING <--- INPUT
出站順序(從左往右):OUTPUT <--- POSTROUTING
轉發順序(從左往右):PREROUTING <--- FORWARD <--- POSTROUTING

5、實例

查看/刪除規則
iptables -L             #  列出全部規則
iptables -L -nv		#  查看詳細信息(IP 跟 端口會以數字形式顯示)
iptables -t nat -L      #  列出 nat 表中的全部規則
iptables -t nat -L -nv  #  查看詳細信息(IP 跟 端口會以數字形式顯示)
iptables -F             #  清除全部規則(如不指定表,則默認表爲 filter)
iptables -t nat -D INPUT 1  #  刪除 nat 表 INPUT 鏈下的第一條規則
在指定表中新建規則(如不指定,則默認爲 filter 表)
#  在 nat 表中開放 80 端口
iptables -t nat -A INPUT -p tcp --dport 80 -j ACCEPT
設置白名單
#  容許 192.168.1.0/24 網段的主機訪問
iptables -A INPUT -p all -s 192.168.1.0/24 -j ACCEPT

#  容許 192.168.2.0/24 網段的主機訪問本機的 80 端口
iptables -A INPUT -p all -s 192.168.2.0/24 --dport 80 -j ACCEPT
指定範圍
#  指定 IP 範圍
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
#  指定端口範圍
iptables -t nat -A INPUT -p tcp --dport 90:100 -j ACCEPT
端口映射
#  當別的主機訪問本地 80 端口時會被重定向到 8080 端口
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
禁止
#  禁 Ping
iptables -A INPUT -p icmp -j DROP
#  禁 Ping
iptables -I INPUT -p icmp --icmp-type Echo-Request -j DROP
#  禁止 MAC 地址爲 00:11:22:33:44:55 的主機訪問
iptables -A INPUT -m mac --mac-source 00:11:22:33:44:55 -j DROP
#  禁止轉發 MAC 地址爲 00:11:22:33:44:55 的主機的數據
iptables -A FORWARD -m mac --mac-source 00:11:22:33:44:55 -j DROP
相關文章
相關標籤/搜索