Linux的防火牆管理命令:iptables

四表五鏈:
filter
nat
mangle
raw
prerouting
input
output
forward
postrouting

------------------------------

注意:一張表中有多條鏈,一條鏈中可以有一條或多條規則。


當一個數據包到達一個鏈時,系統就會從第一條規則開始檢查,看是否符合該規則,如果滿足則該規則處理該數據包,如果不滿足,就繼續檢查下一條規則,最後該數據包不符合該鏈中的任一條規則的話,系統就會根據該鏈預先定義的策略來處理該數據包。


iptables 命令的使用:

iptables 【-t 表】 command  鏈  匹配標準 -j 處理方法

-t :
filter
nat
mangle
raw
command:
管理鏈:
-F [CHAIN] :清除指定的規則鏈,如果省略chain則可以實現刪除對應table中的所有的鏈
-P [CHAIN] :設定指定鏈的默認策略
-N :自定義一個新的空鏈
-X :刪除一個自定義的空鏈
-Z :置零指定鏈中所有規則的計數器
-E :重命名自定義的鏈
管理規則:
-A :附加一條規則,添加在鏈的尾部
-I CHINA[num] :插入一條規則,插入爲對應的chain中的第num條
-D CHAIN[num] : 刪除指定鏈中的第num條規則
-R CHAIN[num] : 替換指定鏈中的第num條規則
查看類:
-L 顯示指定表中的規則
-n : 以數字格式的形式顯示主機地址和端口號
-v : 顯示鏈及規則的詳細信息
-vv :顯示鏈及規則的更加詳細的信息
-x : 顯示計數器的精確值
--line-numbers : 顯示規則的序號  ==--line


鏈:
prerouting
input
output
forward
postrouting

匹配標準:

通用匹配:

-o INTERFACE :指定數據報文流出的接口
-i INTERFACE  :指定數據報文流入的接口
-s ;--src  :指定源地址
-d ;--dst   :指定目標地址
-p {tcp|udp|icmp} :指定協議

隱含擴展:

-p tcp
--sport PORT  源端口
--dport  PORT 目的端口
--tcp-flags  mask comp 只檢查mask指定的標誌位,是逗號分隔的標誌位列表
comp:此列表中出現的標誌位必須爲1,comp中沒出現,而mask中出現的必須爲0
eg:--tcp-flagsSYN,FIN,ACK,RST  SYN        == --syn
--syn     
-p icmp  
--icmp-type [num]
num:
0:echo-reply  響應報文
8:echo-request 請求報文
-p udp  
--sport PORT
--dport PORT

顯示擴展:

-m state --state      結合ip_constack追蹤會話的狀態  
NEW :新連接請求
ESTABLISHED :已建立的連接
INVALID :非法連接
RELATED :相關聯的,專爲ftp設定的

練習:192.168.137.11作爲服務器,只允許請求新數據,不允許tcp/22(80) 發送新的請求

首先將iptables的默認策略更改爲DROP
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
iptables -A INPUT -d 192.168.137.11 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT 
iptables -A OUTPUT -s 192.168.137.11 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT 
iptables -A INPUT -d 192.168.137.11 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT 
iptables -A OUTPUT -s 192.168.137.11 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT 
-m multiport 離線的多端口匹配
--source-port
--destination-port
--port

練習:在服務192.168.137.11上同時在一條規則上開放進來的22,80,21端口

iptables -A  INPUT  -d 192.168.137.11 -p tcp -m miltiport --destination-port 22,21,80 -j ACCEPT
-m iprange :地址範圍匹配擴展
--src-range  ip-ip
--dst-range  ip-ip

練習:在192.168.137.11服務器上允許172.16.100.3-172.168.100.100的ip所有服務進來

iptables -A INPUT -m iprange --src-range 172.16.100.3-172.168.100.100 -j ACCEPT
-m  connlimit-about n :連接數的限制,低於n個的連接纔可以訪問
-m limit 
--limit RATE(速率) :5/min
--limit-burst  n :第一次可以上傳多少
-m string 
--algo (kmp|bm)
--string ("STRING")

