如何使用iptables(在Ubuntu上)设置出口规则?
如何在Ubuntu上使用iptables设置出口规则? 我试图找到有关出口规则和iptables的信息,但信息不完整或不准确.经过几次挖掘并断开我的ssh会话后,我想出来并认为我会在ServerFault上分享它.出口规则是任何安全策略的关键,并且是满足许多安全标准(例如PCI DSS)所必需的.
注意:此处的命令假定基于Debian的分发(例如,Ubuntu服务器). iptables命令在各个发行版中应该是相同的,但请查看您自己的发行版参考指南,了解如何保存和加载iptables,因为这些步骤各不相同.如果有人想要对此进行维护并添加RH或其他差异,请选择它.
在下面的示例中,我们将为仅真正需要获取包更新的服务器设置相当常见的规则.请记住,这些是区分大小写的命令,并且您键入它们的顺序是它们被评估的顺序(即,如果您通过SSH连接,请不要先执行-A OUTPUT -j REJECT).
样本规则集
sudo iptables -A OUTPUT -o lo -p all -j ACCEPT sudo iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --dport 80 -d security.ubuntu.com -j ACCEPT sudo iptables -A OUTPUT -p tcp --dport 80 -d us.archive.ubuntu.com -j ACCEPT sudo iptables -A OUTPUT -j REJECT
重要信息:除非您为这些规则创建/ etc / hosts条目,否则请不要添加security.ubuntu.com或us.archive.ubuntu.com规则.请记住,iptables将在应用规则时评估这些地址的IP.因此,如果ubuntu更改了这些地址,则需要重新创建这些规则或重新启动计算机(规则在启动时应用).
我们来看看这些规则:
本地接口规则
sudo iptables -A OUTPUT -o lo -p all -j ACCEPT
这是添加一个条目,说我们应该接受任何想要在本地(127.0.0.1)接口上出站的流量.有些应用程序使用此接口来交换信息,我们不想破坏它们.
秘密酱规则(已建立/相关会议)
sudo iptables -A OUTPUT -m state --state RELATED, ESTABLISHED -j ACCEPT
这是经常被遗忘的规则,导致会话断开和混乱.这说明允许与已建立或与已建立会话相关的会话关联的出站流量.例如,如果您的服务器上有SSH,则可以打开端口22入站,但服务器如何将数据发送回客户端(甚至可能建议备用更高端口用于后续通信)?这就是这条规则所允许的.
允许Ubuntu apt-get更新
sudo iptables -A OUTPUT -p tcp --dport 80 -d security.ubuntu.com -j ACCEPT sudo iptables -A OUTPUT -p tcp --dport 80 -d us.archive.ubuntu.com -j ACCEPT
这些规则只是告诉iptables允许流量进入ubuntu更新服务器的端口80.这些可能会有所不同,具体取决于您所在的地区,可能会有更多,因此您必须在执行此操作后进行apt-get更新,以确保它适合您.重要提示:正如我之前提到的,如果没有先在/ etc / hosts中放置映射相应IP的条目,请不要启用此规则.此外,如果Ubuntu更改了这些IP,您将需要更新主机条目并重新启动或重新创建这些规则,因为iptables会在应用规则时评估地址.
“杀手”规则
sudo iptables -A OUTPUT -j REJECT
这是杀死所有其他流量的规则.这绝对应该是您链中的最后一条规则,否则其他规则将无效.
别忘了做:
sudo sh -c “iptables-save >/etc/iptables.rules”
如果你想保留规则,然后添加:
pre-up iptables-restore < /etc/iptables.rules
在/ etc / network / interfaces中的接口(eth0或其他)下.
其他出口规则
允许“ping”工作(从服务器):
sudo iptables -A OUTPUT -p icmp --icmp echo-request -j ACCEPT sudo iptables -A OUTPUT -p icmp --icmp echo-reply -j ACCEPT
允许DNS工作(从服务器):
sudo iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT sudo iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
(随意添加)