我的目标是绝对关闭我的 Ubuntu 服务器上的所有端口,端口 22 (SSH) 除外。
我按照服务器故障here上的这个问题的说明,加上here和here的说明。
但是,按照说明进行操作后,我的端口似乎仍处于打开状态。以 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
Run Code Online (Sandbox Code Playgroud)
这是我的 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
Run Code Online (Sandbox Code Playgroud)
只是看着它,特别是它说“在任何地方都接受”的地方,似乎我的想法与我想要的相反。看起来我没有关闭端口,而是打开了它们。但是,这些是按照信函的说明进行操作的结果,所以也许我只是不明白这些术语的真正含义。
无论如何,最重要的是,我该怎么做才能关闭除 22 之外的所有端口,然后即使服务器重新启动也能坚持下去。当然它只是命令行中的几个命令?
(请注意,我是接受此任务的网页设计师,所以我根本不是一个超级自信的服务器管理员。请使答案易于理解。谢谢!)
正如您所期望的那样:
ACCEPT all -- anywhere anywhere
Run Code Online (Sandbox Code Playgroud)
表示允许所有协议/端口,因为它位于此行之前:
DROP all -- anywhere anywhere
Run Code Online (Sandbox Code Playgroud)
您不会拒绝任何端口,因为在允许一切DROP的ACCEPT规则之后只有一个规则。
iptables规则是按顺序匹配的,所以如果你想在 INPUT 链上只允许端口 22,你需要有以下规则:
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
以上两条规则应该足够了,默认INPUT策略设置为DROP如行中所示:
Chain INPUT (policy DROP)
Run Code Online (Sandbox Code Playgroud)
为了使您的规则集持久化,您可以使用iptables-save > rules_file将您的规则集转储到文本文件中。然后,可以在服务器启动期间加载它,方法是使用iptables-restore.
| 归档时间: |
|
| 查看次数: |
145 次 |
| 最近记录: |