CentOS 7 iptables 防火墙 SNAT DNAT 用法

iptables 命令基本参数和用法

iptables[-t 表名]命令选项[链名][条件匹配][-j 目标动作或跳转]

说明:

表名链名:用于指定 iptables 命令所操作的表和链

命令选项:用于指定管理 iptables 规则的方式(比如:插入、增加、删除、查看等)

条件匹配:用于指定对符合什么样 条件的数据包进行处理

动作跳转:用于指定数据包的处理方式(比如允许通过、拒绝、丢弃、跳转给其它链处理)

参数

作用

-P

设置默认策略:iptables -P INPUT(DROP|ACCEPT)

-F

清空规则链

-L

查看规则链

-A

在规则链的末尾加入新规则

-I   num

在规则链的头部加入新规则

-D  num

删除某一条规则

-s

匹配来源地址IP/MASK,加叹号"!"表示除这个IP外。

-d

匹配目标地址

-i   网卡名称

匹配从这块网卡流入的数据

-o  网卡名称

匹配从这块网卡流出的数据

-p

匹配协议 如tcp,udp,icmp

--dport  num

匹配目标端口号

--sport  num

匹配来源端口号

首先说说局域网内封包的传送

  1. 当一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去。
  2. 如果数据包就是进入本机的,它就会沿着图向下移动,到达INPUT链。数据包到了INPUT链后,任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包会经过OUTPUT链,然后到达POSTROUTING链输出。
  3. 如果数据包是要转发出去的,且内核允许转发,数据包就会如图所示向右移动,经过FORWARD链,然后到达POSTROUTING链输出。

SNAT 和 DNAT 是 iptables 中使用 NAT 规则相关的的两个重要概念。如果内网主机访问外网而经过路由时,源 IP 会发生改变,这种变更行为就是 SNAT。反之当外网的数据经过路由发往内网主机时,数据包中的目的IP(路由器上的公网IP)将修改为内网 IP,这种变更行为就是 DNAT

在 VMware 创建2个虚拟机,环境如下

主机名称内网模拟外网
网关服务器kvm200ens37:10.1.0.200(HOST)ens33:192.168.26.200(NAT)
客户机kvm201ens37:10.1.0.201(HOST)

拓扑图:

一、kvm200 虚拟机

1、创建 2张网卡:一个NAT模式,一个仅主机模式

