Zen*_*net 22 domain-name-system iptables loopback
我需要将我的机器配置为仅允许进出 serverfault.com 的 HTTP 流量。所有其他网站、服务端口均无法访问。我想出了这些 iptables 规则:
#drop everything
iptables -P INPUT DROP
iptables -P OUTPUT DROP
#Now, allow connection to website serverfault.com on port 80
iptables -A OUTPUT -p tcp -d serverfault.com --dport 80 -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
#allow loopback
iptables -I INPUT 1 -i lo -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
它不太好用:
在我放下一切之后,继续规则 3:
iptables -A 输出 -p tcp -d serverfault.com --dport 80 -j 接受
我收到此错误:
iptables v1.4.4: host/network `serverfault.com' not found
Try `iptables -h' or 'iptables --help' for more information.
Run Code Online (Sandbox Code Playgroud)
你认为它与DNS有关吗?我也应该允许吗?或者我应该在规则中加入 IP 地址?你认为我想要做的事情可以通过更简单的规则来实现吗?如何?
我将不胜感激对此的任何帮助或提示。非常感谢!
Sco*_*ack 33
对于 IPTables 规则,顺序很重要。规则按顺序添加和应用。此外,手动添加规则时,它们会立即应用。因此,在您的示例中,一旦设置了默认策略,任何通过 INPUT 和 OUTPUT 链的数据包就会开始被丢弃。顺便说一句,这也是您收到错误消息的原因。正在发生的事情是这样的:
虽然源/目标选项将接受主机名,但强烈建议不要这样做。引用手册页,
在将规则提交给内核之前,主机名将只解析一次。请注意,指定要使用远程查询(例如 DNS)解析的任何名称是一个非常糟糕的主意。
Slillibri 在他的回答中一针见血,你错过了 DNS ACCEPT 规则。在您的情况下,这无关紧要,但通常我会稍后在流程中设置默认策略。您最不想做的事情是远程工作并在打开默认拒绝后允许 SSH 。
此外,根据您的发行版,您应该能够保存防火墙规则,以便在开始时自动应用它们。
了解所有这些并重新安排您的脚本后,这就是我的建议。
# Allow loopback
iptables -I INPUT 1 -i lo -j ACCEPT
# Allow DNS
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
# Now, allow connection to website serverfault.com on port 80
iptables -A OUTPUT -p tcp -d serverfault.com --dport 80 -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# Drop everything
iptables -P INPUT DROP
iptables -P OUTPUT DROP
Run Code Online (Sandbox Code Playgroud)
添加
iptables -A OUPUT -p udp --dport 53 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
允许 DNS 查找。
使用 Web 代理和/或过滤器可以更好地处理这种需求。Dansgaurdian 可以配置为执行此操作。您将需要使用 NAT 规则来强制您的流量通过过滤器。
使用 iptables 过滤将允许来自相关 IP 地址的任何站点可用。这通常是整个网络的一小部分。
| 归档时间: |
|
| 查看次数: |
77241 次 |
| 最近记录: |