1.概念

    网络地址转换用于控制网络封包的表面源或所需目标地址。

    基于主机的简单防火墙只具有 INPUT 链中的规则,以 ACCEPT 或 REJECT 封包,但是在专用(不可路由)网络的网关或路由器上,通常使用 PREROUTING 和 POSTROUTING 链修改封包。nat 表使用三条链: PREROUTING 、 OUTPUT 和 POSTROUTING 。当路由器修改通过其的网络通信的源或目标 IP 地址或端口时,进行网络地址转换。它用于映射使用单个 IP 地址的计算机网络,以使其可以共享单个公共地址并隐藏其内部网络( MASQUERADE 或 SNAT )。它还用于将发送到一个 IP 地址的通信重定向到另一个 IP 地址。此目标 NAT 用于端口转发(通过防火墙外部的端口至防火墙内部的服务)并用于透明地重定向至代理服务。

    MASQUERADE 目标使源 IP 地址更改为与开启防火墙的接口的 IP 相匹配。目标将响应发送回该接口的 IP地址。连接跟踪自动将返回通信转换为匹配的内部 IP 地址和端口(基于连接两端的 IP 地址和端口进行跟踪)。 SNAT 目标通过选项 --to-source 使源 IP 地址更改为指定的 IP 地址。

    # iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

    DNAT 目标通过— to-destination 选项使目标 IP 地址更改为与指定的 IP 地址相匹配。路由器将封包转发到该地址;这是在做出路由决策之前使用链的原因。连接跟踪自动将响应发送回具有原始 IP 地址的原始源而不是新源。

# iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.0.254

DNAT 示例:

# iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-dest 192.168.0.250

# iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-dest 192.168.0.200:3128 (重定向)

SNAT 示例:

# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE (伪装)

# iptables -t nat -A POSTROUTING -j SNAT --to-source 192.168.0.253


2.filter表  只允许sshd,dns,http,https,ftp服务

   vim /etc/vsftpd/vsftpd.conf 

      pasv_max_port=5000

      pasv_min_port=5000

 

    iptables -F 

    iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

    iptables -A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT

    iptables -A INPUT -m state --state NEW -p tcp --dport 21 -j ACCEPT

    iptables -A INPUT -m state --state NEW -p tcp --dport 20 -j ACCEPT

    iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT

    iptables -A INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT

    iptables -A INPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT

    iptables -A INPUT -m state --state NEW -p tcp --dport 953 -j ACCEPT

    iptables -A INPUT -m state --state NEW -p tcp --dport 5000 -j ACCEPT

    iptables -A INPUT -m state --state NEW -s 172.25.6.254 -p tcp --dport 1024:  -j ACCEPT


3.NAT表  内外网访问

    3.1实验环境:

        真机 172.25.254.6        (外网)

        虚拟机一    172.25.254.106/172.25.6.1

        虚拟机二    172.25.6.10      (内网)


    3.2内网访问外网

       3.2.1虚拟机一配置

[root@server106 ~]# vim /etc/sysctl.conf 

      net.ipv4.ip_forward = 1    #开通内核路由功能

[root@server106 ~]# sysctl -p

[root@server106 ~]# iptables -F

[root@server106 ~]#  iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 172.25.254.106##添加内网到外网的策略

      3.2.2虚拟机二配置

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 

       GATEWAY=172.25.6.1

[root@localhost ~]# /etc/init.d/network restart

      3.2.3测试:虚拟机二可ping通254网段 172.25.254.6

[root@localhost ~]# ping 172.25.254.6   

PING 172.25.254.6 (172.25.254.6) 56(84) bytes of data.

64 bytes from 172.25.254.6: icmp_seq=1 ttl=64 time=0.102 ms

64 bytes from 172.25.254.6: icmp_seq=2 ttl=64 time=0.127 ms

64 bytes from 172.25.254.6: icmp_seq=3 ttl=64 time=0.164 ms


    3.3外网访问内网

       3.3.1虚拟机一配置

[root@server106 ~]# iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 172.25.254.106  ##添加外网内网的策略

       3.3.2虚拟机二    ### 添加测试页

[root@localhost ~]# vim /var/www/html/index.html 

    test page

[root@localhost ~]# /etc/init.d/httpd start

     3.3.3真机端测试