iptables:防火牆
firewall:TCP/IP協議棧; linux(內核)
主機防火牆
網絡防火牆
工作於主機或網絡邊緣,對於進出的報文根據定義的規則做檢查,進而對被規則匹配到的報文作爲做響應處理的套件。
IPS,intrusion protect system***防禦系統
IDS:intrusion detect system***檢測系統
防火牆:
網絡層防火牆
應用層防火牆
防火牆的分類:
簡單包過濾防火牆
帶狀態檢測的包過濾防火牆
Iptables內置鏈:
prerouting:路由前
input:到達本機內部的報文必經之路
forward:由本機轉發的報文必經之路
output:由本機發出的報文必經之路
postrouting:路由後
iptables表
filter:過濾,定義是否允許通過防火牆
nat:地址轉換,啓用connection_track; 目標端口,源端口
mangle:報文拆封,包裝,轉發
raw:目標是關閉nat表上啓用的連接追蹤功能 。
Iptables內置鏈和表對應關係
①PREROUTING ②INPUT ③FORWARD ④OUTPUT ⑤POSTROUTING
Fliter:②③④
nat:①④⑤ 在①做目標地址轉換 在⑤做源地址轉換
mangle:①-⑤
raw:①④
數據報文流程:
跟本機內部進程通信;
進入:-->prerouting-->input
出去:-->output-->postrouting
由本機轉發:
請求:-->PREROUTING,-->FORWARD-->POSTROUTING
響應:-->PREROUTING,-->FORWARD-->POSTROUTING
規則中如果限定原地址、目標地址、源端口、目標端口等與流向相關的設定
寫規則
數據報文的流向:
源IP和目標IP由流向決定;
注意:iptables:用戶空間的工具,寫規則,並自動發往netfilter,立即生效;
netfilter:接收並生效規則。
如何保存啓用的規則於規則文件中:
1、#iptables-save > /etc/sysconfig/iptables
2、#service iptables Sava
生效規則文件中的規則:
1、#iptables-restore < /etc/sysconfig/iptables
2、#service iptables restart
執行的操作:清空現有規則,讀取並生效規則文件中的規則。
iptables基本語法:
iptables[-t table] command chain crtiria -j target
指明那張表 命令選項 做什麼處理 匹配條件 跳轉目標
-t TABLE:
nat, mangle, raw, filter
默認爲filter
command
鏈:
-F:flush清除 清空規則鏈 如果不指定表 表明全部清空
-N:new,自建一條鏈
-X:delete刪除一條自定義的空鏈
-Z:zero計數器歸零 被本規則所匹配包數 和字節大小之和
-P:policy設定默認策略,對filter表來講,默認規則爲accept或drop;
-E:rename重命名自定義鏈
鏈中的規則
-A,append增加
-I:insert插入一條新規則
-D:delete刪除
-R:replace替換規則
查詢:
-L:列表
-n:numeric以數字格式顯示主機地址和端口
-v:詳細格式;-vv
--line-numbers:顯示規則編號
-x:不要對計數器的計數結果做單位換算,而顯示其精確值。
pkts bytes target prot opt in out source destination
包數 字節數 目標 協議 選項 流入的接口 流出的接口 源地址 目標地址
iptables [-t table] -A 鏈名 匹配條件 -j 處理目標
匹配條件
通用匹配
-s 地址:匹配包的源地址,指定報文源ip地址匹配的範圍;可以是ip,也可以是 網絡地址;可使用!取反。
--src,--source
-d地址:目標地址 指定報文目標ip地址匹配的範圍;
--dst,--destination
-P協議:指定匹配報文的協議類型,一般有三種tcp,udp和ICMP;
-i IN_IF;數據報文流入的接口; prerouting,input,forward
-o OUT_IF:數據報文流出的接口;output,forward,postrouiting
擴展匹配:調用netfilter額外模塊實現特殊檢查機制,(使用到相關功能,要使用iptables命令的-m選項來指定調用哪個模塊)
隱式擴展:當使用-p{tcp|udp|icmp}中的一種時,可以直接使用擴展專用選項
-p tcp [-m tcp]
--sport port[-port]:指定源端口
--dport port[-port]:指定目標端口
--tcp-flags :tcp標誌位 要檢查標誌位列表(用逗號分隔) 必須爲1的標誌位列表(逗號分隔)
例如:--tcp-flags syn,ack,rst,fin
-all 所有位
例如: iptables -I INPUT -p tcp --tcp-flags all all -j DROP
-all none
例如:iptables -I INPUT -p tcp --tcp-flags all none -j DROP
--syn
-p udp [-m udp]
--sport
--dport
-p icmp [-m icmp]
--icmp-type
0:echo-reply,ping響應
8:echo-request,ping請求
顯示擴展:必須明確說明使用哪個模塊進行擴展,而後才能使用其擴展專用選項
-m:擴展模塊名稱
-m state --state
multiport:多端口匹配
可用於匹配非連續或連續端口;最多指定15個端口;
專用選項:
--source-ports,--sports port[,port,port:port]源端口
--destiantion-ports,--dports 目標端口
--ports:不做限定
例如:
# iptables -I INPUT -d 172.16.100.7 -p tcp -m multiport --dports 22,80 -j ACCEPT
# iptables -I OUTPUT -s 172.16.100.7 -p tcp -m multiport --sports 22,80 -j ACCEPT
iprange:匹配指定範圍內的地址;匹配一段連續的地址而非整個網絡時有用;
專用選項:
[!]--src-range IP[-IP]
[!]--dst-range
例如:
# iptables -A INPUT -d 172.16.100.7 -p tcp --dport 23 -m iprange --src-range 172.16.100.1-172.16.100.100 -j ACCEPT
# iptables -A OUTPUT -s 172.16.100.7 -p tcp --sport 23 -m iprange --dst-range 172.16.100.1-172.16.100.100 -j ACCEPT
string:字符串匹配,能夠檢測報文應用層中的字符串
字符串匹配檢測高效算法
kmp,bm
專用選項:
--algo {kmp|bm}
--string “STRING”
--hex-string “HEX_STRING”:HEX_STRING爲編碼成16進制格式的字串;
例如:# iptables -I OUTPUT -m string --algo kmp --string "sex" -j DROP
time:基於時間做訪問控制
專用選項:
--datestart YYYY[-MM][-DD[Thh[:mm[:ss]]]]
--datestop
--timestart hh:mm[:ss]
--timestop hh:mm[:ss]
--weekdays day[,day]
mon,tue
例如:# iptables -I INPUT -d 172.16.100.7 -p tcp --dport 80 -m time --timestart 08:20 --timestop 18:40 --weekdays Mon,Tue,Thu,Fri -j REJECT
connlimit:連續數限制,對每ip所能夠發起併發連接數做限定;
專用選項
[!]--connlimit-above [n]
例如:iptables -A INPUT -d 172.16.100.7 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j DROP
limit:速率限制
專用選項
--limit n[/second|/minute|/hour|/day]
--limit-burst n
例如:# iptables -A INPUT -d 172.16.100.7 -p icmp --icmp-type 8 -m limit --limit 20/minute --limit-burst 5 -j ACCEPT
state:狀態檢查
專用選項:
--state
連接追蹤中的狀態
NEW:新建一個會話,
ESTABLISHED:已建立的連續
RELATED:有關聯關係的連接
INVALID:無法識別的連接
調整連接追蹤功能所能容納的連接的最大數目;
/proc/sys/net/nf_conntrack_max
當前追蹤的所有連接
/proc/net/nf_conntrack
不同協議或連接類型追蹤時的屬性:
/proc/sys/net/netfilter目錄
放行被動模式下的FTP服務:
1、裝載模塊/lib/modules/KERNEL_VERSION/kernel/net/netfilter/
模塊:nf_conntrack_ftp
2、放行請求報文:
(1)放行NEW狀態對21端口請求的報文;
(2) 放行ESTABLISHED以及RELATED狀態的報文
3、放行響應報文:
(1) 放行ESTABLISHED以及RELATED狀態的報文
NEW:有限放行
優化規則:儘量減少規則條目,彼此不相關的匹配機會較多的放在上面,屬於同一功能匹配規則更嚴格放在上面;
處理目標:
內置目標
DROP 拒絕 悄悄丟棄
REJECT 明確說明拒絕
ACCEPT 允許
自定義的鏈
例如:iptables -t filter -A INPUT -s 172.16.0.0/16 -d 172.16.100.7 -p icmp -j DROP
刪除
iptables [-t table] -D chain rulenum
例如:iptables -t filter -D input 1
設定策略:
iptables [-t table] -p chain target
修改規則
iptables [-t table] -R chain rulenum rule-specification
例如:iptables -R OUTPUT 1 -s 172.16.100.7 -d 172.16.0.0/16 -o eth0 -p tcp --sport 22 -j ACCEPT
插入規則:
iptables [-t table] -I chain [rulenum] rule-specification
iptables -I INPUT -i lo -j ACCEPT 能進不能出
iptables -I OUTPUT -o lo -j ACCEPT 可進可出
創建自定義鏈:
iptables [-t table ] -N chain
例如:iptables -t filter -N http_in
iptables -A http_in -d 172.16.100.7 -p tcp --dport 80 -m iprange --src-range 172.16.100.1-172.16.100.100 -j ACCEPT
刪除自定義且0引用的空鏈
iptables [-t table ] -X chain
重命名自定義鏈且 0引用
iptables [ -t table ] -E old_name new_name
目標:
RETURN:在自定義鏈中無法匹配報文時,將其返回主鏈
NAT:
SNAT:源地址轉換
DNAT:目標地址轉換
PNAT:端口地址轉換
FULL NAT:全地址轉換
SNAT
--to-source SIP表示轉換成那個源地址圖5-23
iptables -t nat -A POSTROUTING -s 192.168.3.0/24 -j SNAT --to-source 172.16.100.7
MASQUERADE:地址僞裝