Adam Brand Asked: 2009-08-30 11:13:06 +0800 CST2009-08-30 11:13:06 +0800 CST 2009-08-30 11:13:06 +0800 CST 您如何使用 iptables(在 Ubuntu 上)设置出口规则? 772 如何在 Ubuntu 上使用 iptables 设置出口规则? firewall ubuntu security iptables 1 个回答 Voted Best Answer Adam Brand 2009-08-30T11:13:46+08:002009-08-30T11:13:46+08:00 我试图在那里找到有关出口规则和 iptables 的信息,但信息不完整或不准确。在四处挖掘并断开我的 ssh 会话几次后,我想通了,并认为我会在 ServerFault 上分享它。 出口规则是任何安全策略的关键,并且是满足许多安全标准(例如 PCI DSS)所必需的。 注意:这里的命令假设是基于 Debian 的发行版(例如,Ubuntu 服务器)。各个发行版的 iptables 命令应该是相同的,但是请查看您自己发行版的参考指南,了解如何保存和加载 iptables,因为这些步骤会有所不同。如果有人想 wikify 并添加 RH 或其他 dist 差异,那就去吧。 在下面的示例中,我们将为只需要获取软件包更新的服务器设置相当通用的规则。请记住,这些是区分大小写的命令,并且您键入它们的顺序是它们被评估的顺序(即,如果您通过 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 重要提示:请勿添加 security.ubuntu.com 或 us.archive.ubuntu.com 规则,除非您/etc/hosts为这些规则添加条目(但请参阅打开 DNS 查询的“其他出口规则”)。请记住,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 update执行此操作后进行操作以确保它适合您。重要提示:正如我之前提到的,在没有先将相应 IP 映射到/etc/hosts. 此外,如果 Ubuntu 更改了这些 IP,您将需要更新主机条目并重新启动或重新创建这些规则,因为 iptables 在应用规则时会评估地址。 “杀手”法则 sudo iptables -A OUTPUT -j REJECT 这是杀死所有其他流量的规则。这绝对应该是您链条中的最后一条规则,否则其他规则将不起作用。 不要忘记做: sudo sh -c “iptables-save >/etc/iptables.rules” 如果你想保留规则,然后添加: pre-up iptables-restore < /etc/iptables.rules 在中的接口(eth0 或其他)下/etc/network/interfaces。 其他出口规则 要允许“ping”工作(从服务器): sudo iptables -A OUTPUT -p icmp --icmp echo-request -j ACCEPT sudo iptables -A OUTPUT -p icmp --icmp echo-reply -j ACCEPT 允许 DNS 工作(从服务器)。请注意,添加这些意味着您不必/etc/hosts在上面的示例中使用,但可以说安全性较低。 sudo iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT sudo iptables -A OUTPUT -p udp --dport 53 -j ACCEPT 允许 NTP 时间同步客户端: sudo iptables -A OUTPUT -p udp -m owner --uid-owner systemd-timesync -j ACCEPT (随意添加)
我试图在那里找到有关出口规则和 iptables 的信息,但信息不完整或不准确。在四处挖掘并断开我的 ssh 会话几次后,我想通了,并认为我会在 ServerFault 上分享它。
出口规则是任何安全策略的关键,并且是满足许多安全标准(例如 PCI DSS)所必需的。
注意:这里的命令假设是基于 Debian 的发行版(例如,Ubuntu 服务器)。各个发行版的 iptables 命令应该是相同的,但是请查看您自己发行版的参考指南,了解如何保存和加载 iptables,因为这些步骤会有所不同。如果有人想 wikify 并添加 RH 或其他 dist 差异,那就去吧。
在下面的示例中,我们将为只需要获取软件包更新的服务器设置相当通用的规则。请记住,这些是区分大小写的命令,并且您键入它们的顺序是它们被评估的顺序(即,如果您通过 SSH 连接,请不要先执行 -A OUTPUT -j REJECT)。
示例规则集
重要提示:请勿添加 security.ubuntu.com 或 us.archive.ubuntu.com 规则,除非您
/etc/hosts
为这些规则添加条目(但请参阅打开 DNS 查询的“其他出口规则”)。请记住,iptables 将在应用规则时评估这些地址的 IP。因此,如果 ubuntu 更改了这些地址,您需要重新创建这些规则或重新启动计算机(这些规则在启动时应用)。让我们来看看这些规则中的每一个:
本地接口规则
这是添加一个条目,表示我们应该接受任何想要在本地 (127.0.0.1) 接口上出站的流量。一些应用程序使用这个接口来交换信息,我们不想破坏这些。
秘制酱料规则(已建立/相关会议)
这是经常被遗忘的规则,导致会话断开和混乱。这说的是允许与已建立的会话或与已建立的会话相关的出站流量。例如,如果您的服务器上有 SSH,您可以打开入站端口 22,但是服务器如何将数据发送回客户端(这甚至可能建议为后续通信使用备用更高端口)?这就是这个规则允许的。
允许 Ubuntu apt-get 更新
这些规则只是告诉 iptables 允许流量进入 ubuntu 更新服务器的端口 80。这些可能因您所在的地区而异,并且可能更多,因此您必须在
apt-get update
执行此操作后进行操作以确保它适合您。重要提示:正如我之前提到的,在没有先将相应 IP 映射到/etc/hosts
. 此外,如果 Ubuntu 更改了这些 IP,您将需要更新主机条目并重新启动或重新创建这些规则,因为 iptables 在应用规则时会评估地址。“杀手”法则
这是杀死所有其他流量的规则。这绝对应该是您链条中的最后一条规则,否则其他规则将不起作用。
不要忘记做:
如果你想保留规则,然后添加:
在中的接口(eth0 或其他)下
/etc/network/interfaces
。其他出口规则
要允许“ping”工作(从服务器):
允许 DNS 工作(从服务器)。请注意,添加这些意味着您不必
/etc/hosts
在上面的示例中使用,但可以说安全性较低。允许 NTP 时间同步客户端:
(随意添加)