技術(shù)頻道導(dǎo)航
HTML/CSS
.NET技術(shù)
IIS技術(shù)
PHP技術(shù)
Js/JQuery
Photoshop
Fireworks
服務(wù)器技術(shù)
操作系統(tǒng)
網(wǎng)站運(yùn)營(yíng)

贊助商

分類(lèi)目錄

贊助商

最新文章

搜索

【查看/添加/刪除】Linux IPTABLES filter表防火墻規(guī)則的方法

作者:admin    時(shí)間:2019-3-5 13:33:15    瀏覽:

本文詳細(xì)介紹Linux IPTABLES filter表防火墻規(guī)則的查看、添加及刪除的方法,配置Linux服務(wù)器時(shí)常常用到。

查看本機(jī)關(guān)于IPTABLES的設(shè)置情況

[root@tp ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain RH-Firewall-1-INPUT (0 references)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 255
ACCEPT esp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT ah -- 0.0.0.0/0 0.0.0.0/0
ACCEPT udp -- 0.0.0.0/0 224.0.0.251 udp dpt:5353
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:631
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:80
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:25
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

可以看出我在安裝linux時(shí),選擇了有防火墻,并且開(kāi)放了22,80,25端口。如果你在安裝linux時(shí)沒(méi)有選擇啟動(dòng)防火墻,是這樣的:

[root@tp ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination

什么規(guī)則都沒(méi)有。

iptables語(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)建新的用戶自定義規(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ì)量。
  • net:地址轉(zhuǎn)換,用于網(wǎng)關(guān)路由器。
  • filter:包過(guò)濾,用于防火墻規(guī)則。

規(guī)則鏈名包括:

  • INPUT鏈:處理輸入數(shù)據(jù)包。
  • OUTPUT鏈:處理輸出數(shù)據(jù)包。
  • PORWARD鏈:處理轉(zhuǎn)發(fā)數(shù)據(jù)包。
  • PREROUTING鏈:用于目標(biāo)地址轉(zhuǎn)換(DNAT)。
  • POSTOUTING鏈:用于源地址轉(zhuǎn)換(SNAT)。

動(dòng)作包括:

  • accept:接收數(shù)據(jù)包。
  • DROP:丟棄數(shù)據(jù)包。
  • REDIRECT:重定向、映射、透明代理。
  • SNAT:源地址轉(zhuǎn)換。
  • DNAT:目標(biāo)地址轉(zhuǎn)換。
  • MASQUERADE:IP偽裝(NAT),用于ADSL。
  • LOG:日志記錄。

清除iptables原有規(guī)則

不管你在安裝linux時(shí)是否啟動(dòng)了防火墻,如果你想配置屬于自己的防火墻,那就清除現(xiàn)在filter的所有規(guī)則。

[root@tp ~]# iptables -F (清除預(yù)設(shè)表filter中的所有規(guī)則鏈的規(guī)則)
[root@tp ~]# iptables -X (清除預(yù)設(shè)表filter中使用者自定鏈中的規(guī)則)

我們?cè)賮?lái)看一下:

[root@tp ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination

什么都沒(méi)有了吧,和我們?cè)诎惭blinux時(shí)沒(méi)有啟動(dòng)防火墻是一樣的。(注意:這些配置就像用命令配置IP一樣,重啟就會(huì)失去作用,怎么保存?

[root@tp ~]# /etc/rc.d/init.d/iptables save

這樣就可以寫(xiě)到/etc/sysconfig/iptables文件里了,寫(xiě)入后還要把防火墻重啟一下,才能起作用。

[root@tp ~]# service iptables restart

iptables常用命令

service iptables start #啟動(dòng)
service iptables restart #重啟
service iptables save #保存
service iptables stop #停止
service iptables status #查詢狀態(tài)

現(xiàn)在IPTABLES配置表里什么配置都沒(méi)有了,那我們開(kāi)始我們的配置吧。

設(shè)定預(yù)設(shè)規(guī)則

[root@tp ~]# iptables -p INPUT DROP
[root@tp ~]# iptables -p OUTPUT ACCEPT
[root@tp ~]# iptables -p FORWARD DROP

上面的意思是,不符合(INPUT、FORWARD)這兩個(gè)規(guī)則里的數(shù)據(jù)包就作DROP(放棄)處理,這是控制流入數(shù)據(jù)包的安全配置。而不符合(OUTPUT)這條規(guī)則的數(shù)據(jù)包就作ACCEPT(通過(guò))處理,這是控制流出數(shù)據(jù)包的安全配置。

可以看出INPUT,F(xiàn)ORWARD兩個(gè)鏈采用的是允許什么包通過(guò),而OUTPUT鏈采用的是不允許什么包通過(guò)。這樣設(shè)置還是挺合理的,當(dāng)然你也可以三個(gè)鏈都DROP,但這樣做我認(rèn)為是沒(méi)有必要的,而且要寫(xiě)的規(guī)則就會(huì)增加,但如果你只想要有限的幾個(gè)規(guī)則時(shí),如只做WEB服務(wù)器,還是推薦三個(gè)鏈都是DROP。

特別注意:如果你是遠(yuǎn)程SSH登陸來(lái)操作的話,當(dāng)你輸入上述第一個(gè)命令iptables -p INPUT DROP,回車(chē)的時(shí)候就會(huì)自動(dòng)退出遠(yuǎn)程,因?yàn)槟氵€沒(méi)有設(shè)置任何規(guī)則。所以務(wù)必先別設(shè)定預(yù)設(shè)規(guī)則,要添加完規(guī)則之后,再去設(shè)定預(yù)設(shè)規(guī)則。一旦被迫退出遠(yuǎn)程怎么辦?如果是云主機(jī),一般可以在管理后臺(tái)通過(guò)VNC登錄到服務(wù)器。不行的話,唯有聯(lián)系服務(wù)商處理了。

