centos7.6——SNAT和DNAT应用配置

*防火墙基础(iptables)

(1)Linux包过滤防火墙概述

netfilter

  • 位于Linux内核中的包过滤功能体系
  • 称为Linux防火墙的 “ 内核态 ”

iptables

  • 位于/sbin/iptables,用来管理防火墙规则的工具
  • 称为Linux防火墙的“用户态”

上面2种称呼都可以表示Linux防火墙

(2)包过滤的工作层次

  • 主要是网络层、针对ip数据包
  • 体现在对包的ip地址、端口等信息的处理上

在这里插入图片描述

(3)iptables的表、链结构

规则链

规则的作用:对数据包进行过滤或处理

链的作用:容纳各种防火墙规则

链的分类依据:处理包的不同时机

默认包括5中规则链

  1. INPUT : 处理入站数据包
  2. OUTPUT : 处理出站数据包
  3. PORWARD : 处理转发数据包
  4. POSTROUTING 链 : 在进行路由选择后处理数据包
  5. PREROUTING 链 : 在进行路由选择前处理数据包

iptables的表、链结构 2

(4)规则表

表的作用:容纳各种规则链

表的划分依据: 防火墙规则的作用相似

默认包括4个规则表

  1. raw表:确定是否对该数据包进行状态跟踪
  2. mangle 表: 为数据包设置标记
  3. nat 表: 修改数据包中的源、目标ip地址或端口
  4. filter 表:确定是否放行该数据包(过滤)

默认的表、链结构示意图

在这里插入图片描述

(5)数据包过滤的匹配流程

规则表之间的顺序

  • raw——mangle——nat——filter

规则链之间的顺序

  • 入站: PREROUTING——input
  • 出站: output——postrouting
  • 转发:prerouting——forward——postrouting

规则链内的匹配顺序

  • 按顺序依次检查,匹配即停止(LOG策略例外)
  • 若找不到相匹配的规则,则按该链的默认策略处理
  • PREROUTING -INPUT-FORWARD-OUTPUT-POSTROUTING

数据包过滤的匹配流程

iptables安装

  • 关闭firewalld防火墙
  • systemctl stop firewalld.service
  • systemctl disable firewalld.services

iptables开机启动

  • systemctl start iptables.services
  • systemctl start iptables.service
  • systemctl enable iptables.service

(6)iptables 的基本语法

语法构成

(7)iptables [-t 表明 ] 选项 [ 链名 ] [ 条件] [ -j 控制类型]

iptbales -t filter -I INPUT -p icmp -j REJECT

注意事项

  • 不指定表明时,默认指filter 表
  • 不指定链名时,默认指表内的所有链
  • 除非设置链的默认策略,否则必须制定匹配条件
  • 选项、链名、控制类型使用大写字母,其余均为小写

(8)iptables的基本语法

数据包的常用控制类型

  1. ACCEPT:允许通过
  2. DROP:直接丢弃,不给出任何回应
  3. REJECT:拒绝通过,必要时会给出提示
  4. LOG:记录日志信息,然后传给下一条规则继续匹配

(9)iptables的管理选项-添加新的规则

  • -A : 在链的末尾追加一条规则
  • -I :在链的开头(或指定序号)插入一条规则
iptables -t filter -A INPUT -p tcp -j ACCEPT
iptables -I INPUT -p udp -j ACCEPT
iptables -I INPUT -p icmp -j ACCEPT

(10)iptables 的管理选项-查看规则列表

  • -L :列出所有的规则条目
  • -n :以数字形式显示地址、端口等信息
  • -v :以更详细的方式显示规则信息
  • –line-numbers:查看规则时,显示规则的序号

(11)删除、清空规则

  • -D:删除链内指定序号(或内容)的一条规则
  • -F : 清空所有的规则
iptables -F 
iptables -t nat -F
iptables -t mangles -F
iptables -t raw -F

设置默认的策略

  • -P:为指定的链设置默认规则
iptables -t filter -P FORWARD DROP
iptables -P OUTPUT ACCEPT

(12)iptables 常用管理选项汇总

在这里插入图片描述
规则的匹配的条件

通用匹配

  • 可直接使用,不依赖于其他条件或扩展
  • 包括网络协议、IP地址、网络接口等条件

隐含匹配

要求以特定的协议匹配作为前提

包括端口、TCP标记、ICMP类型条件

显式匹配

  • 要求以“-m 扩展模块”的形式明确指出类型
  • 包括多端口、MAC地址、IP范围、数据包状态等条件

规则的匹配条件

常见的通用匹配条件

  • 协议匹配:-p 协议名
  • 地址匹配:-s 源地址、 -d 目的地址
  • 接口匹配: -i 入站网卡、-o 出站网卡

iptables -I INPUT -p icmp -j DROP

iptables -A FORWARD! -p  icmp -j ACCEPT


iptables -A FORWARD -s 192.168.1.11 -j REJECT

iptables -I INPUT -s 10.20.30.0/24 -j DROP

规则的匹配条件

常用的隐含的匹配条件

  • 端口匹配: --sport 源端口、–dport 目的端口

  • ICMP 类型匹配: --ICMP-type icmp 类型


