iptables識別數(shù)據(jù)包四種狀態(tài):
NEW:當(dāng)與任何主機(jī)通信時發(fā)出的第一個數(shù)據(jù)包的狀態(tài)即NEW,一般為發(fā)起連接方發(fā)送的第一個標(biāo)志為SYN=1的數(shù)據(jù)包 注意:NEW是TCP三次握手中的第一次SYN必須等于1
ESTABLISHED:假設(shè)與主機(jī)通信時發(fā)出的第一個數(shù)據(jù)包能夠通過防火墻,那么后續(xù)的你與該主機(jī)之間發(fā)送和接收到所有數(shù)據(jù)包狀態(tài)均為ESTABLISHED (SYN不等于1,ACK=1,FIN不等于1)
RELATED:由一個已經(jīng)建立的連接所生成的新的連接的狀態(tài)即為RELATED,例如FTP服務(wù),訪問FTP服務(wù)器時建立的連接是21端口的發(fā)送命令的連接,如果要傳輸數(shù)據(jù)則需要按工作模式不同打開其他端口的連接,那么這個連接就是RELATED狀態(tài)
INVALID:非法狀態(tài)的數(shù)據(jù)包,也就是不屬于以上三種狀態(tài)的數(shù)據(jù)包,無法實別的狀態(tài)比如:SYN=1 FIN=1 又請求又發(fā)送結(jié)束,根本沒有這種狀態(tài)的包
iptables基本語法:
- iptables [-t TABLE] COMMAND CHAIN [createriaj] -j ACTION
-
- -t {raw|mangle|nat|filter},默認(rèn)filter
-
- COMMAND:
- 規(guī)則管理類:
- -A 增加
- -I # 插入
- -D # 刪除
- -R # 替換
- 鏈接管理類:
- -F 清空鏈
- -N new,新建鏈
- -X 刪除自定義空鏈
- -E rename重命名
- 默認(rèn)策略:
- —P policy
- 清空計算器
- -Z zero
- 每條規(guī)則(包括默認(rèn)策略)都有兩個計數(shù)器
- 被此規(guī)則匹配到的所有數(shù)據(jù)包的個數(shù)
- 被此規(guī)則匹配到的所有數(shù)據(jù)包的大小之和
- 查看類:
- —L, list
- -n,numeric
- -v,verbose
- -vv
- -vvv
- -x exactly 顯示精確值,不需要做換算
- --line-numbers
-
- 匹配條件:
- 基本匹配:
- -s source:ip ,NETWORK
- -d destnations
- -p {tcp|udp|icmp}
- -i inetface 流入
- -o inetface 流出
-
- 擴(kuò)展匹配:(調(diào)用iptables模塊,以便擴(kuò)展iptables匹配功能-m明確指定模塊)
- 隱含擴(kuò)展
- -p tcp 可以省略-m -tcp
- --sport PORT
- --dport PORT
- --tcp-flags
- --tcp-flags ACK,SYN,RST,FIN SYN,ACK 這時SYN=1,ACK=1,其他為0
- 要帶兩個參數(shù)要檢查的標(biāo)志位,沒有出現(xiàn)的標(biāo)志位必須為0,出現(xiàn)的為1
- --tcp-flags ACK,SYN,RST,FIN SYN 可以簡單寫成--syn
- -p udp
- --sport PORT
- --dport PORT
- -p icmp
- --icmp-type
- 8:echo-request ping回顯請求
- 0:echo-reply 響應(yīng)
- 3:ping不通的
- 還有很多子類
- 0,1等等
-
-
-
- 顯式擴(kuò)展
- -m state --state NEW
- -m multiport
- --source-port 22,53,80
- --destination-ports
- --ports
- -m iprange
- -src -range 192.168.0.2-192.168.22
- -dst -range
- -m limit
- --limit
- --limit burst
- -m string
- --algo bm|kmp
- --string "STRING"
- -m time
- --timestart 8:00 -timestop 18:00 -j DROP
- --days
- --datestart --datestop
- ACTION
- -j
- ACCEPT
- DROP
- REJECT
iptables實例操作:
- 開放ssh的22端口:
- iptables -A INPUT -s 0.0.0.0/0.0.0.0 -d 172.16.100.1/32 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
- 注意:如果你寫成172.16.100.1/16就表示這個網(wǎng)段了,不表示這個特定的ip地址了
-
- iptables -A OUTPUT -s 172.16.100.1 -d 0.0.0.0/0.0.0.0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
- 注意:這個表示別人連進(jìn)來了,我們要把數(shù)據(jù)包響應(yīng)給別人要開OUTPUT鏈,這時上面已經(jīng)建立了NEW,所以這次的通信過程是已經(jīng)建立連接狀態(tài),表示為ESTABLISHED
-
- 總結(jié):1、特定的地址掩碼是32
- 2、一般進(jìn)來允許NEW,ESTABLISHED 出去只允許ESTABLISHED
-
- 開放web服務(wù)器80端口
- iptables -A INPUT -d 192.168.184.136 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
- iptables -A OUTPUT -s 192.168.184.136 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
-
- 開放DNS的53端口,一種是基于tcp的,一種是基于udp的
- iptables -A INPUT -d 192.168.184.136 -p udp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
- iptables -A INPUT -d 192.168.184.136 -p tcp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
- iptables -A OUTPUT -s 192.168.184.136 -p udp --sport 53 -m state --state ESTABLISHED -j ACCEPT
- iptables -A OUTPUT -s 192.168.184.136 -p tcp --sport 53 -m state --state ESTABLISHED -j ACCEPT
-
- 對上面的規(guī)則進(jìn)行優(yōu)化:
- INPUT鏈:
- 優(yōu)化一
- iptables -A INPUT -d 192.168.184.136 -p tcp -m state --state NEW,ESTABLISHED -m multiport --destination-ports 22,53,80 -j ACCEPT
- iptables -A INPUT -d 192.168.184.136 -p udp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
-
- 優(yōu)化二(最好的)
- iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
- iptables -A INPUT -d 192.168.184.136 -p tcp -m state --state NEW -m multiport --destination-ports 22,53,80 -j ACCEPT
- iptables -A INPUT -d 192.168.184.136 -p udp --dport 53 -m state --state NEW -j ACCEPT
-
- OUTPUT鏈
- 優(yōu)化一
- iptables -A OUTPUT -s 192.168.184.136 -p tcp -m state --state ESTABLISHED -m multiport --source-ports 22,53,80 -j ACCEPT
- iptables -A OUTPUT -s 192.168.184.136 -p tcp --sport 53 -m state --state ESTABLISHED -j ACCEPT
-
- 優(yōu)化二(最好的)
- iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT
- 注意:仔細(xì)觀察一下這個規(guī)則這個狀態(tài)全部是ESTABLISHED,所以可以再次優(yōu)化的
-
- 開放TCP的23號端口,只允許192.168.184.1-192.168.184.200內(nèi)的主機(jī)訪問
- iptables -A INPUT -d 192.168.184.136 -m iprange --src-range 192.168.184.1-192.168.184.200 -p tcp --dport 23 -m state --state NEW -j ACCEPT
-
- 對ssh進(jìn)行限制,同一ip只允許發(fā)送兩個請求
- iptables -A INPUT -d 192.168.184.136 -p tcp --dport 22 -m state --state NEW -m connlimit ! --connlimit-above 2 -j ACCEPT
-
- 對網(wǎng)頁內(nèi)容字符串進(jìn)行屏蔽,比如屏蔽包含test字樣
- iptables -I OUTPUT 1 -m string --algo kmp --string "test" -j REJECT
-
- 開放ftp服務(wù)
- lsmod |grep ftp 查看內(nèi)核的ftp模塊
- modprobe ip_nat_ftp 裝載內(nèi)核的ftp模塊
- 開放命令連接21號端口:
- iptables -A INPUT -d 192.168.184.136 -p tcp --dport 21 -m state --state NEW -j ACCEPT
- 開放數(shù)據(jù)端口:
- iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
- iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-
- 禁ping
- iptables -A FORWARD -p icmp --icmp-type 8 -j REJECT
-
- SNAT源地址轉(zhuǎn)換
- iptables -t nat -A POSTROUTING -s 172.16.0.0/16 -j SNAT --to-source 192.168.100.2
-
- DNAT目標(biāo)地址轉(zhuǎn)換
- iptables -t nat -A PREROUTING -d 172.16.100.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.100.2
-
- 日志記錄功能
- iptables -t nat PREROUTING -d 172.16.100.1 -p tcp --dport 80 -j LOG --log-prefix "DNAT LOG"
- 注意:日志是記錄在messages
-
- 利用iptables的recent模塊來抵御DOS攻擊:
- ssh: 遠(yuǎn)程連接
- iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 3 -j DROP
- iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
- iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 300 --hitcount 3 --name SSH -j DROP
-
- 1.利用connlimit模塊將單IP的并發(fā)設(shè)置為3;會誤殺使用NAT上網(wǎng)的用戶,可以根據(jù)實際情況增大該值;
- 2.利用recent和state模塊限制單IP在300s內(nèi)只能與本機(jī)建立3個新連接。被限制一分鐘后即可恢復(fù)訪問。
- 下面對最后兩句做一個說明:
- 1.第一句是記錄訪問tcp 22端口的新連接,記錄名稱為SSH
- --set 記錄數(shù)據(jù)包的來源IP,如果IP已經(jīng)存在將更新已經(jīng)存在的條目
- 2.第三句是指SSH記錄中的IP,300s內(nèi)發(fā)起超過3次連接則拒絕此IP的連接。
- --update 是指每次建立連接都更新列表;
- --seconds必須與--rcheck或者--update同時使用
- --hitcount必須與--rcheck或者--update同時使用
億恩科技地址(ADD):鄭州市黃河路129號天一大廈608室 郵編(ZIP):450008 傳真(FAX):0371-60123888
聯(lián)系:億恩小凡
QQ:89317007
電話:0371-63322206