這篇文章給大家介紹如何進(jìn)行iptables的使用,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。
目前創(chuàng)新互聯(lián)已為上千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬主機(jī)、綿陽(yáng)服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計(jì)、鄲城網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
一.iptables 簡(jiǎn)介
當(dāng)一臺(tái)主機(jī)接入至一個(gè)網(wǎng)絡(luò)中的時(shí)候,就不可避免的會(huì)受到來至網(wǎng)絡(luò)的可能***,為了解決這一問題,誕生了防火墻(Firewall)的技術(shù),通過防火墻可以阻隔絕大多數(shù)的來路不明的網(wǎng)絡(luò)請(qǐng)求,從而保護(hù)自己的主機(jī)。
防火墻可以分為硬件防火墻和軟件防火墻,軟件防火墻即是通過軟件處理邏輯對(duì)通過主機(jī)的各種報(bào)文,信息等進(jìn)行監(jiān)控阻隔等,而硬件防火墻則可以基于硬件直接進(jìn)行阻隔,硬件防火墻中部分功能也需要基于軟件實(shí)現(xiàn)。
Iptables是基于軟件實(shí)現(xiàn)的防火墻,主要有兩個(gè)部分組成。內(nèi)核空間中的netfilter,提供了整個(gè)防火墻框架,而iptables則位于用戶空間,主要是給用戶提供一個(gè)接口,使得用戶可以根據(jù)需要對(duì)位于內(nèi)核的netfilter進(jìn)行管理操作。
Netfilter主要是通過5個(gè)hookfunction(鉤子函數(shù))在內(nèi)核級(jí)別實(shí)現(xiàn)報(bào)文的監(jiān)控修改等操作,他們分別為prerouting,input,forward,output,postrouting。而用戶空間的iptables則分別使用5條鏈對(duì)應(yīng)這五個(gè)hookfunction。為了便于管理iptables還設(shè)定了4個(gè)不同的功能(tables)
filter:過濾,防火墻;
nat:networkaddress translation;用于修改報(bào)文的源地址或目標(biāo)地址,甚至是端口;
mangle:拆解報(bào)文,做出修改,并重新封裝起來;
raw:關(guān)閉nat表上啟用的連接追蹤機(jī)制;
優(yōu)先級(jí)次序(由高而低):
raw--> mangle --> nat --> filte
其中功能與鉤子的關(guān)系為:
功能<-->鉤子:
raw:PREROUTING,OUTPUT
mangle:PREROUTING,INPUT,F(xiàn)ORWARD,OUTPUT,POSTROUTING
nat:PREROUTING,INPUT,OUTPUT,POSTRUTING
filter:INPUT,F(xiàn)ORWARD,OUTPUT
二.iptables 設(shè)置
獲取幫助:
CentOS7:man iptables-extensions
CentOS6:man iptables
使用格式
iptables [-t table] COMMAND chain[-m matchname [per-match-options]] [-j targetname [per-target-options]]
-t table:默認(rèn)為filter;其它可用的有raw, mangle, nat;
COMMAND:
對(duì)鏈操作:
-P:policy,策略,定義默認(rèn)策略; 一般有兩種選擇,ACCEPT和DROP;
-N:new,新建一條自定義的規(guī)則鏈;被內(nèi)建鏈上的規(guī)則調(diào)用才能生效
-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)建鏈;PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
(2)自定義鏈;
匹配條件:
一條規(guī)則中存在多條匹配規(guī)則時(shí),邏輯關(guān)系為“與”
1)基本匹配條件:
[!]-s, --source address[/mask][,...]:檢查報(bào)文中的源IP地址是否符合此處指定的地址或范圍;
[!]-d, --destination address[/mask][,...]:檢查報(bào)文中的目標(biāo)IP地址是否符合此處指定的地址或范圍;
e.g.禁止172.16.10.17連接172.16.10.7主機(jī)
~]#iptables -A INPUT -s 172.16.10.17 -d 172.16.10.7 -j DROP
[!]-p, --protocol protocol:
protocol:{tcp|udp|icmp}
[!]-i, --in-interface name:數(shù)據(jù)報(bào)文的流入接口;INPUT, FORWARD,PREROUTING
[!]-o, --out-interface name:數(shù)據(jù)報(bào)文的流出接口:FORWARD,OUTPUT, POSTROUTING
e.g. 將通過eno16777736網(wǎng)卡的所有請(qǐng)求全都拒絕
~]#iptables -A INPUT -i eno16777736 -j REJECT
2)擴(kuò)展匹配條件
隱式擴(kuò)展:不用-m選項(xiàng)指出matchname即可使用此match的專用選項(xiàng)進(jìn)行匹配;
-p tcp:隱含了-m tcp;
[!]--source-port,--sport port[:port]:匹配報(bào)文中傳輸層的源端口;
e.g.禁止所有請(qǐng)求訪問tcp的23端口
~]#iptables -A INPUT -p tcp --dport 23 -j DROP
[!]--destination-port,--dport port[:port]:匹配報(bào)文中傳輸層的目標(biāo)端口;
[!]--tcp-flags mask comp
標(biāo)識(shí)位: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 用于請(qǐng)求
0:echo-reply 用于應(yīng)答
e.g.禁止除172.16.10.17外的所有主機(jī)對(duì)本機(jī)進(jìn)行ping操作
~]#iptables -A INPUT ! -s 172.16.10.17 -d 172.16.10.7 -p icmp --icmp-type 8 -jDROP
~]#iptables -A OUTPUT ! -d 172.16.10.17 -s 172.16.10.7 -p icmp --icmp-type 0 -j DROP
顯式擴(kuò)展:必須使用-m選項(xiàng)指出matchname,有的match可能存在專用的選項(xiàng);
multiport擴(kuò)展
以離散或連續(xù)的方式定義多端口匹配條件;
[!]--source-ports,--sports port[,port|,port:port]...:指定多個(gè)源端口;
[!]--destination-ports,--dports port[,port|,port:port]...:指定多個(gè)目標(biāo)端口;
e.g.禁止所有請(qǐng)求訪問tcp的21,22,23,80端口
~]#iptables -A INPUT -p tcp –m multiport --dports 21:23,80 -j DROP
[!] --portsport[,port|,port:port]...:指定多個(gè)端口;
iprange擴(kuò)展
以連續(xù)的ip地址范圍指明連續(xù)的多地址匹配條件;
[!]--src-range from[-to]:源IP地址;
[!]--dst-range from[-to]:目標(biāo)IP地址;
string擴(kuò)展
對(duì)報(bào)文中的應(yīng)用層數(shù)據(jù)做字符串匹配檢測(cè);
[!]--string pattern:要檢測(cè)字符串模式;
[!]--hex-string pattern:要檢測(cè)的字符串模式,16進(jìn)制編碼;
--algo{bm|kmp}
time擴(kuò)展
根據(jù)報(bào)文到達(dá)的時(shí)間與指定的時(shí)間范圍進(jìn)行匹配度檢測(cè);
--datestartYYYY[-MM[-DD[Thh[:mm[:ss]]]]]:起始日期時(shí)間;
--datestopYYYY[-MM[-DD[Thh[:mm[:ss]]]]]:結(jié)束日期時(shí)間;
--timestarthh:mm[:ss] 開始時(shí)間
--timestop hh:mm[:ss] 結(jié)束時(shí)間
[!]--monthdays day[,day...] 開始日
[!]--weekdays day[,day...] 結(jié)束日
e.g.在周二,四,六的工作時(shí)間開放23號(hào)端口
~]#iptables -I INPUT -d 172.16.10.7 -p tcp --dport 23 -m time --timestart 09:00:00--timestop 18:00:00 --weekdays Tue,Thu,Sat -j ACCEPT
connlimit擴(kuò)展
根據(jù)每客戶端IP做并發(fā)連接數(shù)匹配;
--connlimit-upton:連接數(shù)數(shù)量小于等于n,此時(shí)應(yīng)該允許;
--connlimit-aboven:連接數(shù)數(shù)量大于n,此時(shí)應(yīng)該拒絕;
~]#iptables -A INPUT -d 172.16.100.67 -p tcp --dport 23 -m connlimit --connlimit-upto2 -j ACCEPT
limit擴(kuò)展
基于收發(fā)報(bào)文的速率進(jìn)行匹配;
--limitrate[/second|/minute|/hour|/day]:平均速率
--limit-burstnumber:峰值速率
state擴(kuò)展
state STATE
狀態(tài)檢測(cè);連接追蹤機(jī)制(conntrack);
INVALID:無法識(shí)別的狀態(tài);
ESTABLISHED:已建立的連接;
NEW:新連接;
RELATED:相關(guān)聯(lián)的連接;
UNTRACKED:未追蹤的連接;
狀態(tài)追蹤需要掛載nf_conntrack內(nèi)核模塊;
追蹤到的連接:/proc/net/nf_conntrack文件中
能追蹤的最大連接數(shù)量定義在:/proc/sys/net/nf_conntrack_max
此值可自行定義,建議必要時(shí)調(diào)整到足夠大;
不同的協(xié)議的連接追蹤的時(shí)長(zhǎng):/proc/sys/net/netfilter/
e.g.如何開放被模式的ftp服務(wù):
裝載追蹤ftp協(xié)議的模塊;
~]#modprobe nf_conntrack_ftp
放行命令連接
~]# iptables -A INPUT -d 172.16.100.67 -p tcp -m state --state ESTABLISHED -jACCEPT
~]# iptables -A INPUT -d 172.16.100.67 -p tcp --dport 21 -m state --state NEW -jACCEPT
放行數(shù)據(jù)連接
~]iptables -A INPUT -d 172.16.100.67 -p tcp -m state --state RELATED -j ACCEPT
在FORWARD鏈上定義時(shí)需要注意下列幾個(gè)問題:
(1)請(qǐng)求-響應(yīng)均經(jīng)由FORWARD鏈,要注意規(guī)則的方向性;
(2)如果可以啟用conntrack機(jī)制,建議將雙方向的狀態(tài)為ESTABLISHED的報(bào)文直接放行;
e.g.僅讓外部主機(jī)僅能訪問192.168.10.27主機(jī)的httpd服務(wù)以及ftpd服務(wù)
1)~]# iptables-A FORWARD 1 -d 192.168.10.27 -p tcp -m multiport --dports 21,80 -m state--state NEW -j ACCEPT
2)~]# iptables-A FORWARD 3 -d 192.168.10.27 -m state --state ESTABLISHED,RELATED -j ACCEPT
3)~]# iptables-A FORWARD -s 172.16.0.0/16 -d 192.168.10.27 -j DROP
4)~]# modprobenf_conntrack_ftp
自定義鏈:
iptables-N chain_name 添加一條自定義鏈
iptables-X chian_name 刪除自定義鏈(刪除前需要清空規(guī)則)
iptables-E old_name new_name 重命名自定義鏈
-j chain_name 引用指定的自定義鏈
通常自定義鏈最后需要添加一條RETURN已回到之前的主鏈
處理動(dòng)作
ACCEPT:接收
DROP:丟棄
REJECT:拒絕
REDIRECT:重定目標(biāo)端口,只能使用在nat表上,以及PREROUTING,OUTPUT鏈上面,其他地方要使用則必須引用
--to-portsport[-port]:映射至哪個(gè)目標(biāo)端口;
e.g. 將httpd服務(wù)的80端口映射至8088端口
~]#iptables -t nat -A PREROUTING -d 192.168.10.27 -p tcp --dport 80 -j REDIRECT--to-port 8088
SNAT:修改源地址,只能使用在nat表上,以及POSTROUTING,INPUT鏈上面,其他地方要使用則必須引用,如果IP地址為動(dòng)態(tài)引用則使用MASQUERADE
--to-source [ipaddr[-ipaddr]][:port[-port]]
~]#iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -j SNAT --to-source172.16.10.17
設(shè)置上述規(guī)則后,192.168.0.0網(wǎng)段的主機(jī)經(jīng)過該路由時(shí)IP地址都會(huì)被轉(zhuǎn)換為172.16.10.17,從而可以實(shí)現(xiàn)內(nèi)網(wǎng)對(duì)外網(wǎng)的各種服務(wù)的訪問
DNAT:修改源地址,只能使用在nat表上,以及PREROUTING,OUTPUT鏈上面,其他地方要使用則必須引用
--to-destination[ipaddr[-ipaddr]][:port[-port]]
~]#iptables -t nat -A PREROUTING -d 172.16.10.17 -p tcp --dport 80 -j DNAT--to-destination 192.168.10.27:8088
當(dāng)外部主機(jī)訪問172.16.10.17主機(jī)的tcp協(xié)議的80端口時(shí),會(huì)自動(dòng)轉(zhuǎn)至內(nèi)網(wǎng)中的192.168.10.27主機(jī)的8088端口
LOG:日志功能,日志保存在/var/log/messages中
--log-prefix:給日志添加前綴
--log-ip-options:日志中記錄IP首部的信息
e.g.將訪問172.16.10.7主機(jī)tcp協(xié)議80端口情況記錄日志
~]#iptables -A INPUT -d 172.16.10.7 -p tcp --dport 80 -j LOG --log-prefix "STRING"--log-ip-options
三.總結(jié)
添加規(guī)則之時(shí)需要考量的問題:
(1)報(bào)文的流經(jīng)路徑,判斷添加規(guī)則至哪個(gè)鏈上;
(2)確定要實(shí)現(xiàn)的功能,判斷添加規(guī)則至哪個(gè)表上;
(3)要指定的匹配條件,以用于匹配目標(biāo)報(bào)文;
添加規(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è)定,在每個(gè)表的最后添加一條拒絕或接受的默認(rèn)規(guī)則;
iptables–A INPUT –d 172.16.10.17 –j DROP
(b)默認(rèn)策略設(shè)定;
關(guān)于如何進(jìn)行iptables的使用就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
網(wǎng)站欄目:如何進(jìn)行iptables的使用
瀏覽路徑:http://jinyejixie.com/article34/iishse.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、網(wǎng)站策劃、定制網(wǎng)站、網(wǎng)頁(yè)設(shè)計(jì)公司、服務(wù)器托管、云服務(wù)器
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)