添加iptables規(guī)則

首先添加INPUT鏈,INPUT鏈的默認(rèn)規(guī)則是DROP,所以我們就寫(xiě)需要ACCETP(通過(guò))的鏈。

為了能采用遠(yuǎn)程SSH登陸,我們要開(kāi)啟22端口。

[root@tp ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT

注意:如果你把預(yù)設(shè)規(guī)則OUTPUT設(shè)置成DROP的話iptables -p OUTPUT DROP,就要寫(xiě)上下面這條規(guī)則(好多人因?yàn)闆](méi)有寫(xiě)這一條規(guī)則,導(dǎo)致始終無(wú)法SSH):

[root@tp ~]# iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT

其他的端口也一樣,如果開(kāi)啟了web服務(wù)器,OUTPUT設(shè)置成DROP的話,同樣也要添加一條規(guī)則:

[root@tp ~]# iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT

如果做了WEB服務(wù)器,開(kāi)啟80端口:

[root@tp ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT

如果做了郵件服務(wù)器,開(kāi)啟25、110端口:

[root@tp ~]# iptables -A INPUT -p tcp --dport 110 -j ACCEPT
[root@tp ~]# iptables -A INPUT -p tcp --dport 25 -j ACCEPT

如果做了FTP服務(wù)器,開(kāi)啟20、21端口:

[root@tp ~]# iptables -A INPUT -p tcp --dport 21 -j ACCEPT
[root@tp ~]# iptables -A INPUT -p tcp --dport 20 -j ACCEPT

如果做了DNS服務(wù)器,開(kāi)啟53端口:

[root@tp ~]# iptables -A INPUT -p tcp --dport 53 -j ACCEPT

如果你還做了其他的服務(wù)器,需要開(kāi)啟哪個(gè)端口,照寫(xiě)就行了。

上面主要寫(xiě)的都是INPUT規(guī)則,凡是不在上面的規(guī)則里的,都作DROP(不通過(guò))處理。

允許icmp包通過(guò),也就是允許ping:

[root@tp ~]# iptables -A OUTPUT -p icmp -j ACCEPT (OUTPUT設(shè)置成DROP的話)
[root@tp ~]# iptables -A INPUT -p icmp -j ACCEPT (INPUT設(shè)置成DROP的話)

允許loopback!(不然會(huì)導(dǎo)致DNS無(wú)法正常關(guān)閉等問(wèn)題):

IPTABLES -A INPUT -i lo -p all -j ACCEPT (如果是INPUT DROP)
IPTABLES -A OUTPUT -o lo -p all -j ACCEPT(如果是OUTPUT DROP)

下面寫(xiě)OUTPUT鏈,OUTPUT鏈默認(rèn)規(guī)則是ACCEPT,所以我們就寫(xiě)需要DROP(放棄)的鏈。

減少不安全的端口連:

[root@tp ~]# iptables -A OUTPUT -p tcp --sport 31337 -j DROP
[root@tp ~]# iptables -A OUTPUT -p tcp --dport 31337 -j DROP

有些木馬會(huì)掃描端口31337到31340(即黑客語(yǔ)言中的 elite 端口)上的服務(wù)。既然合法服務(wù)都不使用這些非標(biāo)準(zhǔn)端口來(lái)通信,阻塞這些端口能夠有效地減少你的網(wǎng)絡(luò)上可能被感染的機(jī)器和它們的遠(yuǎn)程主服務(wù)器進(jìn)行獨(dú)立通信的機(jī)會(huì)。

還有其他端口也一樣,像31335、27444、27665、20034 NetBus、9704、137-139(smb)、2049(NFS)端口也應(yīng)被禁止,我在這寫(xiě)的也不全,有興趣的朋友應(yīng)該去查一下相關(guān)資料。

當(dāng)然出于更安全的考慮你也可以把OUTPUT鏈設(shè)置成DROP,那你添加的規(guī)則就多一些,就像上邊添加允許SSH登陸一樣,照著寫(xiě)就行了。

x
  • 站長(zhǎng)推薦
/* 左側(cè)顯示文章內(nèi)容目錄 */