Iptable Study
最近經(jīng)常碰到iptables的問題。現(xiàn)在找個時間專門研究一下冗茸。
iptables是什么
iptables是Linux內(nèi)核默認(rèn)的防火墻。防火墻糕珊,其實(shí)說白了講歹颓,就是用于實(shí)現(xiàn)Linux下訪問控制的功能的怜浅,它分為硬件的或者軟件的防火墻兩種袁波。無論是在哪個網(wǎng)絡(luò)中人断,防火墻工作的地方一定是在網(wǎng)絡(luò)的邊緣耻蛇。而我們的任務(wù)就是需要去定義到底防火墻如何工作踪蹬,這就是防火墻的策略胞此,規(guī)則,以達(dá)到讓它對出入網(wǎng)絡(luò)的IP跃捣、數(shù)據(jù)進(jìn)行檢測漱牵。
對于TCP/IP的七層模型來講,我們知道第三層是網(wǎng)絡(luò)層疚漆,三層的防火墻會在這層對源地址和目標(biāo)地址進(jìn)行檢測酣胀。
iptables的前身叫ipfirewall (內(nèi)核1.x時代),這是一個作者從freeBSD上移植過來的,能夠工作在內(nèi)核當(dāng)中的娶聘,對數(shù)據(jù)包進(jìn)行檢測的一款簡易訪問控制工具闻镶。但是ipfirewall工作功能極其有限。當(dāng)內(nèi)核發(fā)展到2.x系列的時候丸升,軟件更名為ipchains铆农,它可以定義多條規(guī)則,將他們串起來狡耻,共同發(fā)揮作用顿涣,而現(xiàn)在,它叫做iptables酝豪,可以將規(guī)則組成一個列表,實(shí)現(xiàn)絕對詳細(xì)的訪問控制功能精堕。
iptables在內(nèi)核空間中的五個位置發(fā)生作用:
1.內(nèi)核空間中:從一個網(wǎng)絡(luò)接口進(jìn)來孵淘,到另一個網(wǎng)絡(luò)接口去的
2.數(shù)據(jù)包從內(nèi)核流入用戶空間的
3.數(shù)據(jù)包從用戶空間流出的
4.進(jìn)入/離開本機(jī)的外網(wǎng)接口
5.進(jìn)入/離開本機(jī)的內(nèi)網(wǎng)接口
這五個位置也被稱為五個鉤子函數(shù)(hook functions),也叫五個規(guī)則鏈。
1.PREROUTING (路由前)
2.INPUT (數(shù)據(jù)包流入口)
3.FORWARD (轉(zhuǎn)發(fā)管卡)
4.OUTPUT(數(shù)據(jù)包出口)
5.POSTROUTING(路由后)
防火墻策略
防火墻策略一般分為兩種歹篓,一種叫“通”策略瘫证,一種叫“堵”策略,通策略庄撮,默認(rèn)門是關(guān)著的背捌,必須要定義誰能進(jìn)。堵策略則是洞斯,大門是洞開的毡庆,但是你必須有身份認(rèn)證,否則不能進(jìn)烙如。所以我們要定義么抗,讓進(jìn)來的進(jìn)來,讓出去的出去亚铁,所以通蝇刀,是要全通,而堵徘溢,則是要選擇吞琐。
當(dāng)我們定義的策略的時候捆探,要分別定義多條功能,其中:定義數(shù)據(jù)包中允許或者不允許的策略站粟,filter過濾的功能黍图,而定義地址轉(zhuǎn)換的功能的則是nat選項(xiàng)。為了讓這些功能交替工作卒蘸,我們制定出了“表”這個定義雌隅,來定義、區(qū)分各種不同的工作功能和處理方式缸沃。
我們現(xiàn)在用的比較多個功能有3個:
1.filter:定義允許或者不允許的
2.nat:定義地址轉(zhuǎn)換
3.mangle:修改報(bào)文原數(shù)據(jù)
對于filter來講一般只能做在3個鏈上:INPUT 恰起,F(xiàn)ORWARD ,OUTPUT
對于nat來講一般也只能做在3個鏈上:PREROUTING 趾牧,OUTPUT 检盼,POSTROUTING
mangle是5個鏈都可以做:PREROUTING,INPUT翘单,F(xiàn)ORWARD吨枉,OUTPUT,POSTROUTING
規(guī)則的次序非常關(guān)鍵哄芜,誰的規(guī)則越嚴(yán)格貌亭,應(yīng)該放的越靠前,而檢查規(guī)則的時候认臊,是按照從上往下的方式進(jìn)行檢查的圃庭。
iptables定義規(guī)則的方式比較復(fù)雜:
格式:iptables [-t table] COMMAND chain CRETIRIA -j ACTION
-t table :filter nat mangle
COMMAND:定義如何對規(guī)則進(jìn)行管理
chain:指定你接下來的規(guī)則到底是在哪個鏈上操作的
CRETIRIA:指定匹配標(biāo)準(zhǔn)
-j ACTION :指定如何進(jìn)行處理
比如說,我定義一條規(guī)則:不允許172.16.0.0/24的進(jìn)行訪問失晴。
iptables -t filter -A INPUT -s 172.16.0.0/16 -p udp --dport 53 -j DROP
如果想拒絕的更徹底:
iptables -t filter -R INPUT 1 -s 172.16.0.0/16 -p udp --dport 53 -j REJECT
查看當(dāng)前已定義的規(guī)則:
iptables -L -n -v
iptables命令詳解
當(dāng)然可以通過man iptables
來查看詳細(xì)的解釋剧腻。常用的命令選項(xiàng)有:
-P:設(shè)置默認(rèn)策略的(設(shè)定默認(rèn)門是關(guān)著的還是開著的)如:iptables -P INPUT (DROP|ACCEPT)
-F: FLASH,清空規(guī)則鏈的(注意每個鏈的管理權(quán)限)
-N:NEW 支持用戶新建一個鏈,比如:iptables -N inbound_tcp_web 表示附在tcp表上用于檢查web的涂屁。
-X:用于刪除用戶自定義的空鏈
-Z:清空鏈
-A:追加
-I num : 插入书在,把當(dāng)前規(guī)則插入為第幾條
-R num:Replays替換/修改第幾條規(guī)則
-D num:刪除,明確指定刪除第幾條規(guī)則
-L:查看規(guī)則詳細(xì)信息拆又,比如"iptables -L -n -v"
iptables實(shí)例
禁止客戶機(jī)訪問不健康網(wǎng)站
【例1】添加iptables規(guī)則禁止用戶訪問域名為www.sexy.com的網(wǎng)站儒旬。
iptables -I FORWARD -d www.sexy.com -j DROP
【例2】添加iptables規(guī)則禁止用戶訪問IP地址為20.20.20.20的網(wǎng)站。
iptables -I FORWARD -d 20.20.20.20 -j DROP
禁止某些客戶機(jī)上網(wǎng)
【例1】添加iptables規(guī)則禁止IP地址為192.168.1.X的客戶機(jī)上網(wǎng)帖族。
iptables -I FORWARD -s 192.168.1.X -j DROP
【例2】添加iptables規(guī)則禁止192.168.1.0子網(wǎng)里所有的客戶機(jī)上網(wǎng)义矛。
iptables -I FORWARD -s 192.168.1.0/24 -j DROP
禁止客戶機(jī)訪問某些服務(wù)
【例1】禁止192.168.1.0子網(wǎng)里所有的客戶機(jī)使用FTP協(xié)議下載。
iptables -I FORWARD -s 192.168.1.0/24 -p tcp –dport 21 -j DROP
【例2】禁止192.168.1.0子網(wǎng)里所有的客戶機(jī)使用Telnet協(xié)議連接遠(yuǎn)程計(jì)算機(jī)盟萨。
iptables -I FORWARD -s 192.168.1.0/24 -p tcp –dport 23 -j DROP
強(qiáng)制訪問指定的站點(diǎn)
【例】強(qiáng)制所有的客戶機(jī)訪問192.168.1.x這臺Web服務(wù)器凉翻。
iptables -t nat -I PREROUTING -i eth0 -p tcp –dport 80 -j DNAT –to-destination 192.168.1.x:80
禁止使用ICMP協(xié)議
【例】禁止Internet上的計(jì)算機(jī)通過ICMP協(xié)議ping到NAT服務(wù)器的ppp0接口,但允許內(nèi)網(wǎng)的客戶機(jī)通過ICMP協(xié)議ping的計(jì)算機(jī)捻激。
iptables -I INPUT -i ppp0 -p icmp -j DROP
發(fā)布內(nèi)部網(wǎng)絡(luò)服務(wù)器
【例1】發(fā)布內(nèi)網(wǎng)10.0.0.3主機(jī)的Web服務(wù)制轰,Internet用戶通過訪問防火墻的IP地址即可訪問該主機(jī)的Web服務(wù)前计。
iptables -t nat -I PREROUTING -p tcp –dport 80 -j DNAT –to-destination 10.0.0.3:80
【例2】發(fā)布內(nèi)網(wǎng)10.0.0.3主機(jī)的終端服務(wù)(使用的是TCP協(xié)議的3389端口),Internet用戶通過訪問防火墻的IP地址訪問該機(jī)的終端服務(wù)垃杖。
iptables -t nat -I PREROUTING -p tcp –dport 3389 -j DNAT –to-destination 10.0.0.3:3389
參考文獻(xiàn):
http://blog.chinaunix.net/uid-26495963-id-3279216.html
http://www.linuxso.com/linuxpeixun/10332.html