iptables簡介及常用命令


相關文件

  • iptables服務配置文件
-rw-------. 1 root root 2374 9月   4 2017 /etc/sysconfig/iptables-config
  • iptables規則文件
-rw------- 1 root root 191 10月  1 2018 /etc/sysconfig/iptables

防火牆結構




COMMAND 命令選項


-A|--append  CHAIN                                 //鏈尾添加新規則
-D|--delete  CHAIN [RULENUM]                       //刪除鏈中規則,按需序號或內容確定要刪除的規則
-I|--insert  CHAIN [RULENUM]                       //在鏈中插入一條新的規則,默認插在開頭
-R|--replace CHAIN  RULENUM                        //替換、修改一條規則,按序號或內容確定
-L|--list   [CHAIN [RULENUM]]                      //列出指定鏈或所有鏈中指定規則或所有規則
-S|--list-urles [CHAIN [RULENUM]]                  //顯示鏈中規則
-F|--flush [CHAIN]                                 //清空指定鏈或所有鏈中規則
-Z|--zero [CHAIN [RULENUM]]                        //重置指定鏈或所有鏈的計數器(匹配的數據包數和流量字節數)
-N|--new-chain CHAIN                               //新建自定義規則鏈
-X|--delete-cahin [CHAIN]                          //刪除指定表中用戶自定義的規則鏈
-E|--rename-chain OLDCHAIN NEWCHAIN                //重命名鏈,移動任何引用
-P|-policy CHAIN TARGET                            //設置鏈的默認策略,數據包未匹配任意一條規則就按此策略處理

輔助選項

-t|--table TABLE     //指定操作的表,默認的表為filter
-n|--numeric         //用數字形式顯示地址和端口,顯示主機IP地址而不是主機名
-x|--exact           //計數器顯示精確值,不做單位換算
-v|--verbose  (x3)   //查看規則列表時,顯示更詳細的信息
--line-numbers        //查看規則表時,顯示在鏈中的序號
-V|--version 
-h|--help   
[option]  --help     //查看特定選項的幫助,如iptables -p icmp --help

--fragment -f               //match second or further fragments only
--modprobe=<command>        //try to insert modules using this command
--set-counters PKTS BYTES   //set the counter during insert/append

CRETIRIA 條件匹配

基本匹配

擴展匹配->   |隱式匹配
            |顯示匹配
  • 基本匹配
-p|--proto  PROTO                      //按協議匹配,如tcp、udp、icmp,all表示所有協議。 (/etc/protocols中的協議名)
-s|--source ADDRESS[/mask]...          //按數據包的源地址匹配,可使用IP地址、網絡地址、主機名、域名
-d|--destination ADDRESS[/mask]...     //按目標地址匹配,可使用IP地址、網絡地址、主機名、域名
-i|--in-interface INPUTNAME[ +]        //按入站接口(網卡)名匹配,+用於通配。如 eth0, eth+ 。一般用在INPUT和PREROUTING鏈
-o|--out-interface OUTPUTNAME[+]       //按出站接口(網卡)名匹配,+用於通配。如 eth0, eth+ 。一般用在OUTPUT和POSTROUTING鏈
  • 隱式匹配
    -m PROTO 可以省略,所以叫隱式匹配

-m tcp   //-p tcp的擴展
    --sport  [!]N[:M]                      //源端口, 服務名、端口、端口范圍。
    --dport  [!]N[:M]                      //目標端口,服務名、端口、端口范圍
    --tcp-flags CHECKFLAGS FLAGSOFTRUE  //TCP標志位:SYN(同步),ACK(應答),RST(重置),FIN(結束),URG(緊急),PSH(強迫推送)。多個標志位逗號分隔。
                         //CHECKFLAGS為要檢查的標志位,FLAGSOFTRUE為必須為1的標志位(其余的應該為0)
    --syn                               //第一次握手。 等效於 --tcpflags syn,ack,fin,rst syn   四個標志中只有syn為1
