为什么我关闭了除 22 之外的所有端口,仍然能够在 80 端口上得到响应?

为什么我关闭了除 22 之外的所有端口,仍然能够在 80 端口上得到响应?

我的目标是关闭我的 Ubuntu 服务器上除端口 22(SSH)之外的所有端口。

我按照Server Fault 上的这个问题以及说明这里这里

但是,按照说明操作后,似乎我的端口仍处于打开状态。例如,以下是端口 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 之外的所有端口,然后让它即使服务器重新启动也能继续。这肯定只是命令行上的几个命令?

(请注意,我是一名承担这项任务的网页设计师,所以我并不是一个非常自信的服务器管理员。请让答案易于理解。谢谢!)

答案1

正如你所期望的那样:

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

相关内容