Linux-iptables命令
概述
Linux-iptables命令
Linux-SNAT和DNAT
netfilter/iptables(簡(jiǎn)稱(chēng)為iptables)組成Linux平臺(tái)下的包過(guò)濾防火墻,與大多數(shù)的Linux軟件一樣,這個(gè)包過(guò)濾防火墻是免費(fèi)的,它可以代替昂貴的商業(yè)防火墻解決方案,完成封包過(guò)濾、封包重定向和網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT)等功能。
規(guī)則(rules)其實(shí)就是網(wǎng)絡(luò)管理員預(yù)定義的條件,規(guī)則一般的定義為“如果數(shù)據(jù)包頭符合這樣的條件,就這樣處理這個(gè)數(shù)據(jù)包”。
規(guī)則存儲(chǔ)在內(nèi)核空間的信息包過(guò)濾表中,這些規(guī)則分別指定了源地址、目的地址、傳輸協(xié)議(如TCP、UDP、ICMP)和服務(wù)類(lèi)型(如HTTP、FTP和SMTP)等。
當(dāng)數(shù)據(jù)包與規(guī)則匹配時(shí),iptables就根據(jù)規(guī)則所定義的方法來(lái)處理這些數(shù)據(jù)包,如放行(accept)、拒絕(reject)和丟棄(drop)等。配置防火墻的主要工作就是添加、修改和刪除這些規(guī)則。
鏈(chains)是數(shù)據(jù)包傳播的路徑,每一條鏈其實(shí)就是眾多規(guī)則中的一個(gè)檢查清單,每一條鏈中可以有一條或數(shù)條規(guī)則。
當(dāng)一個(gè)數(shù)據(jù)包到達(dá)一個(gè)鏈時(shí),iptables就會(huì)從鏈中第一條規(guī)則開(kāi)始檢查,看該數(shù)據(jù)包是否滿(mǎn)足規(guī)則所定義的條件。
如果滿(mǎn)足,系統(tǒng)就會(huì)根據(jù)該條規(guī)則所定義的方法處理該數(shù)據(jù)包;否則iptables將繼續(xù)檢查下一條規(guī)則,如果該數(shù)據(jù)包不符合鏈中任一條規(guī)則,iptables就會(huì)根據(jù)該鏈預(yù)先定義的默認(rèn)策略來(lái)處理數(shù)據(jù)包。
語(yǔ)法
iptables(選項(xiàng))(參數(shù))選項(xiàng)
-t<表>:指定要操縱的表;
-A:向規(guī)則鏈中添加條目;
-D:從規(guī)則鏈中刪除條目;
-i:向規(guī)則鏈中插入條目;
-R:替換規(guī)則鏈中的條目;
-L:顯示規(guī)則鏈中已有的條目;
-F:清除規(guī)則鏈中已有的條目;
-Z:清空規(guī)則鏈中的數(shù)據(jù)包計(jì)算器和字節(jié)計(jì)數(shù)器;
-N:創(chuàng)建新的用戶(hù)自定義規(guī)則鏈;
-P:定義規(guī)則鏈中的默認(rèn)目標(biāo);
-h:顯示幫助信息;
-p:指定要匹配的數(shù)據(jù)包協(xié)議類(lèi)型;
-s:指定要匹配的數(shù)據(jù)包源ip地址;
-j<目標(biāo)>:指定要跳轉(zhuǎn)的目標(biāo);
-i<網(wǎng)絡(luò)接口>:指定數(shù)據(jù)包進(jìn)入本機(jī)的網(wǎng)絡(luò)接口;
-o<網(wǎng)絡(luò)接口>:指定數(shù)據(jù)包要離開(kāi)本機(jī)所使用的網(wǎng)絡(luò)接口。
iptables命令選項(xiàng)輸入順序
iptables -t 表名 <-A/I/D/R> 規(guī)則鏈名 [規(guī)則號(hào)] <-i/o 網(wǎng)卡名> -p 協(xié)議名 <-s 源IP/源子網(wǎng)> --sport 源端口 <-d 目標(biāo)IP/目標(biāo)子網(wǎng)> --dport 目標(biāo)端口 -j 動(dòng)作四張表
raw:高級(jí)功能,如:網(wǎng)址過(guò)濾。
mangle:數(shù)據(jù)包修改(QOS),用于實(shí)現(xiàn)服務(wù)質(zhì)量。
nat:地址轉(zhuǎn)換,用于網(wǎng)關(guān)路由器。
filter:包過(guò)濾,用于防火墻規(guī)則。
我們現(xiàn)在用的比較多個(gè)功能有3個(gè):
1.filter 定義允許或者不允許的
2.nat 定義地址轉(zhuǎn)換的
3.mangle功能:修改報(bào)文原數(shù)據(jù)
五條鏈
INPUT鏈:處理輸入數(shù)據(jù)包。
OUTPUT鏈:處理輸出數(shù)據(jù)包。
PORWARD鏈:處理轉(zhuǎn)發(fā)數(shù)據(jù)包。
PREROUTING鏈:用于目標(biāo)地址轉(zhuǎn)換(DNAT)。
POSTOUTING鏈:用于源地址轉(zhuǎn)換(SNAT)。
這是NetFilter規(guī)定的五個(gè)規(guī)則鏈,任何一個(gè)數(shù)據(jù)包,只要經(jīng)過(guò)本機(jī),必將經(jīng)過(guò)這五個(gè)鏈中的其中一個(gè)鏈。
- 對(duì)于filter來(lái)講一般只能做在3個(gè)鏈上:INPUT ,FORWARD ,OUTPUT
- 對(duì)于nat來(lái)講一般也只能做在3個(gè)鏈上:PREROUTING ,OUTPUT ,POSTROUTING
- 而mangle則是5個(gè)鏈都可以做:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
動(dòng)作
accept:接收數(shù)據(jù)包。
DROP:丟棄數(shù)據(jù)包。
REDIRECT:重定向、映射、透明代理。 與DROP基本一樣,區(qū)別在于它除了阻塞包之外, 還向發(fā)送者返回錯(cuò)誤信息。
SNAT:源地址轉(zhuǎn)換,即改變數(shù)據(jù)包的源地址
DNAT:目標(biāo)地址轉(zhuǎn)換,即改變數(shù)據(jù)包的目的地址
MASQUERADE:IP偽裝(NAT),用于ADSL。即是常說(shuō)的NAT技術(shù),MASQUERADE只能用于ADSL等撥號(hào)上網(wǎng)的IP偽裝,也就是主機(jī)的IP是由ISP分配動(dòng)態(tài)的;如果主機(jī)的IP地址是靜態(tài)固定的,就要使用SNAT
LOG:日志記錄,將符合規(guī)則的數(shù)據(jù)包的相關(guān)信息記錄在日志中,以便管理員的分析和排錯(cuò)
iptables命令格式
iptables過(guò)濾條件
iptables傳輸數(shù)據(jù)包的過(guò)程
① 當(dāng)一個(gè)數(shù)據(jù)包進(jìn)入網(wǎng)卡時(shí),它首先進(jìn)入PREROUTING鏈,內(nèi)核根據(jù)數(shù)據(jù)包目的IP判斷是否需要轉(zhuǎn)送出去。
② 如果數(shù)據(jù)包就是進(jìn)入本機(jī)的,它就會(huì)沿著圖向下移動(dòng),到達(dá)INPUT鏈。數(shù)據(jù)包到了INPUT鏈后,任何進(jìn)程都會(huì)收到它。本機(jī)上運(yùn)行的程序可以發(fā)送數(shù)據(jù)包,這些數(shù)據(jù)包會(huì)經(jīng)過(guò)OUTPUT鏈,然后到達(dá)POSTROUTING鏈輸出。
③ 如果數(shù)據(jù)包是要轉(zhuǎn)發(fā)出去的,且內(nèi)核允許轉(zhuǎn)發(fā),數(shù)據(jù)包就會(huì)如圖所示向右移動(dòng),經(jīng)過(guò)FORWARD鏈,然后到達(dá)POSTROUTING鏈輸出。
實(shí)例
清除已有iptables規(guī)則
iptables -F iptables -X iptables -Z開(kāi)放指定的端口
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT #允許本地回環(huán)接口(即運(yùn)行本機(jī)訪問(wèn)本機(jī)) iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #允許已建立的或相關(guān)連的通行 iptables -A OUTPUT -j ACCEPT #允許所有本機(jī)向外的訪問(wèn) iptables -A INPUT -p tcp --dport 22 -j ACCEPT #允許訪問(wèn)22端口 iptables -A INPUT -p tcp --dport 80 -j ACCEPT #允許訪問(wèn)80端口 iptables -A INPUT -p tcp --dport 21 -j ACCEPT #允許ftp服務(wù)的21端口 iptables -A INPUT -p tcp --dport 20 -j ACCEPT #允許FTP服務(wù)的20端口 iptables -A INPUT -j reject #禁止其他未允許的規(guī)則訪問(wèn) iptables -A FORWARD -j REJECT #禁止其他未允許的規(guī)則訪問(wèn)屏蔽IP
iptables -I INPUT -s 123.45.6.7 -j DROP #屏蔽單個(gè)IP的命令 iptables -I INPUT -s 123.0.0.0/8 -j DROP #封整個(gè)段即從123.0.0.1到123.255.255.254的命令 iptables -I INPUT -s 124.45.0.0/16 -j DROP #封IP段即從123.45.0.1到123.45.255.254的命令 iptables -I INPUT -s 123.45.6.0/24 -j DROP #封IP段即從123.45.6.1到123.45.6.254的命令項(xiàng)目實(shí)操
使用xshell或者secucreCRT等外部訪問(wèn) 10.45.7.198的2121端口,實(shí)際是訪問(wèn)容器192.168.123.221的22端口,可簡(jiǎn)單的理解為從外訪問(wèn)里。
iptables -t nat -A PREROUTING -p tcp -d 10.45.7.198 --dport 2121-j DNAT --to-destination 192.168.123.221:22容器的地址為172.25.243.103, 和 10.45.7.198的地址不通,但是172.25.243.103和10.45.7.197是通的,10.45.7.197和10.45.7.198是通的, 所以如果172.25.243.103想訪問(wèn)10.45.7.198可以加以下規(guī)則,可簡(jiǎn)單的理解為從里面訪問(wèn)外面
iptables -t nat -A POSTROUTING -s 172.25.243.103 -o eth0 -j SNAT --to 10.45.7.197刪除的話(huà),將A換成D 即可,其余保持不變。
查看已添加的iptables規(guī)則
iptables -L -n -v這好像查不到我在nat表增加的規(guī)則呢…..坑逼
iptables -t nat -nLiptables -L命令還可以查看nat表和mangle表的內(nèi)容哦
iptables -L -t nat cat /proc/net/ip_conntrack | less iptables -F -t nat (清除NAT表) iptables --list 查看過(guò)濾表 (沒(méi)查到nat表中的...)刪除已添加的iptables規(guī)則
將所有iptables以序號(hào)標(biāo)記顯示,執(zhí)行:
iptables -L -n --line-numbers比如要?jiǎng)h除INPUT里序號(hào)為8的規(guī)則,執(zhí)行:
iptables -D INPUT 8查看 nat表的規(guī)則
[root@entel1 ~]# iptables -t nat -L -n --line-numbers Chain PREROUTING (policy ACCEPT) num target prot opt source destination 1 DNAT tcp -- 0.0.0.0/0 10.45.7.197 tcp dpt:22013 to:172.25.243.13:22 2 DNAT tcp -- 0.0.0.0/0 10.45.7.197 tcp dpt:22023 to:172.25.243.23:22 3 DNAT tcp -- 0.0.0.0/0 10.45.7.197 tcp dpt:22033 to:172.25.243.33:22 4 DNAT tcp -- 0.0.0.0/0 10.45.7.197 tcp dpt:22043 to:172.25.243.43:22 ...........Chain INPUT (policy ACCEPT) num target prot opt source destination Chain OUTPUT (policy ACCEPT) num target prot opt source destination Chain POSTROUTING (policy ACCEPT) num target prot opt source destination Chain DOCKER (0 references) num target prot opt source destination詳細(xì)介紹請(qǐng)看:
http://www.linuxso.com/linuxpeixun/10332.html
總結(jié)
以上是生活随笔為你收集整理的Linux-iptables命令的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Linux-locate/slocate
- 下一篇: Linux-SNAT和DNAT