概要
我正在寻求了解有关服务器管理的更多信息。我已经运行自己的网络服务器几年了,尽管很多事情都是由我的朋友设置的,现在我希望了解有关这些任务的更多信息。
我主要对安全、网络安全和防火墙感到好奇,并且很想找到一本好的资源/书籍来了解更多这方面的信息。
尽管如此,我的意图是:
- 阻止所有传入连接;除特定端口外
- 为了了解我需要研究的任何与安全相关的任务
我有一个简短的端口列表,允许传入连接:
$ iptables -A INPUT -p icmp -j ACCEPT # allows anyone to ping?
$ iptables -A INPUT -p tcp --dport 22 -j ACCEPT # allow public ssh
$ iptables -A INPUT -p tcp --dport 80 -j ACCEPT # allow public apache
$ iptables -A INPUT -p tcp --dport 443 -j ACCEPT # allow public apache (ssl)
$ iptables -A INPUT -p tcp --dport 9001 -j ACCEPT # allow a public service
$ iptables -A INPUT -j DROP # default drop
理论上,我上面的规则列表似乎足够安全,可以阻止除 22、80、443 和 9001 之外的所有内容 - 但当这些规则处于活动状态时,我无法 ssh 进入我的服务器。然后我刷新规则 ( iptables -F
) 并且可以再次 ssh。
答案1
将 drop 规则放在其余规则之前,然后 SSH 应该可以正常工作。
顺序很重要,因为 iptables 从上到下评估规则。同样,如果您首先制定一条允许端口 22 的规则,然后制定下一条将所有内容丢弃到端口 22 的规则,则后一条规则适用。
以下是工作生产服务器的配置示例:
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -j LOG --log-prefix "IPTABLES IN:"
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
-A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -j LOG --log-prefix "IPTABLES OUT:"
COMMIT
它首先将输入和转发连接设置为默认丢弃,并默认将传出连接设置为接受。然后接受与状态相关并建立的连接。然后ICMP被全局接受并且环回流量被接受。在接受目标端口 22 和 80 后,然后是有关日志记录等的规则。我使用 centos 将规则保存到文件中,因此如果我重新加载 iptables,它会直接刷新该文件中的规则。当然,要设置默认文件,您需要确保规则在重新启动时加载时正常工作。
可以使用“iptables-restore < path_to_rules”从文件重新加载规则集。