Ada*_*and 10
我试图在那里找到有关出口规则和 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
Run Code Online (Sandbox Code Playgroud)
重要提示:请勿添加 security.ubuntu.com 或 us.archive.ubuntu.com 规则,除非您/etc/hosts为这些规则输入(但请参阅有关打开 DNS 查询的“其他出口规则”)。请记住,iptables 将在应用规则时评估这些地址的 IP。因此,如果 ubuntu 更改了这些地址,则需要重新创建这些规则或重新启动计算机(规则在启动时应用)。
让我们来看看这些规则中的每一个:
本地接口规则
sudo iptables -A OUTPUT -o lo -p all -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
这是添加一个条目,说明我们应该接受任何想要在本地 (127.0.0.1) 接口上出站的流量。一些应用程序使用这个接口来交换信息,我们不想破坏它们。
Secret Sauce Rule(已建立/相关会话)
sudo iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
这是经常被遗忘的规则,导致会话断开和混乱。这表示允许与已经建立的会话相关联或与已建立的会话相关的出站流量。例如,如果您的服务器上有 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
Run Code Online (Sandbox Code Playgroud)
这些规则只是告诉 iptables 允许流量进入 ubuntu 的更新服务器的 80 端口。这些可能因您所在的地区而有所不同,并且可能更多,因此您必须apt-get update在执行此操作后执行此操作以确保它适合您。重要提示:正如我之前提到的,在没有首先将映射适当 IP 的条目放入/etc/hosts. 此外,如果 Ubuntu 更改了这些 IP,您将需要更新主机条目并重新启动或重新创建这些规则,因为 iptables 在应用规则时会评估地址。
“杀手”法则
sudo iptables -A OUTPUT -j REJECT
Run Code Online (Sandbox Code Playgroud)
这是杀死所有其他流量的规则。这绝对应该是您链中的最后一条规则,否则其他规则将不起作用。
不要忘记做:
sudo sh -c “iptables-save >/etc/iptables.rules”
Run Code Online (Sandbox Code Playgroud)
如果你想保留规则,然后添加:
pre-up iptables-restore < /etc/iptables.rules
Run Code Online (Sandbox Code Playgroud)
在/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
Run Code Online (Sandbox Code Playgroud)
允许 DNS 工作(从服务器)。请注意,添加这些意味着您不必/etc/hosts在上面的示例中使用,但可以说不那么安全。
sudo iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
sudo iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
要允许 NTP 时间同步客户端:
sudo iptables -A OUTPUT -p udp -m owner --uid-owner systemd-timesync -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
(随意添加)
| 归档时间: |
|
| 查看次数: |
7109 次 |
| 最近记录: |