我是 ubuntu/iptables 新手,正在运行我的第一个 Linode 来为 rails 应用程序提供服务。虽然一切开始顺利进行,我对我的 INPUT 链感觉很好,但 OUTPUT 链……呃……不太好。:)
显然,我的规则应该反映我的个人需求,并且每个人之间总会存在差异,但对于基本的 ubuntu 服务器,我通常应该注意什么?是否有出站链的最佳实践?目前,出站设置为基本上接受所有内容,但我宁愿根据需要拒绝和列入白名单。
鉴于此,并排除可以根据输入链确定的规则,有人对在 ubuntu 机器上通常应该允许哪些出站规则有什么建议吗?(例如,用于包更新、时间同步等)。我不想错过任何东西,也不想在不知情的情况下阻止后台任务正常运行。
谢谢
编辑:感谢大家的帮助!我的帐户是全新的,不幸的是,我目前没有最低声誉来投票,但我非常感谢你们所有人的帮助。我已经接受了答案。
答案1
由于您可能不会使用此服务器执行除了从配置的存储库获取数据之外的任何其他操作,因此/etc/apt/sources.list
您可能只应该通过 FQDN 和端口允许这些操作。
我会使用 conntrack 和状态检查,而不是指定输入,因为它更安全。特制的数据包(其源端口设置为 80)将通过 Jonathan Ross 提到的规则。
#set policy on chains to drop
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
#allows already established/related connections
iptables -A OUTPUT -o eth0 -m state --state ESTABLISHED,RELATED -p tcp -j ACCEPT
iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -p tcp -j ACCEPT
#allow incoming to www
iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
#allow outgoing to my sources.list repo
iptables -A OUTPUT -o eth0 -d mirrors.kernel.org -p tcp --dport 80 -j ACCEPT
#add upd/123 for NTP
iptables -A OUTPUT -o eth0 -d tock.usask.ca -p udp --dport 123 -j ACCEPT
答案2
当我学习 IPtables 时,第一个经验法则是“默认拒绝”。即只允许你想要的通过,拒绝其他一切,而不仅仅是强化你正在使用的服务。这对安全性有很大影响。
- 默认拒绝
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
- 我喜欢启用 ping:
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 0 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
- Apt 是必需的,通常正如你提到的
iptables -A OUTPUT -p tcp --dport 80 -m -j ACCEPT
iptables -A INPUT -p tcp --sport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 80 --sport 32768:61000 -j ACCEPT
答案3
也许有必要编写与输入对称的输出规则?我的意思是交换目标地址和源地址,为状态敏感规则添加新状态等。
软件包下载(如前所述)是通过标准 HTTP 或 FTP 完成的。FTP 变体由于主动/被动 FTP 模式而稍微复杂一些。
NTP 使用 tcp 端口 123。我认为限制 NTP 服务器的地址也是值得的(如果您没有使用全球池)。