我需要configuration我的机器只允许来自serverfault.com的HTTPstream量。 所有其他网站,服务端口都不可访问。 我想出了这些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
这不太合适:
在我放下所有东西后,继续进行规则3:
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链的数据包就会开始丢弃。 顺便说一句,这也是为什么你收到了你所做的错误信息。 发生了什么事情是这样的:
虽然源/目标选项将接受主机名,但强烈不鼓励。 引用手册页,
在将规则提交给内核之前,主机名将只被parsing一次。 请注意,使用远程查询(如DNS)指定要parsing的任何名称是一个非常糟糕的主意。
Slillibri砸在他的答案的头上,你错过了DNS接受规则。 在你的情况下,这并不重要,但通常我会在后面的过程中设置默认策略。 你想要的最后一件事是远程工作,并在打开默认拒绝后允许SSH。
此外,根据您的分发,您应该能够保存防火墙规则,以便在开始时自动应用这些规则。
知道这一切,并重新安排您的脚本,这是我会build议。
# 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
加
iptables -A OUPUT -p udp --dport 53 -j ACCEPT
允许DNS查找。
使用网页代理和/或filter可以更好地处理这种需求。 丹佛店可以configuration这样做。 您将需要使用NAT规则来强制您的stream量通过filter。
使用iptables过滤将允许从相关的IP地址提供任何网站。 这通常是整个networking的一小部分。
我担心iptables不能在这个级别工作,它只关心ip地址,而不是主机名。 如果你想阻止访问同一个IP上的其他名称虚拟主机,你需要看看.htaccess文件。
您需要在您的networking服务器上进行configuration。 iptables是一个包filter。 HTTP事务发送站点名称(即stackoverflow)作为TCP有效载荷的一部分(即不作为TCP标头的一部分,这是iptables很容易读取的)。
鉴于此,事实上HTTP事务几乎肯定会分散在多个数据包中(即,您不能只匹配HTTP标头中的string),这可以通过Web服务器configuration或代理服务器处理得更好的。
了解背后的推理是有用的,还有其他一些select: