LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1651|回复: 1

iptables如何实现DMZ?

[复制链接]
发表于 2006-1-9 23:08:59 | 显示全部楼层 |阅读模式
iptables如何实现类似DMZ?
发表于 2006-2-17 13:27:30 | 显示全部楼层

请大家多多指教!

1.内网可以访问外网
    内网的用户显然需要自由地访问外网。在这一策略中,防火墙需要进行源地址转换。

    2.内网可以访问DMZ
    此策略是为了方便内网用户使用和管理DMZ中的服务器。

    3.外网不能访问内网
    很显然,内网中存放的是公司内部数据,这些数据不允许外网的用户进行访问。

    4.外网可以访问DMZ
    DMZ中的服务器本身就是要给外界提供服务的,所以外网必须可以访问DMZ。同时,外网访问DMZ需要由防火墙完成对外地址到服务器实际地址的转换。

    5.DMZ不能访问内网
    很明显,如果违背此策略,则当入侵者攻陷DMZ时,就可以进一步进攻到内网的重要数据。

    6.DMZ不能访问外网
    此条策略也有例外,比如DMZ中放置邮件服务器时,就需要访问外网,否则将不能正常工作。

    DMZ的实现

    根据以上访问控制策略可以设定Linux防火墙的过滤规则。下面将在一个虚构的网络环境中,探讨如何根据以上六条访问控制策略建立相应的防火墙过滤规则。这里的讨论和具体应用会有所区别,不过这种讨论将有助于实际应用。用户在实际应用时可根据具体的情况进行设置。该虚拟环境的网络拓扑如图1。



图1 DMZ网络拓扑图


    如图1所示,路由器连接Internet和防火墙。作为防火墙的Linux服务器使用三块网卡:网卡eth0与路由器相连,网卡eth1与DMZ区的Hub相连,网卡eth2与内网Hub相连。作为一个抽象的例子,我们用“[内网地址]”来代表“192.168.1.0/24”之类的具体数值。同理还有“[外网地址]”和“[DMZ地址]”。

    对于防火墙,原则之一就是默认禁止所有数据通信,然后再打开必要的通信。所以在防火墙脚本的最初,需要清空系统原有的规则,然后将INPUT、OUTPUT、FORWARD的默认规则设置为丢弃所有数据包。

    对应的防火墙脚本片段如下:

# Flush out the tables and delete all user-defined chains
/sbin/iptables -F
/sbin/iptables -X
/sbin/iptables -t nat -F
/sbin/iptables -t nat -X

# Drop every packet
/sbin/iptables -P INPUT DROP
/sbin/iptables -P OUTPUT DROP
/sbin/iptables -P FORWARD DROP



    接下来,逐一解释六种策略的实现。

    1.内网可以访问外网
    对应的防火墙脚本片段如下:
    /sbin/iptables -t nat -A POSTROUTING -s [内网地址] -d [外网地址] -o eth0 -j SNAT --to [NAT的真实IP]

    当数据从连接外网的eth0流出时,要将来自内网的数据包的源地址改成Internet上的真实IP,这样才能和外网的主机进行通信。“[NAT的真实IP]”表示分配给NAT用户的真实IP,有几个就写几个,以空格分开,但至少要写一个。

    2.内网可以访问DMZ
    对应的防火墙脚本片段如下:
    /sbin/iptables -A FORWARD -s [内网地址] -d [DMZ地址] -i eth2 -j ACCEPT
    以上命令允许所有来自内网、目的地为DMZ的数据包通过。

    3.外网不能访问内网
    对应的防火墙脚本片段如下:
    /sbin/iptables -t nat -A PREROUTING -s [外网地址] -d [内网地址] -i eth0 -j DROP
    以上命令将来自外网、去往内网的数据包全部丢弃。

    4.外网可以访问DMZ
    为了保护DMZ中的服务器,外网对DMZ的访问也要加以限制。通常的思路是,只允许外网访问DMZ中服务器所提供的特定服务,比如HTTP。
    对应的防火墙脚本片段如下:
    /sbin/iptables -t nat -A PREROUTING -p tcp --dport 80 -d [分配给HTTP服务器的Internet上的真实IP] -s [外网地址] -i eth0 -j DNAT --to [HTTP服务器的实际IP]
    /sbin/iptables -A FORWARD -p tcp -s [外网地址] -d [HTTP服务器的实际IP] -i eth0 --dport 80 -j ACCEPT
    /sbin/iptables -A FORWARD -p tcp -d [外网地址] -s [HTTP服务器的实际IP] -i eth1 --sport 80 ! --syn -j ACCEPT
    /sbin/iptables -t nat -A PREROUTING -s [外网地址] -d [DMZ地址] -i eth0 -j DROP

    该防火墙脚本片段将开放HTTP服务,使得只有访问DMZ中HTTP服务的数据包才能通过防火墙。

    5.DMZ不能访问内网
    对应的防火墙脚本片段如下:
    /sbin/iptables -A FORWARD -s [DMZ地址] -d [内网地址] -i eth1 -j DROP
    以上命令将丢弃所有从DMZ到内网的数据包。

    6.DMZ不能访问外网
    对应的防火墙脚本片段如下:
    /sbin/iptables -t nat -A POSTROUTING -p tcp --dport 25 -d [外网地址] -s [邮件服务器的IP] -o eth0 -j SNAT --to [分配给SMTP服务器的Internet上的真实IP]
    /sbin/iptables -A FORWARD -p tcp -s [邮件服务器的IP] -d [外网地址] -i eth1 --dport 25 -j ACCEPT
    /sbin/iptables -A FORWARD -p tcp -d [邮件服务器的IP] -s [外网地址] -i eth0--sport 25 ! --syn -j ACCEPT

    以上命令先允许DMZ中邮件服务器连接外网的SMTP服务端口(25),然后禁止其它从DMZ发往外网的数据包。

    针对以上基本策略例举了实现它们的基本规则。在实际应用中,需要根据具体情况进行设置。只要设置得当,Linux也能成为很好的防火墙。需要补充的是,无论何种防火墙都只能提供有限的保护。设置好防火墙不等于网络就是安全的,关键在于综合运用各种安全手段。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表