Ssh

為什麼關閉除 22 以外的所有埠後,仍然能夠在埠 80 上得到響應?

  • May 9, 2012

我的目標是完全關閉我的 Ubuntu 伺服器上的所有埠,除了埠 22 (SSH)。

我遵循了關於伺服器故障的這個問題的說明,以及這里這裡的說明。

但是,按照說明進行操作後,我的埠似乎仍處於打開狀態。以 80 埠為例:

$ nmap -p 80 ###.###.###.###

Starting Nmap 5.21 ( http://nmap.org ) at 2012-05-09 15:36 JST
Nmap scan report for ###-###-###-###.name.name.com (###.###.###.###)
Host is up (0.0065s latency).
PORT   STATE SERVICE
80/tcp open  http

Nmap done: 1 IP address (1 host up) scanned in 1.63 seconds

這是我的iptables的內容:

# sudo iptables -L
Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh 
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 
DROP       all  --  anywhere             anywhere            

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

只是看著它,特別是在它說“接受所有任何地方”的地方,似乎我的想法與我想要的相反。看起來我沒有關閉埠,而是打開了它們。但是,這些是按照信中的說明進行操作的結果,所以也許我只是不明白這些術語的真正含義。

無論如何,最重要的是,我該怎麼做才能關閉除 22 之外的所有埠,然後即使伺服器重新啟動也讓它保持不變。當然這只是命令行中的幾個命令?

(請注意,我是一名完成此任務的網頁設計師,所以我根本不是一個超級自信的伺服器管理員。請讓答案易於理解。謝謝!)

正如您所期望的那樣:

ACCEPT     all  --  anywhere             anywhere            

表示允許所有協議/埠,因為它位於此行之前:

DROP       all  --  anywhere             anywhere            

您沒有拒絕任何埠,因為只有一個DROP規則出現在ACCEPT允許一切的規則之後。

iptables規則是按順序匹配的,因此如果要在 INPUT 鏈上只允許埠 22,則需要具有以下規則:

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

上述兩條規則應該足夠了,預設INPUT策略設置為DROP如下行所示:

Chain INPUT (policy DROP)

要使您的規則集持久化,您可以使用iptables-save > rules_file將您的規則集轉儲到文本文件中。然後,可以在伺服器啟動期間通過將其包含在任何使用iptables-restore.

引用自:https://serverfault.com/questions/387348