我的目的是關閉所有對外服務的端口,只允許ssh服務的22端口接受外面的請求。
首先在我的測試服務器上進入root權限,然後用下面的命令查看iptables
-v 是輸出詳細信息
-n 指的是顯示地址和端口號
-L 指顯示鏈裡面的規則
--line-number參數用來顯示行號,刪除的時候很有用
從上面的結果可以看到,策略上允許所有的輸入連接。
現在先刪除所有的規則,預防萬一,不一定使用。
iptables -F
然後策略上關閉所有的進入請求
iptables -P INPUT DROP
再添加ssh端口的訪問支持
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
試一下從另外一台機器鏈接,ssh登錄沒問題,除了開始要等一會兒。
注意,這樣的設置會導致不能從這台機器連接外網,有兩種方法解決:
1.如果為了絕對的安全,可以臨時手動打開策略,用完後再關閉。
iptables -P INPUT ACCEPT
//DO SOMETHING
iptables -P INPUT DROP
2.添加一個規則,允許已經建立的連接接收進來的數據
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
連接是從本機向外發起的,我們的規則沒有限制,連接建立後,就可以從外部網絡拉取數據。
根據自己的需要再添加其他的端口吧。
如果想限制有限的機器向服務器發起請求,可以用-s參數,比如:
iptables -A INPUT -p tcp -s 10.112.18.0/0 --dport 27017 -j ACCEPT
僅在10.112.18.0/0網段的機器才能連接上本機的27017端口。
如何保存規則呢?兩步,
1.安裝
apt-get install iptables-persistent
2.保存規則文件
service iptables-persistent save
重啟即可。
iptables-persistent是一個開機啟動腳本,在/etc/init.d/目錄下,感興趣的可以看一下。