[root@kvm200 ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.26.200  netmask 255.255.255.0  broadcast 192.168.26.255
        inet6 fd15:4ba5:5a2b:1008:c0d8:937d:ed09:c0d5  prefixlen 64  scopeid 0x0<global>
        inet6 fe80::8735:cc32:f095:3e11  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:21:2a:53  txqueuelen 1000  (Ethernet)
        RX packets 38072  bytes 34377140 (32.7 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 16715  bytes 2201613 (2.0 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.1.0.200  netmask 255.255.255.0  broadcast 10.1.0.255
        inet6 fe80::8830:37df:81ac:3a00  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:21:2a:5d  txqueuelen 1000  (Ethernet)
        RX packets 12565  bytes 1468734 (1.4 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 27327  bytes 51224592 (48.8 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

2、检查网络互通

# 跟客户机 ens37 端口
[root@kvm200 ~]# ping 10.1.0.201 -c 4
PING 10.1.0.201 (10.1.0.201) 56(84) bytes of data.
64 bytes from 10.1.0.201: icmp_seq=1 ttl=64 time=0.436 ms
64 bytes from 10.1.0.201: icmp_seq=2 ttl=64 time=1.17 ms
64 bytes from 10.1.0.201: icmp_seq=3 ttl=64 time=2.39 ms
64 bytes from 10.1.0.201: icmp_seq=4 ttl=64 time=1.35 ms

--- 10.1.0.201 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3030ms
rtt min/avg/max/mdev = 0.436/1.342/2.399/0.702 ms


# 访问外网
[root@kvm200 ~]# ping www.baidu.com -c 4
PING www.a.shifen.com (112.80.248.76) 56(84) bytes of data.
64 bytes from 112.80.248.76 (112.80.248.76): icmp_seq=1 ttl=128 time=24.5 ms
64 bytes from 112.80.248.76 (112.80.248.76): icmp_seq=2 ttl=128 time=26.3 ms
64 bytes from 112.80.248.76 (112.80.248.76): icmp_seq=3 ttl=128 time=23.1 ms
64 bytes from 112.80.248.76 (112.80.248.76): icmp_seq=4 ttl=128 time=24.6 ms

--- www.a.shifen.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3028ms
rtt min/avg/max/mdev = 23.152/24.702/26.397/1.155 ms

3、查看路由

[root@kvm200 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.26.2    0.0.0.0         UG    102    0        0 ens33
10.1.0.0        0.0.0.0         255.255.255.0   U     101    0        0 ens37
192.168.26.0    0.0.0.0         255.255.255.0   U     102    0        0 ens33
二、kvm201 虚拟机

1、创建 1 张网卡:网络选仅主机模式,注意要手动指向 网关服务器 10.1.0.200

vim /etc/sysconfig/network-scripts/ifcfg-ens37

# 省略
......
NAME=ens37
UUID=06bb4b98-8c50-4697-9168-651e5574c32e
DEVICE=ens37
ONBOOT=yes
IPADDR=10.1.0.201
NETMASK=255.255.255.0
GATEWAY=10.1.0.200    # 指向网关服务器
[root@kvm201 ~]# ifconfig
ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.1.0.201  netmask 255.255.255.0  broadcast 10.1.0.255
        inet6 fe80::135d:9bb7:e42:d740  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:6e:81:b3  txqueuelen 1000  (Ethernet)
        RX packets 27742  bytes 32541988 (31.0 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 9728  bytes 1257471 (1.1 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 25  bytes 2640 (2.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 25  bytes 2640 (2.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

2、查看路由表

(1)这里有一条默认网关,手动添加的命令:route add default gw 10.1.0.200

[root@kvm201 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.1.0.200      0.0.0.0         UG    100    0        0 ens37
10.1.0.0        0.0.0.0         255.255.255.0   U     100    0        0 ens37

3、检查网络互通

# 跟网关服务器 ens37 端口
[root@kvm201 ~]# ping 10.1.0.200 -c 4
PING 10.1.0.200 (10.1.0.200) 56(84) bytes of data.
64 bytes from 10.1.0.200: icmp_seq=1 ttl=64 time=0.645 ms
64 bytes from 10.1.0.200: icmp_seq=2 ttl=64 time=1.28 ms
64 bytes from 10.1.0.200: icmp_seq=3 ttl=64 time=1.42 ms
64 bytes from 10.1.0.200: icmp_seq=4 ttl=64 time=1.60 ms

--- 10.1.0.200 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3087ms
rtt min/avg/max/mdev = 0.645/1.240/1.607/0.363 ms
[root@kvm201 ~]# 

# 跟网关服务器 ens33 端口
[root@kvm201 ~]# ping 192.168.26.200 -c 4
PING 192.168.26.200 (192.168.26.200) 56(84) bytes of data.
64 bytes from 192.168.26.200: icmp_seq=1 ttl=64 time=0.709 ms
64 bytes from 192.168.26.200: icmp_seq=2 ttl=64 time=1.08 ms
64 bytes from 192.168.26.200: icmp_seq=3 ttl=64 time=0.966 ms
64 bytes from 192.168.26.200: icmp_seq=4 ttl=64 time=1.04 ms

--- 192.168.26.200 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3066ms
rtt min/avg/max/mdev = 0.709/0.950/1.085/0.149 ms

基础环境已经部署完成,现在 kvm 201是不能上网的,接下来我们配置 SNAT,让它可以上网 

三、配置 SNAT、DNAT

1、网关服务器上开启转发功能

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

# 添加
net.ipv4.ip_forward = 1

# 生效
sysctl -p

2、网关服务器配置SNAT:源地址转换

能够让多个内网用户通过一个外网地址上网,解决了IP资源匮乏的问题,路由器也就使用此技术,使用 POSTROUTING

(1)如果有外网固定IP(本例) 

[root@kvm200 ~]# iptables -t nat -A POSTROUTING -s 10.1.0.0/24 -j SNAT --to-source 192.168.26.200

(2)如果是动态 IP

# MASQUERADE(动态伪装),动态 IP 使用
iptables -t nat -A POSTROUTING -s 10.1.0.0/24 -j MASQUERADE

(3)此时 kvm201 就可以上网了

[root@kvm201 ~]# ping www.baidu.com -c 4
PING www.a.shifen.com (112.80.248.76) 56(84) bytes of data.
64 bytes from 112.80.248.76 (112.80.248.76): icmp_seq=1 ttl=127 time=24.2 ms
64 bytes from 112.80.248.76 (112.80.248.76): icmp_seq=2 ttl=127 time=35.1 ms
64 bytes from 112.80.248.76 (112.80.248.76): icmp_seq=3 ttl=127 time=22.1 ms
64 bytes from 112.80.248.76 (112.80.248.76): icmp_seq=4 ttl=127 time=21.8 ms

--- www.a.shifen.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3092ms
rtt min/avg/max/mdev = 21.892/25.842/35.117/5.429 ms

3、网关服务器配置DNAT:目地地址转换

则能够让外网用户访问局域网内不同的服务器,使用 PREROUTING

(1)如果是本机端口跟其它主机端口转发:

访问服务器 2222 端口转到 内网 kvm201机器 22 端口

[root@kvm200 ~]# iptables -t nat -A PREROUTING -d 192.168.26.200 -p tcp --dport 2222 -j DNAT --to-destination 10.1.0.201:22

(2)如果是本机端口转发

# 将发往本机 80 端口流量 转到本机 8080 端口
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

(3) 宿主机打开 PowerShell 看下是否成功

PS C:\Users\shihua.ma.SBI> ssh root@192.168.26.200 -p 2222
The authenticity of host '[192.168.26.200]:2222 ([192.168.26.200]:2222)' can't be established.
ECDSA key fingerprint is SHA256:kF7UVt4ESc2S9PFATiAJaKLjI9Dvxjp9tsyj5TYuUn4.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[192.168.26.200]:2222' (ECDSA) to the list of known hosts.
root@192.168.26.200's password:
Last login: Thu Mar  9 11:19:03 2023 from 192.168.26.1
[root@kvm201 ~]#

(4)最后我们来看下网关服务器上面的 iptables中NAT表规则

[root@kvm200 ~]# iptables -t nat -nL
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
DNAT       tcp  --  0.0.0.0/0            192.168.26.200       tcp dpt:2222 to:10.1.0.201:22

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
SNAT       all  --  10.1.0.0/24          0.0.0.0/0            to:192.168.26.200

其它常用场景

  1. 到本机应用的数据包:PREROUTING → INTPUT
  2. 由本机转发数据包:PREROUTING → FORWARD → OUTPUT
  3. 由本机应用发出的数据包:OUTPUT → POSTROUTING
  4. 本机作为lvs转发数据包:PREROUTING → INTPUT → IPVS → POSTROUTING 
  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是在 CentOS 上安装 iptables 防火墙的步骤: 1. 首先,使用 root 用户登录您的 CentOS 服务器。 2. 打开终端,执行以下命令安装 iptables: ``` yum install iptables-services ``` 3. 安装完成后,启动 iptables 服务: ``` systemctl start iptables ``` 4. 接着,将 iptables 服务设置为开机自启动: ``` systemctl enable iptables ``` 5. 确认 iptables 服务已经启动: ``` systemctl status iptables ``` 如果状态为 active(运行中),则表示 iptables 服务已经成功启动。 6. 配置 iptables 规则: 在 CentOS 上配置 iptables 规则有两种方式,一种是手动配置,另一种是使用防火墙配置工具。 手动配置: 编辑 /etc/sysconfig/iptables 文件,添加相应的规则。例如,开放 SSH 连接的端口: ``` -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT ``` 配置完毕后,保存文件并重启 iptables 服务使配置生效: ``` systemctl restart iptables ``` 防火墙配置工具: CentOS 提供了防火墙配置工具 firewalld,您可以使用以下命令安装: ``` yum install firewalld ``` 安装完成后,启动 firewalld 服务并设置开机自启动: ``` systemctl start firewalld systemctl enable firewalld ``` 然后,使用 firewall-cmd 命令添加防火墙规则。例如,开放 SSH 连接的端口: ``` firewall-cmd --zone=public --add-port=22/tcp --permanent ``` 配置完毕后,重新加载防火墙规则使其生效: ``` firewall-cmd --reload ``` 以上就是在 CentOS 上安装 iptables 防火墙的步骤,您可以根据需要进行配置。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值