我需要将我的机器配置为仅允许来自/来自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
它不能很好地工作:
iptables -A OUTPUT -p tcp -d serverfault.com –dport 80 -j ACCEPT
我收到此错误:
iptables v1.4.4: host/network `serverfault.com' not found Try `iptables -h' or 'iptables --help' for more information.
你认为它与DNS有关吗?我也应该允许吗?或者我应该只将IP地址放在规则中?
你认为我想要做的事情可以用更简单的规则来实现吗?怎么样?
我将不胜感激任何帮助或提示.非常感谢!
解决方法
使用IPTables规则,订单很重要.按顺序添加和应用规则.此外,手动添加规则时,会立即应用.因此,在您的示例中,一旦设置了默认策略,通过INPUT和OUTPUT链的任何数据包都会开始被丢弃.顺便提一下,这也是您收到错误的原因
你做过的消息.这是怎么回事:
你做过的消息.这是怎么回事:
>应用默认DROP策略
> IPTables接收主机名作为目标
> IPTables尝试在’serverfault.com’上进行DNS查找
> DROP操作阻止DNS查找
虽然源/目标选项将接受主机名,但强烈建议不要这样做.引用手册页,
Hostnames will be resolved once
only,before the rule is submitted to
the kernel. Please note that
specifying any name to be resolved
with a remote query such as DNS is a
really bad idea.
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,RELATED -j ACCEPT # Drop everything iptables -P INPUT DROP iptables -P OUTPUT DROP