怎麼寫規則
iptables
iptables [-t table] COMMND chain CRETIRIA -j ACTION
-t 不定表的話,預設filter
COMMADN 怎麼對鏈進行管理 增加 刪除 等
chain:指定鏈操作
CRETIRIA:匹配規則 (源地址是什麼,目標地址是什麼)
-j ACTION: 說明匹配到的結果處理
iptables -t filter -s 172.16.0.0/16 -p udp --dport 53 -j DROP
到本機內部來的訪問53號連接埠的都不允許
REJETCT比DROP更徹底,直接拒絕
iptables -L -n 顯示iptables定義的規則鏈
iptables -t nat -L -n
iptables -L -n -v 可以查看計數器
COMMAND:命令的類
鏈管理命令
-P #polocy 表示通策略,設定預設策略(門是是開的還是關的)
iptables -P INPUT (DROP|ACCEPT) #如果本身是開啟的,而改為關
閉的,操作要小心(比如你的機房在美國,而你把SSH給拒絕了)
-F #FLUSAH 清空規則鏈
iptables -t nat -F PREROUTING
清空所有nat的進路由表規則鏈
-N #new 建立使用者自訂鏈
iptables -n inbound_tcp_web
-X #刪除使用者定義的空鏈,如果有規則刪除不了,所以刪除一個鏈之前需要把裡
面的規則清空了
-E #用於重新命名使用者自訂的鏈
iptables -E oldname newname
-Z #清空鏈,及鏈中規則的計數器
iptables -L -n -v
pkts bytes #兩個計數器 ##看視頻
iptables -Z 清空這些計數器
規則管理命令
-A #atend 追加,規則的次序很關鍵,-A來追加是放在最後
-I #insert 插入,插入到num條不能超過總條數!!
iptables -I num
-R #replace 替換,替換或者修改某條規則
iptables -R -s 172.16.0.0/16 -p udp --dport 53
iptables -R
-D #delete 刪除
iptables -D INPUT num
查看命令
-L #list 它有子選項,組合使用,如果不帶自選項,很慢,需要解析地址
-n 數字方式
-v verbos 詳細資料 -v -vv -vvv
iptables -L -n -vvv
-x exsicly 精確的值,沒有經過單位換算的
-line-number 顯示行號
iptables -L -n --line-number
####這些都是常用的,必須牢牢記住這些命令
對於TCP協議一共四種狀態:
NEW 新發起的串連
ESTABLISHED 已經建立的串連
RELATED 相關聯的串連
INVALID 無法識別的串連
--------------------------------------------------------------
匹配標準:
1.通用匹配:大家都可以用
-s #做源地址匹配,可以取反,加上歎號! 也可有--source
IP,NETWOER/NEMASK,0.0.0.0/0.0.0.0(匹配所有)
-d #匹配目標地址 或--destnation
-p #protocal 用於匹配協議
-p [tcp|udp|icmp] 一般只定義這三個協議
-i #inbound 流入介面,後面跟網卡
-i eth0
-o # outbond 流出介面
流入一般用在PRE Input FORW
流出一般同在POST OUTPURT FORW
2.擴充匹配:對於某種功能的擴充
隱含擴充
-p tcp
--dport 目標連接埠 0-65535
可以使用21:23表示連續,(但是不能使用非連續的連接埠)
--sport 源連接埠 0-65525
--tcp-flags SYN,ACK,FIN,PSH,RST,URG
檢查的標誌位 必須為1標誌位 ,syn為1,其他為0
--tcp-flags syn,ack,fin,rst,syn
三向交握的第一次的資料包,這種匹配方式有一個簡寫--syn
-p udp
--dport #目標連接埠
--sport
-p icmp
--icmp-types
ping的報文類型
echo-request 8 #匹配PING出去的資料包,類型用8表示請求回顯
echo-reply 0 #別人響應資料包,類型用0表示
顯式擴充
-P tcp -m mutiport --dports
#-m mutiport啟動多連接埠擴充,這樣可以根很多連接埠 (這樣就可以使
用多連接埠了,用,隔開)
-p tcp -m mutiport --dports 21,23,80
#-m 啟動模組
-j # 指定action 匹配後對應的處理動作
DROP 悄悄丟棄資料包,不返回拒絕資訊
REJIECT 明確丟棄資料包,返回拒絕資訊,在網路上一般使用DROP
ACCEPT 接受
custom_chain 使用自訂的鏈
DNAT 目標地址轉換
SNAT 源地址轉換
MASQUERADE 源地址偽裝
REDIRECT 重新導向,主要實現連接埠重新導向
MARK 在mangel表利用的,打標記
RETUREN 返回,調用使用者鏈後按鏈處理,處理接受後,返回到下一個內
置鏈
其實有數十個動作,這裡只是常用的
狀態檢測:
對於TCP協議一共四種狀態:
NEW 新發起的串連
ESTABLISHED 已經建立的串連
RELATED 相關聯的串連
INVALID 無法識別的串連
----------------------------------------
假設一台主機只允許172.16.0.0訪問ssh
到本機內部訪問的最好定義在INPUT
從本機內部出去的最好定義在OUTPUT
iptables -t filter -A INPUT -s 172.16.0.0/16 172.16.100.1 -p tcp --dport 22 -j ACCEPT
iptables -L -n -v
iptables -t filter -A OUTPUT -s 172.16.100.1 -d 172.16.0.0/16 -p tcp
在互連網上比較通用的是通策略,預設關閉
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
將來應用時,一定要保證遠程連結是開起的
------------------------------------------------------------
模組開啟
-m state --state
通過下面幾個子命令來實現模組的控制管理:
connlimit
幫你限定某一個特定的客戶,可以發起的並發請求
對於伺服器而言,比如WEB,有一個下載站,如果一個使用者使用P2P或者多線程同時發起數十個串連,勢必造成佔用過多資源,conlimit可以限定這些連結數
[!] --connlimit-above n
iptables -p tcp -syn -dport 23 -m connlimit --connlimit-above 2 -j REJECT
iprange 對源位址區段進行限定
iptables -A FORWARD -m iprange --src-range 172.16.100.1-172.16.100.100 -dst-range 172.16.0.1-172.16.0.2 -p tcp --dport 80
limit 匹配一個限定的速率,令牌通機制,它不是用來限定頻寬的,只是做速率匹配的
它可以通過burst 和 rete來限定某些特定應用的速率
#看視頻
令牌通機制,收集空閑令牌
--limit rate 3/minutes 沒分鐘匹配3個資料包
--limit-burst number
tc 一個小工具,使用簡單,可以實現流量控制
mac 匹配源mac地址,在互連網上匹配目標mac是沒有意義的
--mac-source [!] adress
multiport 開啟多連接埠機制,最多一次指15個
--soure-ports
--destination-ports
--ports
例子:
iptables -A FORWARD -p tcp -m multiport --destination-ports 22,25,80,110 -m iprange --src-range 172.16.0.1-172.14.100.254 -m state --state NEW,ESTABLISHED -j ACCEPT
stirng 根據某個字串來限定
# string 匹配漢字能力有限,但是匹配英文字母,拼音很好用
--algo bm|kmp 使用哪種演算法來匹配,必須選一個
bm由Boyer-Moore開發 kmp由Knuth-Pratt-Morris
例子:只要有qq.com就不能訪問
iptables -A FORWARD -m string --string "qq.com" --algo bm -j REJECT
time 指定起始時間和結束時間來限定 例如周一到周五可以上網
--timestart value HH:MM
--timestop value
--days listofdays
--datestart date
--datestop date
-m time --timestart
LOG 使用log可以記錄日誌,limit主要和log一起用
--log-level level
--log-prefix prefix
給日誌加一個首碼,這樣可以在messages裡更方便的查看特定的日誌,例如給22
iptables -A INPUT -d 172.16.100.1 -p tcp --dport 22 -m limit --limit 6/minute -j LOG --log-prefix "Iptables SSHD"
#一般我們使用limit來限定日誌速率,這樣可以減輕磁碟的壓力
REJECT 拒絕理由
--reject-with type
The type given can be
icmp-net-unreachable
icmp-host-unreachable
icmp-port-unreachable
icmp-proto-unreachable
icmp-net-prohibited
icmp-host-prohibited ro
icmp-amin-prohibited (*)