練習:

-j :
ACCEPT : 允許
DROP  :丟棄
REJECT  :拒絕
DNAT:目的地址轉換
SNAT:源地址轉換
LOG:記錄日誌
--log-prefix "string": 加入前綴
MARK:打標誌
RETURN:返回



---------------------------------

cat /proc/net/ip_conntrack  ip報文追蹤信息
iptstate: iptable的狀態信息
-t 顯示所有的連接個數
狀態信息意義:         
NEW :新連接請求
ESTABLISHED :已建立的連接
INVALID :非法連接
RELATED :相關聯的,專爲ftp設定的。


在繁忙的服務器上建議不要使用這個模塊:

裝載ip_conntrack模塊:
service iptables stop
modprobe ip_conntrack    轉載內核模塊,可以單獨工作
cat /proc/net/ip_conntrack
cat /proc/net/ipv4/ip_conntrack_mak   最大條目,有必要時要調大這個最大值,但在非常繁忙的服務器上,不建議啓動這個模塊

卸載ip_conntrack模塊:

modprobe -r ip_conntrack
注意:
iptables -t nat -L 使用這個命令時,會自動啓動ip_conntrack,所以在工作中當其處於關閉時,慎用



-----------------------------------------

命令行中的規則條目是需要保存:

第一種:service iptables save  --->默認存放位置:/etc/sysconfig/iptables 
開機後會自動加載到iptables規則中。
第二種:iptables-save > /etc/sysconfig/iptables-20150326
iptables-restore < /etc/sysconfig/iptables-20150326
開機後不會自動加載iptables規則中,需要手動加載,一般用於備份恢復。


------------------------------------------------------------

練習:

將192.168.137.10的iptables的默認路由策略更改爲DROP

iptables -t filter -P INPUT -j DROP
iptables -t filter -P OUTPUT -j DROP
iptables -t filter -P FORWARD -j DROP
iptables -L -n

測試 ssh ping http等服務是否工作

ssh 192.168.137.10:22 
ping 192.168.137.11
http://192.168.137.11:80

打開ssh:22連接服務:

iptables -t filter -A INPUT -s 192.168.137.0/24 -d 192.168.137.10 -p tcp --dport 22 -j ACCEPT
iptables -t filter -A OUTPUT -s 192.168.137.10 -d 192.168.137.0/24 -p tcp --sport 22 -j ACCEPT

測試ssh服務:

ssh  192.168.137.10:22


打開http服務:

iptables -t filter -A INPUT  -d 192.168.137.10 -p tcp --dport 80 -j ACCEPT 
iptables -t filter -A OUTPUT -s 192.168.137.10  -p tcp --sport 80 -j ACCEPT 
測試http服務:
http://192.168.137.10:80

打開ping功能:

你可以ping通別人,別人無法ping通你:

本機ping其他主機,出去時向其他主機請求報文8,別的主機返回來的是響應報文0
iptables -t filter -A OUTPUT -s 192.168.137.10 -p icmp-type 8 -j ACCEPT
iptables -t filter -A INPUT -d 192.168.137.10 -p icmp-type 0 -j ACCEPT
測試ping功能:
ping 192.168.137.10
ping 192.168.137.11


別人可以ping通你:

別的主機要ping通你,發送一個請求報文到本機,所以進入本機的是請求報文8,本機再響應報文給請求的主機,所以出去的是響應報文0.
iptables -t filter -A INPUT -d 192.168.137.10 -p icmp --icmp-type 8 -j ACCPET 
iptables -t filter -A OUTPUT -s 192.168.137.10 -p icmp --icmp-type 0 -j ACCEPT


練習:

192.168.137.11作爲服務器,只允許請求新數據,不允許tcp/22(80) 發送新的請求
首先將iptables的默認策略更改爲DROP
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
iptables -A INPUT -d 192.168.137.11 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT 
iptables -A OUTPUT -s 192.168.137.11 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT 
iptables -A INPUT -d 192.168.137.11 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT 
iptables -A OUTPUT -s 192.168.137.11 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章