Linux 之 使用iptables作为防火墙

blob.png blob.png

 上面左边是我的个人微信,如需进一步沟通,请加微信。  右边是我的公众号“Openstack私有云”,如有兴趣,请关注。


    近期朋友一个防火墙故障,在紧急情况下,将外网专线插到一台linux服务器(红帽rhel5.3),使用linux的iptables完成了原来防火墙的端口转换NAT功能以及内网服务器上网的功能。下面记录一下过程。

    在操作之前,复习了一下iptables的原理,我参考了下面这个网址,介绍的非常详细:

    https://www.cnblogs.com/clsn/p/8308678.html

    另外,参考了下面这个网址,和我的应用环境非常相似,都是单独使用一台linux服务器作为防火墙使用,提供给内网服务器nat地址端口转换以及上外网:

    http://yjph83.iteye.com/blog/2105074


    iptables主要有3个表filter、nat、mangle,5个链INPUT、OUTPUT、FORWORD、PREROUTING、POSTROUTING,可以实现非常复杂的各类防火墙功能,比如本机服务器的消息过滤、转发,nat端口映射,内外网消息转发等等。在我的应用当中,主要用到nat端口映射和内网外消息转发。

    其他不多说,上重点,下面这张图,是简化了的iptables包处理流程图,消息从左到右。

    

    1、使用一对一nat端口映射功能,消息流是图的下面直线那条线路,也就是说,需要配置NAT表的PREROUTING链,FILTER表的FORWORD链,以及NAT表的POSTROUTING链;

    2、实现内网共享上网功能,其实使用的也是nat地址转换功能,需要在NAT表的POSTROUTING链上将内网的源地址转换为外网地址,同样的,还要设置FILTER表的FORWORD链,使内网的消息能够双向通过。对iptables设置完成之后,在内网需要共享上网的服务器上,需要将网关直接设置为iptables所在的服务器的内网IP地址。

    

操作记录:  


    简单说明一下网络结构,linux防火墙服务器的eth0连内网,eth3连外网,eth0地址10.1.1.8 ,eth3外网地址121.1.2.3 。其他内网服务器连接内网,网段是10.1.1.0/24,网关设置为10.1.1.8 。


一、 一对一NAT端口映射设置

    1、首先将linux核心参数net.ipv4.ip_forward=1 打开

    #vi /etc/sysctl.conf
    ~~
    net.ipv4.ip_forward = 1
    ~~
    #sysctl -p

    2、配置NAT表的PREROUTING链

iptables -t nat -A PREROUTING -d 121.1.2.3 -p tcp --dport 9998 -j DNAT --to 10.1.1.66:3389

    3、配置NAT表的POSTROUTING链

iptables -t nat -A POSTROUTING -d 10.1.1.66 -p tcp --dport 3389  -j SNAT --to 10.1.1.8

    4、配置FILTER表的FORWORD链

iptables -A FORWARD -o eth0 -d 10.1.1.66 -p tcp --dport 3389 -j ACCEPT  

    5、配置FILTER表的FORWORD链,使链路处于ESTABLISHED,RELATED状态消息回来的时候能够原路返回:

iptables -A FORWARD -i eth0 -s 10.1.1.66 -p tcp --sport 3389 -m state --state ESTABLISHED,RELATED -j ACCEPT


    上面的设置是以10.1.1.66内网端口3389映射到外网121.1.2.3的9998端口为例。其他的一对一端口映射一样的设置方法。


二、实现内网共享上网功能

    1、在NAT表的POSTROUTING链上将内网的源地址转换为外网地址:

iptables -t nat -A POSTROUTING -s 10.1.1.0/24 -o eth3 -j SNAT --to-source 121.1.2.3

    2、设置FILTER表的FORWORD链,使内网的消息能够双向通过:

iptables -A FORWARD -i eth0 -s 10.1.1.0/24 -j ACCEPT

iptables -A FORWARD -i eth0 -d 10.1.1.0/24 -j ACCEPT

    3、在内网服务器上将网关设置为10.1.1.8:

route add default gw 10.1.1.8

    4、在内网服务器上设置DNS地址:

#vi /etc/resolv.conf

nameserver xxx.xx.xx.x  //根据实际情况设置

    5、设置DNS端口udp 53端口能够通过,参考上面的一对一NAT端口映射设置进行设置”方法进行设置


特别说明:

    在我的环境当中,iptables表有一个链 RH-Firewall-1-INPUT ,简化了filter表的设置,对于需要通过filter的端口,需要在这个RH-Firewall-1-INPUT链中添加规则。比如:

    iptables -I RH-Firewall-1-INPUT 12 -p tcp --dport 3389 -m state --state NEW -j ACCEPT

    

    



猜你喜欢

转载自blog.51cto.com/yuweibing/2155859