-m udp   //-p udp的擴展
    --sport N[-M] 
    --dport N[-M]
-m icmp  //隱含條件為-p icmp
    --icmp-type  N             //8:echo-request  0:echo-reply

  • 顯示匹配

-m state
    --state    //連接狀態檢測,NEW,ESTABLISHED,RELATED,INVALID
-m multiport 
    --source-ports   PORT[,PORT]...|N:M            //多個源端口,多個端口用逗號分隔,
    --destination-ports PORT[,PORT]...|N:M         //多個目的端口
    --ports                          //多個端口,每個包的源端口和目的端口相同才會匹配
-m limit
    --limit   N/UNIT    //速率,如3/minute, 1/s, n/second , n/day
    --limit-burst N     //峰值速率,如100,表示最大不能超過100個數據包
-m connlimit
    --connlimit-above N  //多於n個,前面加!取反
-m iprange
    --src-range IP-IP
    --dst-range IP-IP
-m mac                    
    --mac-source         //mac地址限制,不能用在OUTPUT和POSTROUTING規則鏈上,因為封包要送到網卡后,才能由網卡驅動程序透過ARP 通訊協議查出目的地的MAC 地址
-m string
    --algo [bm|kmp]      //匹配算法
    --string "PATTERN"   //匹配字符模式
-m recent
    --name               //設定列表名稱,默認為DEFAULT
    --rsource            //源地址
    --rdest              //目的地址
    --set                //添加源地址的包到列表中
    --update             //每次建立連接都更新列表
    --rcheck             //檢查地址是否在列表
    --seconds            //指定時間。必須與--rcheck或--update配合使用
    --hitcount           //命中次數。必須和--rcheck或--update配合使用
    --remove             //在列表中刪除地址
-m time
    --timestart h:mm
    --timestop  hh:mm
    --days DAYS          //Mon,Tue,Wed,Thu,Fri,Sat,Sun; 逗號分隔
-m mark
    --mark N            //是否包含標記號N
-m owner 
    --uid-owner 500   //用來匹配來自本機的封包,是否為某特定使用者所產生的,可以避免服務器使用root或其它身分將敏感數據傳送出
    --gid-owner O     //用來匹配來自本機的封包,是否為某特定使用者群組所產生的
    --pid-owner 78    //用來匹配來自本機的封包,是否為某特定進程所產生的
    --sid-owner 100   //用來匹配來自本機的封包,是否為某特定連接(Session ID)的響應封包

ACTION 目標策略(TARGET)

-j|--jump TARGET     # 跳轉到目標規則,可能加載target extension
-g|--goto  CHAIN     # 跳轉到指定鏈,不再返回
ACCEPT               # 規則驗證通過,不再檢查當前鏈的后續規則,直接跳到下一個規則鏈。
DROP                 # 直接丟棄數據包,不給任何回應。中斷過濾。
REJECT               # 拒絕數據包通過,會返回響應信息。中斷過濾。
--reject-with  tcp-reset|port-unreachable|echo-reply
LOG                  # 在/var/log/messages文件中記錄日志,然后將數據包傳遞給下一條規則。詳細位置可查看/etc/syslog.conf配置文件
--log-prefix "INPUT packets"
ULOG                 # 更廣范圍的日志記錄信息
QUEUE                # 防火牆將數據包移交到用戶空間,通過一個內核模塊把包交給本地用戶程序。中斷過濾。
RETURN               # 防火牆停止執行當前鏈中的后續規則,並返回到調用鏈。主要用在自定義鏈中。
custom_chain         # 轉向自定義規則鏈
DNAT                 # 目標地址轉換,改變數據包的目標地址。外網訪問內網資源,主要用在PREROUTING。完成后跳到下一個規則鏈
--to-destination ADDRESS[-ADDRESS][:PORT[-PORT]]
SNAT                 # 源地址轉換,改變數據包的源地址。內網訪問外網資源。主機的IP地址必須是靜態的,主要用在POSTROUTING。完成后跳到下一個規則鏈。
--to-source ADDRESS[-ADDRESS][:PORT[-PORT]]
MASQUERADE           # 源地址偽裝,用於主機IP是ISP動態分配的情況,會從網卡讀取主機IP。直接跳到下一個規則鏈。
--to-ports 1024-31000
REDIRECT             # 數據包重定向,主要是端口重定向,把包分流。能會用這個功能來迫使站點上的所有Web流量都通過一個Web高速緩存,比如Squid。
--to-ports 8080
MARK                 # 打防火牆標記。繼續匹配規則。
--set-mark 2
MIRROR               # 發送包之前交換IP源和目的地址,將數據包返回。中斷過濾。

