iptables 禁止端口和開放端口

iptables禁止端口和開放端口

1、關閉所有的INPUTFORWARDOUTPUT只對某些端口開放。
下面是命令實現:

iptables-PINPUTDROP
iptables-PFORWARDDROP
iptables-POUTPUTDROP

再用命令iptables-L-n查看是否設置好,好看到全部DROP了
這樣的設置好了,我們只是臨時的,重啓服務器還是會恢復原來沒有設置的狀態
還要使用serviceiptablessave進行保存
看到信息firewallrules防火牆的規則其實就是保存在/etc/sysconfig/iptables
可以打開文件查看vi/etc/sysconfig/iptables
2、
下面我只打開22端口,看我是如何操作的,就是下面2個語句

iptables-AINPUT-ptcp--dport22-jACCEPT
iptables-AOUTPUT-ptcp--sport22-jACCEPT

再查看下iptables-L-n是否添加上去,看到添加了

ChainINPUT(policyDROP)
targetprotoptsourcedestination
ACCEPTtcp--0.0.0.0/00.0.0.0/0tcpdpt:22

ChainFORWARD(policyDROP)
targetprotoptsourcedestination

ChainOUTPUT(policyDROP)
targetprotoptsourcedestination
ACCEPTtcp--0.0.0.0/00.0.0.0/0tcpspt:22

現在Linux服務器只打開了22端口,用putty.exe測試一下是否可以鏈接上去。
可以鏈接上去了,說明沒有問題。

最後別忘記了保存對防火牆的設置
通過命令:serviceiptablessave進行保存

iptables-AINPUT-ptcp--dport22-jACCEPT
iptables-AOUTPUT-ptcp--sport22-jACCEPT
針對這2條命令進行一些講解吧
-A參數就看成是添加一條INPUT的規則
-p指定是什麼協議我們常用的tcp協議,當然也有udp例如53端口的DNS
到時我們要配置DNS用到53端口大家就會發現使用udp協議的

而--dport就是目標端口當數據從外部進入服務器爲目標端口
反之數據從服務器出去則爲數據源端口使用--sport

-j就是指定是ACCEPT接收或者DROP不接收
3、禁止某個IP訪問
1臺Linux服務器,2臺windowsxp操作系統進行訪問
Linux服務器ip192.168.1.99
xp1ip:192.168.1.2
xp2ip:192.168.1.8

下面看看我2臺xp都可以訪問的

192.168.1.2這是xp1可以訪問的,
192.168.1.8xp2也是可以正常訪問的。

那麼現在我要禁止192.168.1.2xp1訪問,xp2正常訪問,
下面看看演示

通過命令iptables-AINPUT-ptcp-s192.168.1.2-jDROP
這裏意思就是-A就是添加新的規則,怎樣的規則呢?由於我們訪問網站使用tcp的,
我們就用-ptcp,如果是udp就寫udp,這裏就用tcp了,-s就是來源的意思,
ip來源於192.168.1.2,-j怎麼做我們拒絕它這裏應該是DROP

好,看看效果。好添加成功。下面進行驗證一下是否生效

一直出現等待狀態最後該頁無法顯示,這是192.168.1.2xp1的訪問被拒絕了。

再看看另外一臺xp是否可以訪問,是可以正常訪問的192.168.1.8是可以正常訪問的
4、如何刪除規則
首先我們要知道這條規則的編號,每條規則都有一個編號

通過iptables-L-n--line-number可以顯示規則和相對應的編號
numtargetprotoptsourcedestination
1DROPtcp--0.0.0.0/00.0.0.0/0tcpdpt:3306
2DROPtcp--0.0.0.0/00.0.0.0/0tcpdpt:21
3DROPtcp--0.0.0.0/00.0.0.0/0tcpdpt:80
多了num這一列,這樣我們就可以看到剛纔的規則對應的是編號2

那麼我們就可以進行刪除了
iptables-DINPUT2
刪除INPUT鏈編號爲2的規則。

