Ssh
為什麼關閉除 22 以外的所有埠後,仍然能夠在埠 80 上得到響應?
我的目標是完全關閉我的 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
.