iptables常用命令及應用
阿新 • • 發佈:2019-02-03
二、命令各選項及解釋
COMMAND:
規則管理類
-A,(append的意思)
-I # (I表示insert的意思,#表示數字,以下相同)
-D # (delete的意思)
-R # (replace的意思)
鏈管理類:
-F (flush)(清空鏈)
-N (new)(新建鏈)
-X (delete)(刪除自定義的空鏈)
-E (rename)(對鏈重新命名)
預設策略:
-P policy
清空計數器:
-Z,zero
每條規則(包括預設策略)都有兩個計數器:
被此規則匹配到的所有資料包的個數;
被此規則匹配到的所有資料包的大小之和;
檢視類:
-L(list)
-n,numeric(以純數字的方式來顯示,不做解析)
-v,verbose(詳細資訊)
-vv -vvv
-x,exactly(顯示精確值,不做單位換算)
--line-numbers
匹配條件(creterial規則)
基本匹配:
-s (SOURCE:可以是IP,!NETWORK)
-d (目標地址)
-p{tcp|udp|icmp}
-i INTERFACE(資料包的流入介面)
-o OUTERFACE(資料包的流出介面)
擴充套件匹配:(呼叫iptables的模組,以便擴充套件iptables匹配功能)
隱含擴充套件
-p tcp
--sport PORT
--dport PORT
可以指定連續的埠;例如:--sport 22:80(表示從22到80的埠,一般不用)
--tcp-flags(ACK,SYN,RST,FIN | SYN,ACK只檢查前四個標誌位,後組出現的為1)= --syn
例如:--tcp-flags ACK,SYN,RST,FIN SYN,ACK,RST,FIN (不可能,丟棄)
-p UDP
--sport PORT
--dport PORT
-p icmp
--icmp-type
8:echo-request(ping請求)
0:echo-reply(ping迴應)
3:(表示ping不通)
顯式擴充套件
-m(指定呼叫的模組)
state --state {NEW|ESTABLISHD|INVALIDE|RELATED}(指定iptables的狀態),
iptables各state解釋如下:
NEW(相當於tcp三次握手的第一次請求,是syn=1的包)
ESTABLISHED
INVALID
RELATED(主要用於做ftp命令跟蹤的)
例如:對ssh連線的控制:
(1)對客戶端的請求進行限制:
iptables -A INPUT -d 172.16.100.1 -p tcp -dport 22 -m state --state NEW,ESTABLISHE -j ACCEPT
同理,限制web服務只需將埠號改為80即可。
(2)對伺服器的迴應進行限制:
#iptables -A OUTPUT -s 172.16.100.1 -p tcp -sport 22 -m state --state ESTABLISHD -j ACCEKPT
(3)修改iptables的預設策略:
iptables -P INPUT DROP
iptables -P OUTPUT DROP
(4)讓自己可以ping通自己:
#iptables -I INPUT 1 -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
#iptablses -I OUTPUT 1 -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
multiport(指定埠)
--source-ports 22,53,80
!--destination-ports
--ports
例如:可以將以下兩個相同特徵的規則合併為一個規則:
ACCEPT tcp -- 0.0.0.0/0 172.16.58.1 tcp dpt:22 state NEW,ESTABLISHED
ACCEPT tcp -- 0.0.0.0/0 172.16.58.1 tcp dpt:80 state NEW,ESTABLISHED
#iptables -I INPUT 2 -d 172.16.58.1 -p tcp -m state --state NEW,ESTABLISHED -m
multiport --destination-port 22,80 -j ACCEPT
#iptables -D INPUT #(刪除合併過的行)
#iptables -I OUTPUT 1 -m state --state ESTABLISHED -j ACCEPT(這條命令表示不管是什麼協議,什麼埠,只要狀態是ESTABLISHED都允許)
iprange
--src-range 172.16.100.190-172.16.100.210
--dst-range
例如:允許地址為172.16.100.190-172.16.100.210網段的地址訪問web服務:
#iptables -A INPUT -p tcp --dport 80 -m iprange --src-range 172.16.100.190-172.16.100.210 -m state --state NEW -j ACCEPT
connlimit(表示限定每個主機的tcp連線數)
--connlimit-above
例如:同一臺主機只允許建立兩次ssh連線:
#iptables -A INPUT -d 172.16.58.1 -p tcp --dport 22 -m state --state NEW -m connlimit ! --connlimit-above 2 -j ACCEPT (表示一臺主機最多隻允許兩次新連線)
limit (限定速率)
--limit 1/second(限定多長時間能可以請求幾次)
--limit-burst(限定併發請求的總個數)
例如:
#iptables -A INPUT -d 172.16.58.1 -p tcp --deport 80 -m state --state NEW -m limit --limit 1/minite --limit-burst 3 -j ACCEPT
為了使顯示效果明顯,可以將keepalive關掉。步驟如下(原始碼安裝):
可以修改 /etc/httpd/extra/httpd-default.conf檔案中的:KeepAlive On改為KeepAlive Off
string
--algo bm|kmp (指定演算法)
--string "STRING"(功能是拒絕網頁中含有指定字串的網頁顯示)
例如:拒絕網頁中含有“***功”字樣的網頁顯示:
#iptables -A OUTPUT -s 172.16.58.1 -m string --algo kmp --string "***功" -j REJECT
(注意一定要在鏈OUTPUT中拒絕才生效)
time
--timestart
--timestop -j
-days
例如:限定只能在12點到下午2:30之間請求主機172.16.100.1的web服務:
#iptables -A INPUT -d 172.16.100.1 -p tcp 80 -m state --state NEW,ESTABLISTHED -m time --timestart 12:00 --timestop 14:00 -j ACCEPT
COMMAND:
規則管理類
-A,(append的意思)
-I # (I表示insert的意思,#表示數字,以下相同)
-D # (delete的意思)
-R # (replace的意思)
鏈管理類:
-F (flush)(清空鏈)
-N (new)(新建鏈)
-X (delete)(刪除自定義的空鏈)
-E (rename)(對鏈重新命名)
預設策略:
-P policy
清空計數器:
-Z,zero
每條規則(包括預設策略)都有兩個計數器:
被此規則匹配到的所有資料包的個數;
被此規則匹配到的所有資料包的大小之和;
檢視類:
-L(list)
-n,numeric(以純數字的方式來顯示,不做解析)
-v,verbose(詳細資訊)
-vv -vvv
-x,exactly(顯示精確值,不做單位換算)
--line-numbers
匹配條件(creterial規則)
基本匹配:
-s (SOURCE:可以是IP,!NETWORK)
-d (目標地址)
-p{tcp|udp|icmp}
-i INTERFACE(資料包的流入介面)
-o OUTERFACE(資料包的流出介面)
擴充套件匹配:(呼叫iptables的模組,以便擴充套件iptables匹配功能)
隱含擴充套件
-p tcp
--sport PORT
--dport PORT
可以指定連續的埠;例如:--sport 22:80(表示從22到80的埠,一般不用)
--tcp-flags(ACK,SYN,RST,FIN | SYN,ACK只檢查前四個標誌位,後組出現的為1)= --syn
例如:--tcp-flags ACK,SYN,RST,FIN SYN,ACK,RST,FIN (不可能,丟棄)
-p UDP
--sport PORT
--dport PORT
-p icmp
--icmp-type
8:echo-request(ping請求)
0:echo-reply(ping迴應)
3:(表示ping不通)
顯式擴充套件
-m(指定呼叫的模組)
state --state {NEW|ESTABLISHD|INVALIDE|RELATED}(指定iptables的狀態),
iptables各state解釋如下:
NEW(相當於tcp三次握手的第一次請求,是syn=1的包)
ESTABLISHED
INVALID
RELATED(主要用於做ftp命令跟蹤的)
例如:對ssh連線的控制:
(1)對客戶端的請求進行限制:
iptables -A INPUT -d 172.16.100.1 -p tcp -dport 22 -m state --state NEW,ESTABLISHE -j ACCEPT
同理,限制web服務只需將埠號改為80即可。
(2)對伺服器的迴應進行限制:
#iptables -A OUTPUT -s 172.16.100.1 -p tcp -sport 22 -m state --state ESTABLISHD -j ACCEKPT
(3)修改iptables的預設策略:
iptables -P INPUT DROP
iptables -P OUTPUT DROP
(4)讓自己可以ping通自己:
#iptables -I INPUT 1 -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
#iptablses -I OUTPUT 1 -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
multiport(指定埠)
--source-ports 22,53,80
!--destination-ports
--ports
例如:可以將以下兩個相同特徵的規則合併為一個規則:
ACCEPT tcp -- 0.0.0.0/0 172.16.58.1 tcp dpt:22 state NEW,ESTABLISHED
ACCEPT tcp -- 0.0.0.0/0 172.16.58.1 tcp dpt:80 state NEW,ESTABLISHED
#iptables -I INPUT 2 -d 172.16.58.1 -p tcp -m state --state NEW,ESTABLISHED -m
multiport --destination-port 22,80 -j ACCEPT
#iptables -D INPUT #(刪除合併過的行)
#iptables -I OUTPUT 1 -m state --state ESTABLISHED -j ACCEPT(這條命令表示不管是什麼協議,什麼埠,只要狀態是ESTABLISHED都允許)
iprange
--src-range 172.16.100.190-172.16.100.210
--dst-range
例如:允許地址為172.16.100.190-172.16.100.210網段的地址訪問web服務:
#iptables -A INPUT -p tcp --dport 80 -m iprange --src-range 172.16.100.190-172.16.100.210 -m state --state NEW -j ACCEPT
connlimit(表示限定每個主機的tcp連線數)
--connlimit-above
例如:同一臺主機只允許建立兩次ssh連線:
#iptables -A INPUT -d 172.16.58.1 -p tcp --dport 22 -m state --state NEW -m connlimit ! --connlimit-above 2 -j ACCEPT (表示一臺主機最多隻允許兩次新連線)
limit (限定速率)
--limit 1/second(限定多長時間能可以請求幾次)
--limit-burst(限定併發請求的總個數)
例如:
#iptables -A INPUT -d 172.16.58.1 -p tcp --deport 80 -m state --state NEW -m limit --limit 1/minite --limit-burst 3 -j ACCEPT
為了使顯示效果明顯,可以將keepalive關掉。步驟如下(原始碼安裝):
可以修改 /etc/httpd/extra/httpd-default.conf檔案中的:KeepAlive On改為KeepAlive Off
string
--algo bm|kmp (指定演算法)
--string "STRING"(功能是拒絕網頁中含有指定字串的網頁顯示)
例如:拒絕網頁中含有“***功”字樣的網頁顯示:
#iptables -A OUTPUT -s 172.16.58.1 -m string --algo kmp --string "***功" -j REJECT
(注意一定要在鏈OUTPUT中拒絕才生效)
time
--timestart
--timestop -j
-days
例如:限定只能在12點到下午2:30之間請求主機172.16.100.1的web服務:
#iptables -A INPUT -d 172.16.100.1 -p tcp 80 -m state --state NEW,ESTABLISTHED -m time --timestart 12:00 --timestop 14:00 -j ACCEPT