我的目标是绝对closures我的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
只要看看它,特别是在“接受所有地方”的地方,看起来就像我想要的是相反的。 它看起来像closures端口,而不是打开端口。 但是,这些是遵循信函的指示的结果,所以也许我只是不明白这些术语的真正含义。
在任何情况下,底线,我怎样才能closures除22以外的所有端口,然后使其即使在服务器重新启动时也保持不变。 当然这只是命令行中的一些命令?
(请注意,我是一名网页devise师,他完成了这个任务,所以我根本不是一个超级自信的服务器pipe理员,请让答案容易理解,谢谢!)
正如你所预料的那样:
ACCEPT all -- anywhere anywhere
意味着所有协议/端口都被允许,因为它在这行之前:
DROP all -- anywhere anywhere
您不拒绝任何端口,因为在允许所有内容的ACCEPT规则之后只有一个DROP规则。
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-save > rules_file将规则集转储为文本文件。 然后,它可以在服务器启动期间通过使用iptables-restore其包含在任何脚本中加载。