您好,登錄后才能下訂單哦!
iptables
全稱Packets Filter Firewall; iptables/netfilter:包過濾型防火墻;帶狀態(tài)檢測(cè)的包過濾型防火墻;連接追蹤(connection tracking);
Firewall:隔離工具;工作于主機(jī)或網(wǎng)絡(luò)的邊緣,對(duì)經(jīng)由的報(bào)文根據(jù)預(yù)先定義的規(guī)則(識(shí)別條件)進(jìn)行檢測(cè),對(duì)于能夠被規(guī)則匹配到的報(bào)文實(shí)行某預(yù)定義的處理機(jī)制的一套組件;
硬件防火墻:在硬件級(jí)別能部分防火墻,另一部分功能基于軟件實(shí)現(xiàn);
軟件防火墻:應(yīng)用軟件處理邏輯運(yùn)行通用硬件實(shí)現(xiàn)的防火墻;
主機(jī)防火墻:服務(wù)范圍為當(dāng)前主機(jī);
網(wǎng)絡(luò)防火墻:服務(wù)范圍為局域網(wǎng);
獲取幫助:
CentOS 7:man iptables-extensions
CentOS 6:man iptables
iptables/netfilter:軟件實(shí)現(xiàn)的主機(jī)或網(wǎng)絡(luò)防火墻;
netfilter:位于內(nèi)核中tcp/ip協(xié)議棧上的一個(gè)framework;5個(gè)鉤子函數(shù);
iptables:位于用戶空間的命令行程序,用于生成規(guī)則送往內(nèi)核中的netfilter之上;
hook function鉤子函數(shù):
prerouting
input
forward
output
postrouting
chain鏈:
PREROUTING
INPUT
FORWARD
OUTPUT
POSTROUTING
四表
filter:過濾,防火墻;
nat:network address translation;用于修改報(bào)文的源地址或目標(biāo)地址,甚至是端口;
mangle:拆解報(bào)文,做出修改,并重新封裝起來;
raw:關(guān)閉nat表上啟用的連接追蹤機(jī)制;
優(yōu)先級(jí)次序(由高而低):
raw --> mangle --> nat --> filter
4個(gè)表中,每個(gè)表多對(duì)應(yīng)的鏈分別為(功能<-->鉤子):
raw:PREROUTING,OUTPUT
mangle:PREROUTING,INPUT,F(xiàn)ORWARD,OUTPUT,POSTROUTING
nat:PREROUTING,INPUT,OUTPUT,POSTRUTING
filter:INPUT,F(xiàn)ORWARD,OUTPUT
報(bào)文流向:
到本機(jī)某進(jìn)程的報(bào)文:PREROUTING --> INPUT
由本轉(zhuǎn)發(fā)的報(bào)文:PREROUTING --> FORWARD --> POSTROUTING
由本某進(jìn)程發(fā)出的:OUTPUT --> POSTROUTING
規(guī)則的組成的部分:
匹配條件:
網(wǎng)絡(luò)層首部屬性值;
傳輸層首部屬性值;
附加的條件;
處理動(dòng)作:
TCP/IP協(xié)議棧:
數(shù)據(jù)鏈接層:物理到物理設(shè)備之間的通信;(MAC,Media Access Control)
網(wǎng)絡(luò)層:源主機(jī)到目標(biāo)主機(jī)之間的通信;
傳輸層:進(jìn)程到進(jìn)程之間的通信;
CentOS 5/6:iptables命令編寫規(guī)則;
CentOS 7:firewalld;
systemctl disable firewalld.service
iptables命令:
規(guī)則:根據(jù)指定的匹配條件來嘗試匹配每個(gè)流經(jīng)此處的報(bào)文,一旦匹配成功,就由規(guī)則后面指明的處理動(dòng)作進(jìn)行處理;
匹配條件:
基本匹配條件:簡(jiǎn)單檢查IP、TCP、UDP等報(bào)文的某屬性進(jìn)行匹配的
擴(kuò)展匹配條件:需要借助于擴(kuò)展模塊進(jìn)行的匹配條件指定即為擴(kuò)展匹配;
處理動(dòng)作:
基本動(dòng)作:ACCEPT,DROP, ...
擴(kuò)展動(dòng)作:需要借助擴(kuò)展模塊進(jìn)行的動(dòng)作;
添加規(guī)則之時(shí)需要考量的問題:
(1) 報(bào)文的流經(jīng)路徑,判斷添加規(guī)則至哪個(gè)鏈上;
(2) 確定要實(shí)現(xiàn)的功能,判斷添加規(guī)則至哪個(gè)表上;
(3) 要指定的匹配條件,以用于匹配目標(biāo)報(bào)文;
規(guī)則的編寫格式:iptables [-t table] COMMAND chain [-m matchname [per-match-options]] [-j targetname [per-target-options]]
-t table:
默認(rèn)為filter;其它可用的有raw, mangle, nat;
COMMAND:
鏈:
-P:policy,策略,定義默認(rèn)策略; 一般有兩種選擇,ACCEPT和DROP;
-N:new,新建一條自定義的規(guī)則鏈;被內(nèi)建鏈上的規(guī)則調(diào)用才能生效;[-j chain_name];
-X:drop,刪除自定義的引用計(jì)數(shù)為0的空鏈;
-F:flush,清空指定的鏈;
-E:重命名自定義的引用計(jì)數(shù)和為0的鏈;
規(guī)則:
-A:append,追加,在指定鏈的尾部追加一條規(guī)則;
-I:insert,插入,在指定的位置(省略位置時(shí)表示鏈?zhǔn)祝┎迦胍粭l規(guī)則
-D:delelte,刪除,刪除指定的規(guī)則;
-R:replace,替換,將指定的規(guī)則替換為新規(guī)則;不能僅修改規(guī)則中的部分,而是整條規(guī)則完全替換;
查看:
-L:list,列出表中的鏈上的規(guī)則;
-n:numeric,以數(shù)值格式顯示;
-v:verbose,顯示詳細(xì)格式信息;
-vv, -vvv
-x:exactly,計(jì)數(shù)器的精確結(jié)果;
--line-numbers:顯示鏈中的規(guī)則編號(hào);
計(jì)數(shù)器:
規(guī)則,以及默認(rèn)策略有專用的計(jì)數(shù)器;
記錄被當(dāng)前規(guī)則所匹配到的:
(1) 報(bào)文個(gè)數(shù);
(2) 字節(jié)總數(shù);
重置規(guī)則計(jì)數(shù)器:
-Z:zero,置0;
chain:
(1) 內(nèi)建鏈;
(2) 自定義鏈;
匹配條件:
多重條件:邏輯關(guān)系為“與”;
基本匹配條件:
[!] -s, --source address[/mask][,...]:檢查報(bào)文中的源IP地址是否符合此處指定的地址或范圍;
[!] -d, --destination address[/mask][,...]:檢查報(bào)文中的目標(biāo)IP地址是否符合此處指定的地址或范圍;
[!] -p, --protocol protocol:
protocol:{tcp|udp|icmp}
[!] -i, --in-interface name:數(shù)據(jù)報(bào)文的流入接口;INPUT, FORWARD and PREROUTING
[!] -o, --out-interface name:數(shù)據(jù)報(bào)文的流出接口; FORWARD, OUTPUT and POSTROUTING
擴(kuò)展匹配條件
隱式擴(kuò)展:不用-m選項(xiàng)指出matchname即可使用此match的專用選項(xiàng)進(jìn)行匹配;
-p tcp:隱含了-m tcp;
[!] --source-port,--sport port[:port]:匹配報(bào)文中傳輸層的源端口;
[!] --destination-port,--dport port[:port]:匹配報(bào)文中傳輸層的目標(biāo)端口;
[!] --tcp-flags mask comp
SYN,ACK,F(xiàn)IN,RST,URG,PSH;
mask:要檢查的標(biāo)志位列表,以逗號(hào)分隔;
comp:必須為1的標(biāo)志位,余下的出現(xiàn)在mask列表中的標(biāo)志位則必須為0;
--tcp-flags SYN,ACK,FIN,RST SYN
[!] --syn:
相當(dāng)于--tcp-flags SYN,ACK,FIN,RST SYN
-p udp:隱含了-m udp:
[!] --source-port,--sport port[:port]:匹配報(bào)文中傳輸層的源端口;
[!] --destination-port,--dport port[:port]:匹配報(bào)文中傳輸層的目標(biāo)端口;
-p icmp:隱含了-m icmp:
[!] --icmp-type {type[/code]|typename}
8:echo-request
0:echo-reply
顯式擴(kuò)展:必須使用-m選項(xiàng)指出matchname,有的match可能存在專用的選項(xiàng);
1、multiport擴(kuò)展
以離散或連續(xù)的方式定義多端口匹配條件;
[!] --source-ports,--sports port[,port|,port:port]...:指定多個(gè)源端口;
[!] --destination-ports,--dports port[,port|,port:port]...:指定多個(gè)目標(biāo)端口
[!] --ports port[,port|,port:port]...:指定多個(gè)端口;
2、iprange擴(kuò)展
以連續(xù)的ip地址范圍指明連續(xù)的多地址匹配條件;
[!] --src-range from[-to]:源IP地址;
[!] --dst-range from[-to]:目標(biāo)IP地址;
3、string擴(kuò)展
對(duì)報(bào)文中的應(yīng)用層數(shù)據(jù)做字符串匹配檢測(cè);
[!] --string pattern:要檢測(cè)字符串模式;
[!] --hex-string pattern:要檢測(cè)的字符串模式,16進(jìn)制編碼;
--algo {bm|kmp}
4、time擴(kuò)展
根據(jù)報(bào)文到達(dá)的時(shí)間與指定的時(shí)間范圍進(jìn)行匹配度檢測(cè);
--datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]:起始日期時(shí)間;
--datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]:結(jié)束日期時(shí)間;
--timestart hh:mm[:ss]
--timestop hh:mm[:ss]
[!] --monthdays day[,day...]
[!] --weekdays day[,day...]
~]# iptables -I INPUT -d 172.16.100.67 -p tcp --dport 23 -m time --timestart 09:00:00 --timestop 18:00:00 --weekdays Tue,Thu,Sat -j ACCEPT
5、connlimit擴(kuò)展
根據(jù)每客戶端IP做并發(fā)連接數(shù)匹配;
--connlimit-upto n:連接數(shù)數(shù)量小于等于n,此時(shí)應(yīng)該允許;
--connlimit-above n:連接數(shù)數(shù)量大于n,此時(shí)應(yīng)該拒絕;
~]# iptables -A INPUT -d 172.16.100.67 -p tcp --dport 23 -m connlimit --connlimit-upto 2 -j ACCEPT
6、limit擴(kuò)展
基于收發(fā)報(bào)文的速率進(jìn)行匹配;
--limit rate[/second|/minute|/hour|/day]:平均速率
--limit-burst number:峰值速率
7、state擴(kuò)展
狀態(tài)檢測(cè);連接追蹤機(jī)制(conntrack);
INVALID:無法識(shí)別的狀態(tài);
ESTABLISHED:已建立的連接;
NEW:新連接;
RELATED:相關(guān)聯(lián)的連接;
UNTRACKED:未追蹤的連接;
nf_conntrack內(nèi)核模塊;
追蹤到的連接:/proc/net/nf_conntrack文件中;
能追蹤的最大連接數(shù)量定義在:/proc/sys/net/nf_conntrack_max
此值可自行定義,建議必要時(shí)調(diào)整到足夠大;
不同的協(xié)議的連接追蹤的時(shí)長:
/proc/sys/net/netfilter/
[!] --state STATE
如何開放被模式的ftp服務(wù):
(1) 裝載追蹤ftp協(xié)議的模塊;
# modprobe nf_conntrack_ftp
(2) 放行命令連接
~] # iptables -A INPUT -d 172.16.100.67 -p tcp -m state --state ESTABLISHED -j ACCEPT
~] # iptables -A INPUT -d 172.16.100.67 -p tcp --dport 21 -m state --state NEW -j ACCEPT
(3) 放行數(shù)據(jù)連接
~] iptables -A INPUT -d 172.16.100.67 -p tcp -m state --state RELATED -j ACCEPT
處理動(dòng)作(目標(biāo))
-j targetname [per-target-options]
targetname:
ACCEPT:接受;
DROP:丟棄;
REJECT:拒絕;
保存和重載規(guī)則:
iptables-save > /PATH/TO/SOME_RULE_FILE
iptables-restore < /PATH/FROM/SOME_RULE_FILE
CentOS 6:
保存規(guī)則:
service iptables save
自動(dòng)保存規(guī)則至/etc/sysconfig/iptables文件中;
重載規(guī)則:
server iptables restore
從/etc/sysconfig/iptables文件中重載規(guī)則;
規(guī)則優(yōu)化:
(1) 可安全放行所有入站及出站,且狀態(tài)為ESTABLISHED的連接;
(2) 服務(wù)于同一類功能的規(guī)則,匹配條件嚴(yán)格的放前面,寬松放后面;
(3) 服務(wù)于不同類功能的規(guī)則,匹配報(bào)文可能性較大擴(kuò)前面,較小放后面;
(4) 設(shè)置默認(rèn)策略;
(a) 最后一條規(guī)則設(shè)定;
(b) 默認(rèn)策略設(shè)定;
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。