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等等要求更加高的驗證