table height=2188 style="border-collapse:collapse;width:803.25pt;">
防火牆就是透過訂定一些有順序的規則,并管制進入到我們網域内的主機 (或者可以說是網域) 資料封包的一種機制!防火牆又可以分為硬體防火牆與本機的軟體防火牆。硬體防火牆是由廠商設計好的主機硬體, 這部硬體防火牆内的作業系統主要以提供封包資料的過濾機制為主,并将其他不必要的功能拿掉。因為單純作為防火牆功能而已, 軟體防火牆本身就是在保護系統網絡安全的一套軟體(或稱為機制)所謂的封包過濾,亦即是分析進入主機的網絡封包,将封包的表頭資料捉出來進行分析,以決定該聯機為放行或抵擋的機制。 由于這種方式可以直接分析封包表頭資料,是以包括硬體位址(MAC), 軟體位址 (IP), TCP, UDP, ICMP 等封包的資訊都可以進行過濾分析的功能。
規則的功能分為以下4種:
filter: 過濾功能,定義是否允許通過防火牆,INPUT,OUTPUT,FORWARD都需要用到過濾的功能
nat: 位址轉換,啟用connection_track子產品;PREROUTING,POSTROUTINIG,FORWARD都需要用到轉換的功能
mangle: 用于對資料包相關字段的修改;PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING都可以用到
raw: 目标是關閉nat表上啟用的連接配接追蹤功能;PREROUTING, OUTPUT都需要用到此功能

比對條件
通用比對
-s位址
指定封包源IP位址比對的範圍;可以是IP,也可以是網絡位址;可使用!取反;--src, --source
-d位址
指定封包目标IP位址比對的範圍; --dst, --destination
-p協定
指定比對封包的協定類型,一般有三種tcp, udp和icmp以及all
-iINTERFACE
資料封包流入的接口;PREROUTING, INPUT, FORWARD 例如:eth0 ,lo 等需要與INPUT鍊配合
-oINTERFACE
據封包流出的接口;OUTPUT, FORWARD, POSTROUITING 需要于OUTPUT配合
-n
不進行 IP 與 HOSTNAME 的反查,顯示訊息的速度會快很多!
-j
目标,後邊接操作,主要操作有:接受(ACCEPT),丢棄(DROP),拒絕(REJECT),記錄(LOG)。。。
ACCEPT
接受
DROP
丢棄
REJECT
拒絕
LOG
如果要記錄日志,需要寫在其他政策前面
SNAT
修改資料包報頭來源,接受傳回的資料在路由前就需要轉換報頭,否則會送往轉換主機的内部去
DNAT
修改資料包報頭的目标項目:主要是架設伺服器使用,當通路給出的外部公網位址時,可以轉換為内部的伺服器位址。相當于SNAT的反傳送。
PANT
MASQERADE
主要用于ADSL撥号上網,可以自動尋找公網IP。代理。
RETURN
目标,在自定義鍊中無法比對封包時,将其傳回
擴充比對
調用nstfilter額外子產品實作特殊檢查機制,必須使用-m選項來指定調用那個子產品
顯式比對
顯式擴充:必須明确說明使用哪個子產品進行擴充,需要-m指定那個子產品,而後才能使用其擴充專用選項;
-m
multiport
多端口比對
專用選項
--source-ports, --sports port[,port,port:port]
--destination-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-ragne 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]
# 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 小于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:有關聯關系的連接配接 (ftb)
INVALID:無法識别的連接配接
/proc/sys/net/nf_conntrack_max:調整連接配接追蹤功能所能容納的連接配接的最大數目
/proc/net/nf_conntrack:目前追蹤的所有連接配接
/proc/sys/net/netfilter/*:不同協定或連接配接類型追蹤時的屬性
#iptables -A INPUT -d 172.16.100.7 -p tcp -m state RELATED -j ACCEPT
#iptables -R OUTPUT 1 -s 172.16.100.7 -m state ESRABLISHED,RELATED -j ACCEPT
mac
網卡硬體位址
--mac-source 來源諸暨的MAC
#iptables -A INPUT -m mac
隐式比對
隐式擴充:當使用-p {tcp|udp|icmp}中的一種時,需要-m指定那個子產品,也可以直接使用擴充專用選項;
-p
-p [-m] tcp:
-p tcp == [-m tcp]
選項
--sport PORT[-PORT]: 指定源端口,端口可以是連續的範圍port-port
--dport PORT[-PORT]: 指定目标端口,端口可以是連續的範圍port-p
--tcp-flags 要檢查的标志位清單(逗号分隔),必須為1的标志位清單(逗号分隔)
例如:--tcp-flags syn,ack,rst,syn
-p [-m] udp:
-p udp == [-m udp]
--dport PORT[-PORT]: 指定目标端口,端口可以是連續的範圍port-port
-p [-m] icmp:
--icmp-type:後邊必須要接ICMP的資料包類型,也可以使用代号。
0: echo-reply, ping響應
8: echo-request, ping請求
-p all
三種協定
TABLE
預設是filter
filter
過濾功能,定義是否允許通過防火牆
nat
位址轉換,需要啟用connection_track子產品
mangle
用于對資料包相關字段的修改
raw
目标是關閉nat表上啟用的連接配接追蹤功能
鍊
INPUT
進入本機路由後
OUTPUT
本機出來路由前
PREROUTING
進入本機路由前
POSTROUTING
出去
FORWARD
轉發
鍊規則
-A
新增一條規則,該規則增加在原規則後邊,
-I
:插入一條新規則,如果沒有指定規則順序,則此規則變成第一條規則,其他規則依次為2-N
-D
删除規則
-R
替換規則
-L
查詢,list
-n:以數字格式顯示主機位址和端口
-v:詳細格式,vv,vvv
--line-numbers:顯示規則編号
-x:exactly,不要對計數器的計數結果做機關換算,而顯示其精确值。
注意:千萬不要iptables -t net -L -n 檢視net 會啟動連結追蹤功能,
-N
new 自定義一個鍊,隻可被調用 iptables [-t table] -N chain
-X
delete,删除自定義空鍊 iptables [-t table] -N chain
-E
重命名自定義鍊。iptables [-t table] -E old_name new_name
-Z
zero,計數器歸零。
-P
policy,設定預設政策,對filter表來講,預設規則為ACCEPT或DROP;
-s 位址
-d 位址
-p 協定
-i INTERFACE
-o INTERFACE
資料封包流出的接口;OUTPUT, FORWARD, POSTROUITING 需要于OUTPUT配合
如果要記錄日志,需要寫在其他政策前邊
修改資料包報頭來源,接受傳回的資料在路由前就需要轉換報頭,否則會送往轉換主機的内部去。
PNAT
指定封包目标IP位址比對的範圍; --dst, --destination
據封包流出的接口;OUTPUT, FORWARD, POSTROUITING 需要于OUTPUT配合
字元串比對,能夠檢測封包應用層中的字元串 算法:kmp bm
--algo {kmp|bm}
--string "STRING"
--hex-string "HEX_STRING" :HEX_STRING為編碼成16進制格式的字串
[!]--connlimit-above N 小于N的連接配接數允許,大于拒絕
#iptables -A INPUT -d 172.16.100.7 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j DROP
--limit-burst n 一次多放幾個
RELATED:有關聯關系的連接配接 (ftb)
#iptables -R OUTPUT 1 -s 172.16.100.7 -m state ESRABLISHED,RELATED -j ACCEPT
#iptables -A INPUT -m mac