iptables -A RORWARD -s 192.168.2.0/24 -p udp --dport 53 -j ACCEPT

iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT

常用的显式匹配条件

多端口匹配:-m multiport --sports 源端口列表
-m multiport --dports 目的端口列表

ip范围匹配 : -m iprange --src-range IP范围

MAC地址匹配: -m mac --mac-source MAC 地址

状态匹配: -m state --state 连接状态

iptables -A INPUT -p tcp -m multiport -dport 25.80.110.143 -j ACCEPT

iptables -A FORWARD -p tcp -m iprange --src-range 192.168.4.21-192.168.4.28 -j ACCEPT

iptables -A INPUT -m mac --mac-source 00:29:c0:55:3f -j DROP

(13)常用的管理选项汇总

在这里插入图片描述

一、实验拓扑图

二、实验环境

centos 7.6 三台

  • 防火墙服务器:VM《8》
  • 内网客户端:VM《3》
  • 外网服务端:VM《6》
  • 三台虚拟机都是仅主机模式,基于VMnet1网卡

三、实验描述

四、实验步骤

4.1 防火墙服务器的配置

(1)配置双网卡

网卡也是作为内网客户机和外网服务的网关,路由选择功能。
内网卡ens33配置:192.168.100.1 /24

外网口ens36配置:12.0.0.1 /24

[root@localhost /]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=7a93d8ed-42b5-46aa-94a4-a5d49d46712a
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.100.1
NETMASK=255.255.255.0
wq
[root@localhost /]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp -p ifcfg-ens33 ifcfg-ens36
[root@localhost network-scripts]# vim ifcfg-ens36
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens36
DEVICE=ens36
ONBOOT=yes
IPADDR=12.0.0.1
NETMASK=255.255.255.0
wq                     
[root@localhost /]# systemctl start network  //重启网卡
[root@localhost network-scripts]# vim /etc/sysctl.conf  //设置路由转发功能
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv4.ip_forward=1  //添加路由转发的功能
[root@localhost network-scripts]# sysctl -p   //直接设置启动生效
net.ipv4.ip_forward = 1
[root@localhost network-scripts]# 


(2)清空防火墙规则和nat规则

[root@localhost network-scripts]# iptables -F  //清空防火墙规则
[root@localhost network-scripts]# iptables -t nat -F  //清空防火墙nat规则
[root@localhost network-scripts]# iptables -t nat -L  //查看防火墙nat规则
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

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         
[root@localhost network-scripts]# 

(3)设置SNAT防火墙规则

设置SNAT

客户端访问外网服务端时,通过网关防火墙设置SNAT配置之后,就会内网ip地址转换为外网ip地址。

yum -y install iptables-service
systemctl restart iptables-service
systemctl enable iptables-service

[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.100.100 -o ens36 -j SNAT --to-source 12.0.0.1

(4)设置DNAT防火墙规则
设置DNAT

将外网的IP地址和内网的IP地址做端口映射。

[root@localhost ~]# iptables -t nat -I PREROUTING -d 12.0.0.1 -i ens36 -p tcp --dport 80 -j DNAT --to-destination 192.168.100.100
[root@localhost ~]# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
DNAT       tcp  --  anywhere             localhost.localdomain  tcp dpt:http to:192.168.100.100

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  --  192.168.100.100      anywhere             to:12.0.0.1
[root@localhost ~]# 
[root@localhost ~]# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
DNAT       tcp  --  anywhere             localhost.localdomain  tcp dpt:http to:192.168.100.100

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  --  192.168.100.100      anywhere             to:12.0.0.1


4.2 外网服务端配置

  • 配置网卡ens33 :12.0.0.20/24 网关:12.0.0.1
  • 在未配置SNAT规则之前,内网客户端访问外网。

(1)httpd的日志文件 显示查看到内网地址192.168.100.100

(2)yum -y install httpd //安装Apache服务,如果没有现网可以搭建本地源

(3)systemctl restart httpd //开启Apache服务

(4)cd /var/log/httpd/access_log

在这里插入图片描述
(5)关闭防火墙规则**

iptables -F //清空防火墙规则

iptables -t nat -F //清空防火墙nat规则

iptables -t nat -L //查看防火墙nat规则

防火墙的服务器的配置策略之后

外网访问内网地址转换

在这里插入图片描述

查看客户端的Apache的日志文件
cat /var/log/httpd/access_log
在这里插入图片描述

4.3 内网客户端配置

  • 网卡ens33:192.168.100.100/24 网关:192.168.100.1指向网关服务器VM 《8》
  • 安装Apache服务
  • yum -y install httpd
  • 开启Apache服务
  • systemctl restart httpd

(1)客户端与网关防火墙服务端VM《8》的双网卡互通。

在这里插入图片描述
(2)关闭防火墙规则

iptables -F //清空防火墙规则

iptables -t nat -F //清空防火墙nat规则

iptables -t nat -L //查看防火墙nat规则

(3)访问外网Apache

在这里插入图片描述

查看外网Apache的日志文件,内网地址192.168.100.100成功转换为外网地址12.0.0.1

cat /var/log/httpd/access_log
在这里插入图片描述

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