簡要概述防火牆:
iptables/netfilter是一種包過濾型的防火牆,主要工作與網絡層,對于進出本主機或本網絡的封包根據
事先定義的檢查規則作比對檢測,對于能夠被規則比對到的封包作出相應處理的元件;
防火牆類型:軟體防火牆、硬體防火牆
iptables/netfilter元件:
iptables:iptables 元件是一種工具,也稱為使用者空間(userspace),用于設定資料過濾與nat規則
netfilter:元件也稱為核心空間(kernelspace),是核心的一部分,由一些資訊包過濾表組成,這些表包含核心用來控制資訊包過濾處理的規則集
連結清單規則:四表五鍊
iptables内置有5個 hook functions :input,output,forward,prerouting,postrouting與之對應的5的鍊
内置的鍊:PREROUTING ,INPUT, FORWARD, OUTPUT,POSTROUTING
PREROUTING:在進行路由表選擇之前處理資料包
INPUT:處理入站的資料包
FORWARD:處理轉發的資料包
OUTPUT:處理出站的資料包
POSTROUTING:在進行路由選擇後的處理資料包
表及功能:filter, nat, mangle, raw
filter:主要實作過濾功能:能夠用于鍊的有:INPUT,FORWARD,OUTPUT
nat:network address translation 用于修改源IP、目标IP或者端口;PREROUTING ,OUTPUT,POSTROUTING
mangle:為資料包設定标記,拆解封包,做出修改并重新封裝起來:PREROUTING ,INPUT, FORWARD, OUTPUT,POSTROUTING
raw:關閉nat表上啟用的連接配接追蹤機制:PREROUTING,OUTPUT
如圖所示:

規則表的先後順序:raw--mangle--nat--filter
封包流向:
流入本機:PREROUTING --> INPUT
由本機流出:OUTPUT --> POSTROUTING
轉發:PREROUTING --> FORWARD --> POSTROUTING
3.如下圖展現了資料包是如何流經本機iptables功能:
4.iptables規則指令參數使用
規則:組成部分根據規則比對條件來比對封包,一旦比對成功後就由規則定義的動作做出處理
比對條件:基本比對條件、擴充比對條件
處理動作:基本處理動作、擴充處理動作、自定義處理機制
格式:iptables [-t bable] COMMAND chain [-m matchname [per-match-options]] -j target [per-target-options]
表管理
-t
raw,mangle,nat,filter,預設表為filter可省略
COMMAND
鍊管理
-N
Create a new user-defined chain by the given name,自定義新的規則鍊
-X
Delete the optional user-defined chain specified. 删除自定義規則鍊
-P
--policy chain target,設定預設政策,對filter而言:ACCEPT/DROP
-E
--rename-chain old-chain new-chain 重命名
規則管理
-A
-A, --append chain rule-specification ,追加
-I #
--insert chain [rulenum] rule-specification ,插入,可指定位置,省略是表示第一條
-D
delete删除;可指明規則序号或者指明規則本身
-R
replace,替換指定鍊上的指定規則
-F
flush [chain]清控規則鍊
-Z
zero,至零;iptables的每條規則鍊都有兩個計數器:比對的封包的個數、
比對到的所有封包的大小之和
-S
select,以iptables-save指令格式顯示鍊上規則
檢視
-L
--list,列出指定鍊上的所有規則;
-n:numberic,以數字格式顯示端口和位址,不反解服務名
-v:verbose -x:顯示計數器結果的精确值
--line-number:顯示規則的序号 如組合使用:-nvL
比對條件選項
基本比對條件,無需加載任何子產品,由iptables/netfilter提供
[!] -s
--source address[/mask][,...] 比對來源位址ip/mask,[!]表示除了這個IP以外
[!] -d
--destination address[/mask][,...] 比對目标位址ip/mask,[!]表示除了這個IP以外
[!] -i
--in-interface name:資料封包流入的接口;隻能應用于資料封包流入的環節,隻能應用于PREROUTING,INPUT和FORWARD鍊;
[!] -o
--out-interface name:資料封包流出的接口;隻能應用于資料封包流出的環節,隻能應用于FORWARD、OUTPUT和POSTROUTING鍊;
[!] -p
--protocol protocol比對協定:tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp, mh or the special keyword "all"
-j target name
處理動作
ACCEPT
允許通過
LOG
記錄後繼續比對下條規則
REJECT
拒絕通過,必要時會給提示
DROP
直接丢棄,不給任何回應
RETURN
傳回調用鍊
MASK
做防火牆标記,不做任何通路控制
DNAT
目标 位址轉換
SNAT
源位址轉換
MASQUERADE
位址僞裝
擴充比對條件:需要加載擴充子產品才生效。
隐式擴充條件:不需手動加載擴充子產品,但需要使用-p選項指明協定
-p :--protocol protocol
tcp : 等同于 “-m tcp”/udp
[!] --source-port, --sport port[:port]:比對封包源 端口,可以是端口連續範圍
[!] --destination-port, --dport port[:port]:比對封包源目标端口,可以是端口連續範圍
icmp:
[!] --icmp-type {type[/code]|typename}
echo-request:8/0
echo-reply:0/0
用法:可以單獨指定type:允許192.168.0.0/24請求192.168.1.11
iptables -A INPUT -s 192.168.0.0/24 -d 192.168.1.11 -p icmp --icmp-type 8 -j ACCEPT
[!] --tcp-flags mask comp
comp is a comma-separated list of flags which must be set,例如SYN
例如:“--tcp-flags SYN,ACK,FIN,RST SYN”表示,要檢查的标志位為SYN,ACK,FIN,RST四個,
其中SYN必須為1,餘下的必須為0;
[!] --syn:用于比對第一次握手,相當于”--tcp-flags SYN,ACK,FIN,RST SYN“;
顯示擴充條件:必須指明要加載的擴充子產品 [-m matchname [per-match-options]]
1)multiport:以離散的方式定義多端口比對,最多指定15個端口
[!] --source-ports ,--sports port[,port|,port:port]....指定多個源端口 port:port表示連續端口
[!] --destination-ports,--dports port[,port|,port:port]....指定多個目标端口
[!] --ports port[,port|,port:port]
eg:允許172.16.0.0/16網段的主機通路67主機的22,80端口
iptables -A INPUT -s 172.16.0.0/16 -d 192.168.1.10 -p -m multiport --dport 22,80 -j ACCEPT
2)iprange:This matches on a given arbitrary range of IP addresses.比對給定的連續IP位址
[!] --src-range from[-to] Match source IP in the specified range.比對源IP位址
[!] --dst-range from[-to] 比對目标IP位址
eg:開放192.168.1.80-192.168.1.100對伺服器192.168.1.10的80端口通路
iptables -A INPUT -d 192.168.1.10 -p tcp --dport 80 -m iprange --src-range 192.168.1.80-192.168.1.100 -j ACCEPT
3)string: 需要制定--algo
對封包中的應用層資料字元串做模式比對,應用于響應封包--OUTPUT
--algo {bm|kmp}: Select the pattern matching strategy選擇模式比對政策
(bm = Boyer-Moore, kmp = Knuth-Pratt-Mor‐ ris)
[!] --string pattern: Matches the given pattern.比對給定的字元串模式
[!] --hex-string pattern: Matches the given pattern in hex notation.16進制格式
eg:iptables -A OUTPUT -s 192.168.1.101 -d 192.168.0.0/24 -p tcp --sport 80 -m string --algo bm --string "bad" -j REJECT
4) time:根據将封包到達的時間與指定的時間範圍進行比對,預設使用UTC時間
--datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
--datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
--timestart hh:mm[:ss]
--timestop hh:mm[:ss]
[!] --monthdays day[,day...]
[!] --weekdays day[,day...] --weekdays Mon, Tue, Wed, Thu, Fri, Sat, Sun, or values from 1 to 7
eg: iptables -A INPUT -s 192.168.0.0/24 -d 192.168.1.100 -p tcp --dport 80 -m time --timestart 08:00 --timestop 17:00
--weekdays 1 ,2,3,4,5 -j ACCEPT
5)connlimit :根據每用戶端IP做并發連接配接數數量比對
Allows you to restrict the number of parallel connections to a server per client IP address (or client address block).
--connlimit-upto n:連接配接的數量小于等于n時比對;
--connlimit-above n:連接配接的數量大于n時比對;
# iptables -A INPUT -d 172.16.100.67 -p tcp --dport 21 -m connlimit --connlimit-above 2 -j REJECT
iptables -A INPUT -d 172.16.100.67 -p tcp --dport 21 -m connlimit --connlimit-upto 2 -j ACCEPT
6)limit: This module matches at a limited rate using a token bucket filter. 使用令×××桶過濾器做速率比對
--limit rate[/second|/minute|/hour|/day]
--limit-burst number 速率突發值限制
eg: iptables -I INPUT -d 172.16.100.67 -p icmp --icmp-type 8 -m limit --limit 3/minute --limit-burst 5 -j ACCEPT
7)state
The "state" extension is a subset of the "conntrack" module. "state" allows access to the connection tracking state for this packet.
根據”連接配接追蹤機制“去檢查連接配接的狀态,記憶體中一個存儲空間稱為連接配接追蹤模闆 conntrack template
[!] --state state
conntrack機制:追蹤本機上的請求和響應之間的關系;狀态有如下幾種:
NEW: The packet has started a new connection or otherwise associated with a connection which has not seen packets in both directions.
發出新請求,之間的連接配接還沒有任何資料
ESTABLISHED:NEW狀态之後,連接配接追蹤模闆中為其建立的條目失效之前期間内所進行的通信狀态;
RELATED:The packet is starting a new connection, but is associated with an existing con‐nection
相關聯的連接配接;如ftp協定中的資料連接配接與指令連接配接之間的關系;
INVALID:無效的連接配接;
UNTRACKED:未進行追蹤的連接配接;raw表拆除連接配接追蹤功能
eg: 本地22,80端口隻放行新的請求和已建立的連接配接
iptables -A INPUT -d 192.168.1.100 -p tcp -m multiport --dports 22,80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.100 -p tcp -m multiport --sports 22,80 -m state --state ESTABLISHED -j ACCEPT
5.SNAT和DNAT
snat:POSTROUTING, OUTPUT 修改IP封包中的源位址
讓本地網絡中的主機通過某一特定位址通路外部網絡時,進而實作位址僞裝,可以解決IP資源匮乏;
請求:有内網主機發起,修改源IP,如果修改則由管理者定義
響應:修改目标IP,但由nat自動根據會話表中跟蹤機制實作相應修改
nat表的target:
SNAT
--to-source [ipaddr[-ipaddr]][:port[-port]]
--random
dnat:PREROUTING 修改IP封包中的目标位址
把本地網絡中的某一主機上的某服務開放給外部網絡中的使用者通路時;
請求:由外網主機發起,修改其目标位址,由管理者定義
響應:修改源位址,但由nat自動根據會話表中跟蹤機制實作相應修改
DNAT
--to-destination [ipaddr[-ipaddr]][:port[-port]]
如圖所示SNAT的實作:
iptables -t nat A POSTROUTING -s 10.0.1.10 -j SNAT --to-source 192.168.1.10
DNAT: iptables -t nat A PREROUTING -d 192.168.1.10 -p tcp --dport 80 -j DNAT --to-destination 10.0.1.10
7.如何開放被動模式的ftp服務?
6.規則的用效期限:
使用iptables指令定義的規則,手動删除之前,其生效期限為kernel存活期限;關機後消失:
儲存規則至指定的檔案:
CentOS 6:
~]# service iptables save
将規則儲存至/etc/sysconfig/iptables檔案中;
~]# iptables-save > /PATH/TO/SOME_RULES_FILE
CentOS 7:
~]# iptables -save > /PATH/TO/SOME_RULES_FILE
iptables -S > /PATH/TO/SOME_RULES_FILE
重新載入預存規則檔案中規則:
~]# iptables-restore < /PATH/FROM/SOME_RULES_FILE
~]# service iptables restart 放在預設的路徑/etc/sysconfig/iptables檔案重載;
自動生效規則檔案中的規則:
(1) 用腳本儲存各iptables指令;讓此腳本開機後自動運作;
/etc/rc.d/rc.local檔案中添加腳本路徑;
/PATH/TO/SOME_SCRIPT_FILE
/usr/bin/iptables.sh
(2) 用規則檔案儲存各規則,開機時自動載入此規則檔案中的規則;
/etc/rc.d/rc.local檔案添加:
iptables-restore < /PATH/FROM/IPTABLES_RULES_FILE
etc/sysconfig/iptables.v2