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真机端测试