iptables--SNAT和DNAT的配置

一、iptables表、链结构的概述

1.1 规则链

  • 规则的作用:对数据包进行过滤或处理
  • 链的作用:容纳各种防火墙规则
  • 链的分类依据:处理数据包的不同时机

1.2 默认包括的5个规则链

链名 作用
INPUT 处理入站数据包 ## 进防火墙读
OUTPU 处理出站数据包 出防火墙读
FORWARD 处理转发数据包 在数据包进入防火墙还未出去时处理,即转发时处理
POSTROUTING 在进行路由选择后处理数据包 ## NAT的时候用的 防火墙也可以做NAT功能 由内向外时用,先查路由表
PREROUTING 在进行路由选择前处理数据包 ## 也是NAT的时候用的 外面访问里面的时候用 做映射的时候 先转换目标IP 再查询

1.3 规则表

  • 表的作用:容纳各种规则链
  • 表的划分依据: 防火墙规则的作用相似

1.4 默认包括四个规则表

表名 作用
raw表 确定是否对该数据包进行状态追踪 DBUG测试的时候用
mangle表 为数据包设置标记 打完标记 raw追踪 这两个表配合使用
nat表 修改数据包中的源、目标IP地址或端口 地址转换用到,IP映射,端口映射 都会用到
filter表 确定是否放行该数据包 ## 核心 用的最多,数据转发一定会用到,默认用的就是这个 表

1.5 表、链的具体对应关系

raw 表 PREROUTING链 OUTPUT链
mangle表 PREROUTING链 POSTROUTING链 INPUT链 OUTPUT链 FORWARD链
nat表 PREROUTING链 POSTROUTING链 OUTPUT链
filter表 INPUT链 FORWARD链 OUTPUT链

1.6 数据包过滤的匹配流程

  • 规则表之间的顺序
    raw-mangle-nat-filter
  • 规则链之间的顺序
    入站:PREROUTING-INPUT
    出站:OUTPUT-POSTROUTING
    转发:PREROUTING-FORWARD-POSTROUTING

1.7 规则链内的匹配顺序

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

二、 iptables的基本语法

2.1 基本语法结构

iptables [-t 表名 ] 选项 [ 链名 ] [ 条件] [ -j 控制类型]
  • 注意事项
    不指定表名时,默认指filter表
    不指定链名时,默认指表内的所有链
    除非设置链的默认策略,否则必须指定匹配条件
    选项、链名、控制类型、使用大写字母,其他用小写。

2.2 数据包的常见控制类型

控制类型 解释
ACCEPT 允许通过
DROP 直接丢弃,不给出任何提示
REJECT 拒绝通过,必要时会给出提示
LOG 记录日志信息,然后传给下一条规则继续匹配

2.3 管理选项

类别 选项 用途
添加新的规则 -A 在链的末尾追加一条规则
添加新的规则 -I 在链的开头,或指定序号插入一条规则
查看规则列表 -L 列出所有的规则条目
查看规则列表 -n 以数字的形式显示地址、端口等信息
查看规则列表 -v 以更详细的方式显示规则
查看规则列表 -line-numbers 查看规则时,显示序列号
清空、删除规则 -D 删除链内指定序号(或内容)的一条规则
清空、删除规则 -F 清空所有的规则
设置默认策略 -P 为指定的链设置默认规则

2.4 规则的匹配条件

  • 通用匹配
    可直接使用,不依赖于其他条件或扩展
    包括网络协议、IP地址、网络接口等条件
  • 隐含匹配
    要求以特定的协议匹配作为前提
    包括端口、TCP标记、ICMP 类型等条件
  • 显示匹配
    要求以 “-m 扩展模块”的形式明确指出类型
    包括多端口、MAC地址、IP范围、数据包状态等条件。
类别 条件类型 用法
通用匹配 协议匹配 -p 协议名
通用匹配 地址匹配 -s 源地址 -d 目的地址
通用匹配 接口匹配 - i 入站网卡 -o 出站网卡
隐含匹配 端口匹配 -sport 源端口 -dport 目的端口
隐含匹配 ICMP类型匹配 -icmp-type ICMP类型
显示匹配 多端口匹配 -m multiport --sports
显示匹配 IP范围匹配 -m iprange --src-range IP范围
显示匹配 MAC -m mac --mac-source MAC地址
显示匹配 状态匹配 -m state --state 连接状态

三、SNAT和DNAT 实验

  • 实验环境
    三台CentOS 7.6 虚拟机
    一台 配置双网卡代表防火墙,ens33代表内网网关 ens36网卡 代表外部网关
    另一台代表外部服务器 ens33网卡 与ens36在同一网段 互通
    一台代表内部服务器 ens33网卡 与防火墙ens36在同一网段 互通
  • 实验步骤
    双网卡的虚拟机与另一台虚拟机都开启apache服务
    清空双网卡防火墙规则 配置SNAT与DNAT规则
  • 实验目的
    内部双网卡虚拟机 访问对方网站,对方日志记录为 SNAT规则指定的地址访问
    外部通过访问 DNAT规则配置的地址,访问内部服务器网站,内部服务器网站日志记录访问的地址来自DNAT规则配置的地址

3.1 防火墙配置

  • 网卡地址配置
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.233.200  netmask 255.255.255.0  broadcast 192.168.233.255
        inet6 fe80::1199:c740:2050:ac62  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:e7:9d:50  txqueuelen 1000  (Ethernet)
        RX packets 275  bytes 27081 (26.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 274  bytes 23792 (23.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@promote ~]# ifconfig ens36
ens36: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 12.0.0.1  netmask 255.255.255.0  broadcast 12.0.0.255
        inet6 fe80::2497:36b:6870:267f  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:e7:9d:5a  txqueuelen 1000  (Ethernet)
        RX packets 133  bytes 11554 (11.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 40  bytes 4960 (4.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

  • 清空防火墙
[root@promote ~]# iptables -F  ## 清空防火墙
[root@promote ~]# setenforce 0  ## 关闭核心防护

3.2 外部服务器配置

  • 网卡配置
[root@localhost ~]# ifconfig ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 12.0.0.12  netmask 255.255.255.0  broadcast 12.0.0.255
        inet6 fe80::9c9:3acb:1c5f:375a  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:71:b6:ad  txqueuelen 1000  (Ethernet)
        RX packets 150  bytes 14661 (14.3 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 43  bytes 5479 (5.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

  • 开启apache服务
[root@promote ~]# yum -y install httpd
[root@promote ~]# systemctl start httpd
[root@promote ~]# iptables -F  ## 清空防火墙
[root@promote ~]# setenforce 0  ## 关闭核心防护

3.3 内部服务器配置

[root@promote httpd]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
IPADDR=192.168.233.50
NETMASK=255.255.255.0
GATEWAY=192.168.233.200

  • 开启apache服务
[root@promote ~]# yum -y install httpd
[root@promote ~]# systemctl start httpd
[root@promote ~]# iptables -F  ## 清空防火墙
[root@promote ~]# setenforce 0  ## 关闭核心防护

3.3 SNAT与DNAT规则的配置

iptables -t nat -I PREROUTING -d 12.0.0.1 -i ens36 -p tcp --dport 80 -j DNAT  --to-destination 192.168.233.200
iptables -t nat -I POSTROUTING -s 192.168.233.200 -o ens36 -j SNAT --to-source 12.0.0.1

猜你喜欢

转载自blog.csdn.net/weixin_47219725/article/details/107857575