state TCP鏈接狀態

NEW           第一次握手,要起始一個連接(重設連接或將連接重導向) 
ESTABLISHED   數據包屬於某個已經建立的連接。第二次和第三次握手   (ack=1)
INVALID       數據包的連接編號(Session ID)無法辨識或編號不正確。如SYN=1 ACK=1 RST=1   
RELATED       表示該封包是屬於某個已經建立的連接,所建立的新連接。

如有些服務使用兩個相關的端口,如FTP,21和20端口一去一回,FTP數據傳輸(上傳/下載)還會使用特殊的端口,
只允許NEW和ESTABLISHED進,只允許ESTABLISHED出可以阻止反彈式木馬。

使用示例

iptables -F           //刪除iptables現有規則
iptables -L [-v[vv] -n]   //查看iptables規則
iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -o eth1 -j MASQUERADE	 //在POSTROUTING鏈尾添加一條規則
iptables -t nat -A POSTROUTING -s 20.20.20.0/24 -o eth1 -j MASQUERADE    //在POSTROUTING鏈中插入為第2條規則
iptables -t nat -R POSTROUTING 2 -s 40.40.40.40 -o eth1 -j MASQUERAD     //替換修改第二條規則
iptables -t nat -D POSTROUTING 2      //刪除POSTROUTING鏈中第2條規則
iptables -t nat -P POSTROUTING DROP    //設置默認策略為DROP



//限制ping 192.168.146.3主機的數據包數,平均2/s個,最多不能超過3個
iptables -A INPUT -i eth0 -d 192.168.146.3 -p icmp --icmp-type 8 -m limit --limit 2/second --limit-burst 3 -j ACCEPT 

//限制SSH連接速率(默認策略是DROP)
iptables -I INPUT 1 -p tcp --dport 22 -d 192.168.146.3 -m state --state ESTABLISHED -j ACCEPT  
iptables -I INPUT 2 -p tcp --dport 22 -d 192.168.146.3 -m limit --limit 2/minute --limit-burst 2 -m state --state NEW -j ACCEPT 
 
//防止syn攻擊(限制syn的請求速度)
iptables -N syn-flood 
iptables -A INPUT -p tcp --syn -j syn-flood 
iptables -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN 
iptables -A syn-flood -j DROP 

//防止syn攻擊(限制單個ip的最大syn連接數)
iptables –A INPUT –i eth0 –p tcp --syn -m connlimit --connlimit-above 15 -j DROP 
 
iptables -I INPUT -p tcp -dport 22 -m connlimit --connlimit-above 3 -j DROP   //利用recent模塊抵御DOS攻擊
iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH   //單個IP最多連接3個會話
Iptables -I INPUT -p tcp --dport 22 -m state NEW -m recent --update --seconds 300 --hitcount 3 --name SSH -j DROP  //只要是新的連接請求,就把它加入到SSH列表中。5分鍾內你的嘗試次數達到3次,就拒絕提供SSH列表中的這個IP服務。被限制5分鍾后即可恢復訪問。
 
iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 30 -j DROP    //防止單個IP訪問量過大
iptables –A OUTPUT –m state --state NEW –j DROP  //阻止反彈木馬
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/m -j ACCEPT   //防止ping攻擊
 

參考原文:https://www.cnblogs.com/hftian/p/8280841.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM