iptables nat 表应用

应用 1

环境:

A 机器两块网卡 ens33(192.168.8.125)、ens37(192.168.100.1),ens33 可以上外网,ens37 仅仅是内部网络,B 机器只有 ens37(192.168.100.100),和 A 机器 ens37 可以通信互联。

准备工作:

  • 两台虚拟机
  • A 机器添加一块网卡 ens37,ens37 的网络连接方式选择‘LAN 区段模式’(内网交换机连接,该模式下 Windows 无法与该客户端连接),开机后并设定 IP 为 192.168.100.1
  • B 机器关闭原有网卡连接,新增网卡 ens37,开机后设定 IP 为 192.168.100.100(网络连接模式选择 LAN 区段,并和 A 机器中的 ens37 网卡选择相同区段)
    设置 ens37 的 IP:

方法 1:直接在命令行使用 ifconfig 命令

[root@localhost ~]# ifconfig ens37 192.168.100.1/24

说明: 该方法只是临时设定 IP,重启后会丢失。


方法 2: 复制 ens33 的配置文件,然后在配置文件里进行设置!


需求:

需求 1: 可以让 B 机器连接外网

  • 步骤一:A 机器打开路由转发
[root@localhost ~]# echo "1" > /proc/sys/net/ipv4/ip_forward

说明:该命令是更改内核设置,打开路由转发功能,默认值是 0.


  • 步骤二:在 A 机器的 nat 表中增加一条规则
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE 
[root@localhost ~]# iptables -t nat -nvL
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain INPUT (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         

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 MASQUERADE  all  --  *      ens33   192.168.100.0/24     0.0.0.0/0    

说明: -o 选项后面跟设备名称,表示出口网卡,MASQUERADE 是伪装、冒充的意思。

  • 步骤三:为 B 设置网关为 A 机器 ens37 的 IP:
[root@localhost ~]# route add default gw 192.168.100.1 
mark
  • 步骤四:配置 DNS(编辑 DNS 配置文件)
[root@localhost ~]# vim /etc/resolv.conf
# Generated by NetworkManager
nameserver 119.29.29.29			//然后使用ping命令检测

说明: 此时 B 机器可以连通外网,但是外网机器无法访问 B 机器,A 机器的作用就类似于一个路由器!


需求 2:让 C 机器可以直接连通 B 机器的 22 端口

  • 步骤一:A 机器打开路由转发
[root@localhost ~]# echo "1" > /proc/sys/net/ipv4/ip_forward

说明:该命令是更改内核设置,打开路由转发功能,默认值是 0.

  • 步骤二:在 A 机器的 nat 表中增加 2 条规则(执行该步骤前先清除 nat 表原有规则)

规则 1:

[root@localhost ~]# iptables -t nat -A PREROUTING -d 192.168.8.125 -p tcp --dport 1122 -j DNAT --to 192.168.100.100:22

规则 2:

[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT --to 192.168.8.125
  • 步骤三:为 B 设置网关为 A 机器 ens37 的 IP:
[root@localhost ~]# route add default gw 192.168.100.1 

应用 2 :iptables 限制 syn 速度

原理: 每 5s 内 tcp 三次握手大于 20 次的属于不正常访问。

[root@localhost ~]# iptables -A INPUT -s ! 192.168.0.0/255.255.255.0 -d 192.168.8.125 -p tcp -m tcp --dport 80 -m state --state NEW -m recent --set --name httpuser --rsource  

[root@localhost ~]# iptables -A INPUT -m recent --update --seconds 5 --hitcount 20 --name httpuser --rsource -j DROP

说明: 其中 192.168.0.0/255.255.255.0 为不受限制的网段,192.168.8.125 为本机 IP。该 iptables 策略,可有效预防 syn 攻击。

应用 3

  • iptables 针对一个网段设置规则:
[root@localhost ~]# iptables -I INPUT -m iprange --src-range 61.4.176.0-61.4.191.255 -j DROP  

iptables 中 DNAT、SNAT 和 MASQUERADE

  • DNAT(Destination Network Address Translation, 目的地址转换 ) 通常被叫做目的映射。
  • SNAT(Source Network Address Translation,源地址转换)通常被叫做源映射。

iptables 中 DNAT 和 SNAT 工作原理:

在任何一个 IP 数据包中,都会有 Source IP Address 与 Destination IP
Address 这两个字段,数据包所经过的路由器也是根据这两个字段是判定数据包是由什么地方发过来的,它要将数据包发到什么地方去。而 iptables 的 DNAT 与 SNAT 就是根据这个原理,对 Source
IP Address 与 Destination IP Address 进行修改。