iptables:仅允许建立传出连接,如 DMZ

iptables:仅允许建立传出连接,如 DMZ

我想模拟一个类似 DMZ 的场景,其中 server1(DMZ 内,10.1.1.0)应该能够响应任何传入连接,并且不能自行建立新的传出连接。

如果有人能提供一个可行的示例我将不胜感激。

例子:

我正在做一个简单的测试。我从 10.2.2.10 访问托管在 10.1.1.10 上的网页。因此,如果此规则允许所有传入和仅允许相关/已建立的传出,我应该能够打开网页并在其上执行所有操作。但是使用此规则我无法访问该网页。如果我从 10.2.2.10(服务器 2)执行 nc -v 80。我成功了,也可以在 tshark 中看到传入的数据包

我尝试了 iptables 规则,但它没有按我预期的方式工作

*filter
-A INPUT  -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -m state --state NEW -j DROP
-A OUTPUT -j ACCEPT -m state --state ESTABLISHED,RELATED
COMMIT

Iptables -L -nv 输出

iptables -L -nv
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
 1375  142K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW,RELATED,ESTABLISHED 

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    8   480 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW reject-with icmp-port-unreachable 
 1185 1346K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 

附言:

我正在运行 CentOS 6.4。

答案1

一个相当通用的答案(我相信如果你在 serverfault 上搜索的话,其他地方会有更好的答案)是:如果 iptables 没有按你预期的方式工作,你应该:

  • 在适当的点添加日志记录规则,并在生成流量时查看日志
  • iptables -L -n -v在生成流量时观察规则上的计数器
  • 我最喜欢的是使用 iptables 预处理器,例如岸墙为你制定规则

相关内容