再iptables-L-n查看一下已經被清除了。
5、過濾無效的數據包
假設有人進入了服務器,或者有病毒***程序,它可以通過22,80端口像服務器外傳送數據。
它的這種方式就和我們正常訪問22,80端口區別。它發向外發的數據不是我們通過訪問網頁請求
而回應的數據包。

下面我們要禁止這些沒有通過請求迴應的數據包,統統把它們堵住掉。

iptables提供了一個參數是檢查狀態的,下面我們來配置下22和80端口,防止無效的數據包。

iptables-AOUTPUT-ptcp--sport22-mstate--stateESTABLISHED-jACCEPT

可以看到和我們以前使用的:
iptables-AOUTPUT-ptcp--sport22-jACCEPT
多了一個狀態判斷。

同樣80端口也一樣,現在刪掉原來的2條規則,
iptables-L-n--line-number這個是查看規則而且帶上編號。我們看到編號就可以
刪除對應的規則了。

iptables-DOUTPUT1這裏的1表示第一條規則。

當你刪除了前面的規則,編號也會隨之改變。看到了吧。

好,我們刪除了前面2個規則,22端口還可以正常使用,說明沒問題了

下面進行保存,別忘記了,不然的話重啓就會還原到原來的樣子。

serviceiptablessave進行保存。

Savingfirewallrulesto/etc/sysconfig/iptables:[OK]
其實就是把剛纔設置的規則寫入到/etc/sysconfig/iptables文件中。
6、DNS端口53設置
下面我們來看看如何設置iptables來打開DNS端口,DNS端口對應的是53

大家看到我現在的情況了吧,只開放22和80端口,我現在看看能不能解析域名。

hostwww.google.com輸入這個命令後,一直等待,說明DNS不通

出現下面提示:
;;connectiontimedout;noserverscouldbereached

ping一下域名也是不通
[root@localhost~pingwww.google.com
ping:unknownhostwww.google.com

我這裏的原因就是iptables限制了53端口。

有些服務器,特別是Web服務器減慢,DNS其實也有關係的,無法發送包到DNS服務器導致的。

下面演示下如何使用iptables來設置DNS53這個端口,如果你不知道域名服務端口號,你

可以用命令:grepdomain/etc/services

[root@localhost~grepdomain/etc/services
domain53/tcp#name-domainserver
domain53/udp
domaintime9909/tcp#domaintime
domaintime9909/udp#domaintime

看到了吧,我們一般使用udp協議。

好了,開始設置。。。

iptables-AOUTPUT-pudp--dport53-jACCEPT
這是我們ping一個域名,數據就是從本機出去,所以我們先設置OUTPUT,
我們按照ping這個流程來設置。

然後DNS服務器收到我們發出去的包,就回應一個回來
iptables-AINPUT-pudp--sport53-jACCEPT

同時還要設置
iptables-AINPUT-pudp--dport53-jACCEPT
iptables-AOUTPUT-pudp--sport53-jACCEPT

好了,下面開始測試下,可以用iptables-L-n查看設置情況,確定沒有問題就可以測試了

[root@localhost~iptables-L-n
ChainINPUT(policyDROP)
targetprotoptsourcedestination
ACCEPTtcp--0.0.0.0/00.0.0.0/0tcpdpt:22
ACCEPTtcp--0.0.0.0/00.0.0.0/0tcpdpt:80
ACCEPTudp--0.0.0.0/00.0.0.0/0udpspt:53
ACCEPTudp--0.0.0.0/00.0.0.0/0udpdpt:53

ChainFORWARD(policyDROP)
targetprotoptsourcedestination

ChainOUTPUT(policyDROP)
targetprotoptsourcedestination
ACCEPTtcp--0.0.0.0/00.0.0.0/0tcpspt:22stateESTABLISHED
ACCEPTtcp--0.0.0.0/00.0.0.0/0tcpspt:80stateESTABLISHED
ACCEPTudp--0.0.0.0/00.0.0.0/0udpdpt:53
ACCEPTudp--0.0.0.0/00.0.0.0/0udpspt:53

可以測試一下是否DNS可以通過iptables了。

[root@localhost~hostwww.google.com
www.google.comisanaliasforwww.l.google.com.
www.l.google.comisanaliasforwww-china.l.google.com.
www-china.l.google.comhasaddress64.233.189.104
www-china.l.google.comhasaddress64.233.189.147
www-china.l.google.comhasaddress64.233.189.99

正常可以解析google域名。

ping方面可能還要設置些東西。

用nslookup看看吧

[root@localhost~nslookup
>www.google.com
Server:192.168.1.1
Address:192.168.1.1#53

Non-authoritativeanswer:
www.google.comcanonicalname=www.l.google.com.
www.l.google.comcanonicalname=www-china.l.google.com.
Name:www-china.l.google.com
Address:64.233.189.147
Name:www-china.l.google.com
Address:64.233.189.99
Name:www-china.l.google.com
Address:64.233.189.104

說明本機DNS正常,iptables允許53這個端口的訪問。
7、iptables對ftp的設置
現在我開始對ftp端口的設置,按照我們以前的視頻,添加需要開放的端口
ftp連接端口有2個21和20端口,我現在添加對應的規則。

[root@localhostrootiptables-AINPUT-ptcp--dport21-jACCEPT
[root@localhostrootiptables-AINPUT-ptcp--dport20-jACCEPT
[root@localhostrootiptables-AOUTPUT-ptcp--sport21-jACCEPT
[root@localhostrootiptables-AOUTPUT-ptcp--sport20-jACCEPT

好,這樣就添加完了,我們用瀏覽器訪問一下ftp,出現超時。

所以我剛纔說ftp是比較特殊的端口,它還有一些端口是數據傳輸端口,
例如目錄列表,上傳,下載文件都要用到這些端口。

而這些端口是任意端口。。。這個任意真的比較特殊。

如果不指定什麼一個端口範圍,iptables很難對任意端口開放的,
如果iptables允許任意端口訪問,那和不設置防火牆沒什麼區別,所以不現實的。

那麼我們的解決辦法就是指定這個數據傳輸端口的一個範圍。

下面我們修改一下ftp配置文件。

我這裏使用vsftpd來修改演示,其他ftp我不知道哪裏修改,大家可以找找資料。

[root@localhostrootvi/etc/vsftpd.conf

在配置文件的最下面加入

pasv_min_port=30001
pasv_max_port=31000

然後保存退出。

這兩句話的意思告訴vsftpd,要傳輸數據的端口範圍就在30001到31000這個範圍內傳送。

這樣我們使用iptables就好辦多了,我們就打開30001到31000這些端口。

[root@localhostrootiptables-AINPUT-ptcp--dport30001:31000-jACCEPT
[root@localhostrootiptables-AOUTPUT-ptcp--sport30001:31000-jACCEPT

[root@localhostrootserviceiptablessave

最後進行保存,然後我們再用瀏覽器範圍下ftp。可以正常訪問

用個賬號登陸上去,也沒有問題,上傳一些文件上去看看。

看到了吧,上傳和下載都正常。。再查看下iptables的設置

[root@localhostrootiptables-L-n
ChainINPUT(policyDROP)
targetprotoptsourcedestination
ACCEPTtcp--0.0.0.0/00.0.0.0/0tcpdpt:22
ACCEPTtcp--0.0.0.0/00.0.0.0/0tcpdpt:21
ACCEPTtcp--0.0.0.0/00.0.0.0/0tcpdpt:20
ACCEPTtcp--0.0.0.0/00.0.0.0/0tcpdpts:30001:31000

ChainFORWARD(policyDROP)
targetprotoptsourcedestination

ChainOUTPUT(policyDROP)
targetprotoptsourcedestination
ACCEPTtcp--0.0.0.0/00.0.0.0/0tcpspt:22
ACCEPTtcp--0.0.0.0/00.0.0.0/0tcpspt:21
ACCEPTtcp--0.0.0.0/00.0.0.0/0tcpspt:20
ACCEPTtcp--0.0.0.0/00.0.0.0/0tcpspts:30001:31000

這是我爲了演示ftp特殊端口做的簡單規則,大家可以添加一些對數據包的驗證
例如-mstate--stateESTABLISHED,RELATED等等要求更加高的驗證

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章