当前位置:   article > 正文

防火墙基础----iptables_12.0.0.266

12.0.0.266

防火墙基础----iptables

一: iptables概念

1.1: Linux包过滤防火墙概述

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

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

  • 包过滤的工作层次

    主要是网络层,针对IP数据包

    体现在对包内的IP地址,端口等信息的处理上

    mark

1.2: iptables的表,链结构

1.2.1: 五链

  • 规则链

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

  • 链就是位置:共有五个

    • 进路由(PREROUTING)
    • 进系统(INPUT)
    • 转发(FORWARN)
    • 出系统(OUTPUT)
    • 出路由(POSTROUTING)
  • 默认包括5种规则链

    INPUT: 处理入站数据包
    OUTPUT: 处理出站数据包
    FORWARD: 处理转发数据包
    POSTROUTING链: 在进行路由选择后处理数据包,用于NAT地址转换; (所有的数据包出来的时候都先由这个链处理)
    PREROUTING链: 在进行路由选择前处理数据包,用于NAT地址转换;(所有的数据包进来的时候都先由这个链处理)

  • mark

  • 表就是存储的规则
    数据包到了该链处,会去对应表中查询设置的规则,然后决定是否放行,丢弃,转发还是修改等操作

1.2.2: 四表

  • filter表——过滤数据包(filter是默认的表,在使用iptables命令进行配置规则的时候,不特指其他的表就会默认filter)
  • Nat表——用于网络地址转换(IP,端口)
  • Mangle表——修改数据包的服务类型,TTL,并且可以配置路由实现QOS
  • Raw表——决定数据包是否被状态跟踪机制处理filter表——过滤数据包(filter是默认的表,在使用iptables命令进行配置规则的时候,不特指其他的表就会默认filter)Nat表——用于网络地址转换(IP,端口)Mangle表——修改数据包的服务类型,TTL,并且可以配置路由实现QOSRaw表——决定数据包是否被状态跟踪机制处理

1.2.3:四表五链之间的关系

  • 表包含链

    链包含规则

mark

1.2.4: 数据包过滤的处理流程

  • 规则表之间的顺序
    raw>mangle- >nat > filter
  • 规则链之间的顺序
    入站: PREROUTING>INPUT
    出站: OUTPUT>POSTROUTING
    转发: PREROUTING→FORWARD→POSTROL JTING
  • 规则链内的匹配顺序
    按顺序依次检查,匹配即停止(LOG策略例外)
    若找不到相匹配的规则,则按该链的默认策略处理
  • mark

二:iptables基本语法,管理选项与规则匹配条件

2.1: iptables安装

  • CentOS 7默认使用firewalld防火墙,若想使用iptables防火墙,必须先关闭firewalld防火墙

  • 关闭firewalld 防火墙

  • [root@localhost ~]# systemctl stop firewalld.service
    [root@localhost ~]# systemctl disable firewalld.service
    
    • 1
    • 2
  • 安装iptables防火墙

    [root@localhost ~]# yum -y install iptables iptables-services
    
    • 1
  • 设置iptables开机启动

    [root@localhost ~]# systemctl start iptables.service
    [root@localhost ~]# systemctl enable iptables.service
    
    • 1
    • 2
  • 安装iptables防火墙服务

    [root@localhost ~]# yum -y installjiptables iptables-services
    
    • 1

2.2: iptables 基本命令

  • iptables语法格式

    iptables [-t 表名] 选项 [链名] [条件] [-j 控制类型]
    //如果不指定表名,则会默认指定filter//不指定链名时,默认指表内的所有链
    //除非设置链的默认策略,否则必须指定匹配条件
    //选项,链名,控制类型使用大写字母,其余均为小写
    
    • 1
    • 2
    • 3
    • 4
    • 5
    [root@client ~]# iptables -t filter -I INPUT -p icmp -j REJECT
    //指定filter表 指定INPUT链 指定icmp协议 指定控制类型拒绝 
    
    • 1
    • 2
  • 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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
  • iptables命令使用总结

    所有链名必须大写
    INPUT/OUTPUT/FORWARD/PREROUTING/POSTROUTING
    所有表名必须小写
    filter/nat/mangle
    所有动作必须大写
    ACCEPT/DROP/SNAT/DNAT/MASQUERADE
    所有匹配必须小写
    -s/-d/-m <module_name>/-p
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

2.3: iptables 的管理选项

  • 数据包的常见控制类型

    ACCEPT: 允许通过

    DROP: 直接丢弃,不给出任何回应

    REJECT: 拒绝通过,必要时给出提示

    LOG: 记录日志信息,然后传给下一条规则继续匹配

  • iptables 的管理选项

    添加新的规则

    • -A: 在链的末尾追加一条规则

    • -I: 在链的开头(或指定序号) 插入一条规则

    • [root@client ~]# iptables -t filter -A INPUT -p tcp -j ACCEPT 
      [root@client ~]# iptables -I INPUT -p udp -j ACCEPT 
      [root@client ~]# iptables -I INPUT 2 -p icmp -j ACCEPT //在第二条前插入规则
      
      • 1
      • 2
      • 3
    • -L: 列出所有的规则条目

    • -n: 以数字形式显示地址,端口等信息

    • -v: 以更详细的方式显示地址,端口等信息

    • –line-numbers: 查看规则时,显示规则的序号

    • 注意-n L INPUT 不能写成 -Ln INPUT L 要紧跟着链

      [root@client ~]# iptables -L -t filter     //查看filter列表
      Chain INPUT (policy ACCEPT)
      target     prot opt source               destination         
      ACCEPT     udp  --  anywhere             anywhere            
      ACCEPT     icmp --  anywhere             anywhere            
      REJECT     icmp --  anywhere             anywhere        
      Chain FORWARD (policy ACCEPT)
      target     prot opt source               destination         
      ACCEPT     all  --  anywhere             192.168.122.0/24     
      ACCEPT     all  --  192.168.122.0/24     anywhere            
      ACCEPT     all  --  anywhere             anywhere            
      REJECT     all  --  anywhere             anywhere             
      REJECT     all  --  anywhere             anywhere  
      Chain OUTPUT (policy ACCEPT)
      target     prot opt source               destination         
      ACCEPT     udp  --  anywhere             anywhere            
      ........
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      [root@client ~]# iptables -nL INPUT     //以数字形式查看INPUT链的规则
      Chain INPUT (policy ACCEPT)
      target     prot opt source               destination         
      ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0           
      ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
      REJECT     icmp --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
      ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0            udp dpt:53
      ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:53
      ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0            udp dpt:67
      ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:67
      ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0    
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      [root@client ~]# iptables -nL INPUT --line-number   //显示规则的时候显示进程号
      Chain INPUT (policy ACCEPT)
      num  target     prot opt source               destination         
      1    ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0           
      2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
      3    REJECT     icmp --  0.0.0.0/0            0.0.0.0/0 
      .............
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
    • 删除,清空规则

      -D: 删除链内指定序号(或内容)的一条规则; 后面加上序列号

      -F: 清空所有的规则

      [root@client ~]# iptables -D INPUT 3   '删除INPUT链的序列号为3的规则'
      [root@client ~]# iptables -F           '默认清空filter表的所有链'
      [root@client ~]# iptables -t nat -F    '清空NAT表的所有链'
      [root@client ~]# iptables -t mangle -F '清空mangle表的所有链'
      [root@client ~]# iptables -t raw -F    '清空raw表的所有链'
      
      • 1
      • 2
      • 3
      • 4
      • 5
    • 设置默认策略

      -P: 为指定的链设置默认规则

      [root@client ~]# iptables -t filter -P FORWARD DROP 
      'filter表的FORWARD的链设置默认规则'
      [root@client ~]# iptables -P OUTPUT ACCEPT
      'OUTPUT链默认设置接收'
      
      • 1
      • 2
      • 3
      • 4
  • 类别选项用途
    添加新的规则-A在链的末尾追加一条规则
    -l在链的开头(或指定序号)插入-条规则
    查看规则列表-L列出所有的规则条目
    -n以数字形式显示地址、端口等信息
    -v以更详细的方式显示规则信息
    –line-numbers查看规则时,显示规则的序号
    删除,清空规则-D删除链内指定序号(或内容)的一条规则
    设置默认策略-F清空所有的规则
    -P为指定的链设置默认规则

2.4: 规则的匹配条件

2.4.1: 三种匹配方式

  1. 通用匹配

    可直接使用,不依赖于其他条件或扩展

    包括网络协议,IP地址,网络接口

  2. 隐含匹配

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

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

  3. 显式匹配

    要求以" -m 扩展模块" 的形式明确指出类型

    包括多端口,MAC地址,IP范围,数据包状态等条件

2.4.2: 常见的通用匹配条件

  • 协议匹配: -p 协议名

  • 地址匹配: -s 源地址,-d 目的地址

  • 接口匹配: -i 入站网卡, -o 出站网卡

    [root@client ~]# iptables -I INPUT -p icmp -j DROP
    '在INPUT链首部插入禁用icmp协议规则'
    [root@client ~]# iptables -A FORWARD ! -p icmp -j ACCEPT
    '在FORWARD链尾部天机除了icmp协议的其他协议都允许的规则'
    [root@client ~]# iptables -A FORWARD -s 192.168.1.11 -j REJECT
    '在FORWARD尾部添加来自192.168.1.1拒绝通过必要时给提示的规则'
    [root@client ~]# iptables -I INPUT -s 10.20.30.0/24 -j DROP
    '在INPUT链首部插入10.20.30.0/24网段拒绝通过,不给提示信息的规则'
    [root@client ~]# iptables -A INPUT -i ens33 -s 20.0.0.0/16 -j DROP
    '在INPUT链首部插入
    [root@client ~]# iptables -A INPUT -i ens33 -s 10.0.0.0/8 -j DROP
    '在INPUT链首部插入 指定入站网卡ens33对10.0.0.0/8网段拒绝通过的规则'
    [root@client ~]# iptables -A INPUT -i ens33 -s 172.16.0.0/12 -j DROP
    在INPUT链首部插入 指定入站网卡ens33对172.16.0.0/12的网段拒绝通过'
    [root@client ~]# iptables -nL INPUT
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination         
    DROP       all  --  20.0.0.0/16          0.0.0.0/0           
    DROP       all  --  10.0.0.0/8           0.0.0.0/0           
    DROP       all  --  172.16.0.0/12        0.0.0.0/0   
    '拒绝以上网段通过'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

2.4.3: 常用的隐含匹配条件

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

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

    8:请求 ; 0:回显 ; 3:不可达

    [root@client ~]# iptables -A FORWARD -s 192.168.4.0/24 -p udp --dport 53 -j ACCEPT
    '在中间处理链尾部添加来自192.168.4.0/24 udp协议 目标端口号为53 允许通过防火墙的规则(DNS)'  
    [root@client ~]# iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT
    '在入口添加端口为tcp,目标端口号为20,21允许通过的规则(FTP)'
    
    • 1
    • 2
    • 3
    • 4
    [root@client ~]# iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT
    [root@client ~]# iptables -A INPUT -p icmp --icmp-type 8 -j DROP
    [root@client ~]# iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
    [root@client ~]# iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT
    [root@client ~]# iptables -A INPUT -p icmp -j DROP
    
    • 1
    • 2
    • 3
    • 4
    • 5

2.4.4: 常用的显示匹配条件

  • 常用的显示匹配条件

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

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

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

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

      [root@client ~]# iptables -A INPUT -p tcp -m multiport --dport 25,80,110,143 -j ACCEPT
      [root@client ~]# iptables -A FORWARD -p tcp -m iprange --src-range 192.168.4.21-192.168.4.28  -j ACCEPT
      [root@client ~]# iptables -A INPUT  -m mac --mac-source 00:0c:29:c0:55:3f -j ACCEPT
      
      • 1
      • 2
      • 3
      [root@client ~]# iptables -P INPUT DROP
      [root@client ~]# iptables -I INPUT -p tcp -m multiport --dport 80  -j ACCEPT
      [root@client ~]# iptables -I INPUT -p tcp -m state --state ESTABLISHED  -j ACCEPT
      
      • 1
      • 2
      • 3

2.4.5: 常用匹配条件总结

  • 类别条件类型用法
    通用匹配协议匹配-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策略

3.1: SNAT策略

mark

  • NAT: network address translation
    PREROUTING,INPUT,OUTPUT,POSTROUTING
    请求报文:修改源/目标IP,由定义如何修改
    响应报文:修改源/目标IP,根据跟踪机制自动实现

  • ·PREROUTING:修改到达防火墙数据包的目的IP地址

    ·POSTROUTING:修改要离开防火墙数据包的源IP地址

    ·OUTPUT:修改本地产生的数据包的目的IP地址

  • 应用环境: 局域网主机共享单个公网IP地址介入Internet

  • snat策略的原理: 源地址转换, Source Network Address Translation

    修改数据包源地址

3.2: SNAT介绍

  • SNAT:source NAT POSTROUTING, INPUT
    让本地网络中的主机通过某一特定地址访问外部网络,实现地址伪装
    请求报文:修改源IP

  • 改变数据包的源地址。当内网数据包到达防火墙后,防火墙会使用外部地址替换掉数据包的源IP地址(目的IP地址不变),使网络内部主机能够与网络外部主机通信。

  • 前提条件:

    1. 局域网各主机正确设置IP地址/子网掩码
    2. 局域网各主机正确设置默认网关地址
    3. linux网关支持IP路由转发
  • SNAT工作过程:
    本机IP 192.168.1.10
    网关上的外网IP是111.111.111.111
    本机数据包发送到网关,此时源IP是192.168.1.10,网关记录后在POSTROUTING链上把源IP改为111.111.111.111再发送

  • 语法:

    iptables -t nat -A POSTROUTING -s LocalNET ! -d LocalNet -j SNAT --to-source ExtIP
    
    • 1

    -t: 指定规则表

    -A: 添加一条规则到某一条规则链中

    -s: 指定数据包的源IP地址或网段

    -o: 指定数据包从哪一块网卡发出去

    -j: 指定一个默认策略(动作)来处理数据包

    –to-source: 指定执行SNAT策略后数据包的源IP

  • 示例:

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source 111.111.111.111
  • 1

如果是动态IP则需要MASQUERADE

如果是动态IP则需要MASQUERADE

  • MASQUERADE:动态IP,如拨号网络
    –to-ports port[-port]
    –random

  • 示例:

    iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE
    
    • 1

3.3: DNAT策略

DNAT

  • DNAT:destination NAT PREROUTING , OUTPUT
    把本地网络中的主机上的某服务开放给外部网络访问(发布服务和端口映射),但隐藏真实IP
    请求报文:修改目标IP

  • 改变数据包的目的地址。当防火墙收到来自外网的数据包后,会将该数据包的目的IP地址进行替换(源IP地址不变),重新转发到内网的主机。

  • DNAT工作过程:
    跟SNAT相反,DNAT是网关收到指定端口的数据包后发送到指定内网IP上

  • 语法:

    –to-destination [ipaddr[-ipaddr]][:port[-port]]
    iptables -t nat -A PREROUTING -d ExtIP -p tcp|udp --dport PORT -j DNAT --to-destination InterSeverIP[:PORT]
    
    • 1
    • 2
  • 示例:

 iptables -t nat -A PREROUTING -d 111.111.111.111 -p tcp --dport 22 -j DNAT --to-destination 192.168.1.10
  • 1

REDIRECT

REDIRECT也可以叫转发,属于NAT表
可用于:PREROUTING OUTPUT 自定义链
通过改变目标IP和端口,将接受的包转发至不同端口
–to-ports port[-port]

示例:
把本机8888收到的数据包转到80端口
iptables -t nat -A PREROUTING -d 192.168.1.10 -p tcp --dport 8888 -j REDIRECT --to-ports 80

四: iptables规则实验

mark

环境规划192.168.100.0网段是内网,12.0.0.0网段是外网

4.1: 配置中间一台充当防火墙设备

选择双网卡,绑定VM1

mark

mark

[root@firewalld network-scripts]# vim 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=8fe99cb4-16c9-430d-90cb-13ed27b80c3e
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.100.1
PREFIX=24
[root@firewalld network-scripts]# vim ifcfg-ens36
OXY_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     
PREFIX=24
[root@firewalld network-scripts]# systemctl restart network

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
[root@firewalld ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward=1    //开启路由转发功能
[root@firewalld ~]# sysctl -p
net.ipv4.ip_forward = 1
[root@firewalld ~]# iptables -F    //清空防火墙规则
[root@firewalld ~]# iptables -t nat -F //清空NAT表防火墙规则,等会自己定义规则
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

4.2: 内网客户机设置

mark

[root@internal ~]# 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=e927c915-1f32-4f8e-b4d4-77c7a3ed4823
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.100.10
PREFIX=24
GATEWAY=192.168.100.1
[root@internal ~]# systemctl restart network
[root@internal ~]# ping 192.168.100.1
PING 192.168.100.1 (192.168.100.1) 56(84) bytes of data.
64 bytes from 192.168.100.1: icmp_seq=1 ttl=64 time=0.861 ms
64 bytes from 192.168.100.1: icmp_seq=2 ttl=64 time=1.12 ms
64 bytes from 192.168.100.1: icmp_seq=3 ttl=64 time=1.49 ms
^C
--- 192.168.100.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 0.861/1.160/1.493/0.259 ms
[root@internal ~]# ping 12.0.0.1
PING 12.0.0.1 (12.0.0.1) 56(84) bytes of data.
64 bytes from 12.0.0.1: icmp_seq=1 ttl=64 time=0.658 ms
64 bytes from 12.0.0.1: icmp_seq=2 ttl=64 time=1.21 ms
64 bytes from 12.0.0.1: icmp_seq=3 ttl=64 time=0.634 ms
^C
--- 12.0.0.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2007ms
rtt min/avg/max/mdev = 0.634/0.834/1.210/0.266 ms
[root@internal ~]# 

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

4.3: 配置外网客户机

[root@extenal ~]# yum install -y httpd
[root@extenal ~]# systemctl start httpd
[root@extenal ~]# iptables -F
[root@extenal ~]# iptables -t nat -F
  • 1
  • 2
  • 3
  • 4

mark

[root@extenal ~]# 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="8fe99cb4-16c9-430d-90cb-13ed27b80c3e"
DEVICE="ens33"
ONBOOT="yes"
IPADDR="12.0.0.12"
PREFIX="24"
GATEWAY="12.0.0.1"
[root@extenal ~]# systemctl restart network
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

此时内网客户机可以访问外部客户机web界面

mark

//在外部客户机httpd的日志可以看到内网192.168.100.10访问了页面
[root@extenal ~]# cd /var/log/httpd
[root@extenal httpd]# ls
access_log  error_log
[root@extenal httpd]# cat access_log 
.....
192.168.100.10 - - [30/Jul/2020:19:52:12 +0800] "GET /noindex/css/fonts/Bold/OpenSans-Bold.ttf HTTP/1.1" 404 238 "http://12.0.0.12/noindex/css/open-sans.css" "Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0"
192.168.100.10 - - [30/Jul/2020:19:52:12 +0800] "GET /favicon.ico HTTP/1.1" 404 209 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

4.4: 配置SNAT

下面在防火墙上配置NAT转换换成12.0.0.1来去访问外部客户机web

[root@firewalld network-scripts]# iptables -t nat -I POSTROUTING -s 192.168.100.10 -o ens36 -j SNAT --to-source 12.0.0.1
  • 1

刷新内部访问页面也能够访问

mark

但是再查看外部客户机访问日志,

[root@extenal httpd]# cat access_log
12.0.0.1 - - [30/Jul/2020:19:57:31 +0800] "GET /noindex/css/fonts/Light/OpenSans-Light.ttf HTTP/1.1" 404 240 "http://12.0.0.12/noindex/css/open-sans.css" "Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0"
12.0.0.1 - - [30/Jul/2020:19:57:31 +0800] "GET /noindex/css/fonts/Bold/OpenSans-Bold.ttf HTTP/1.1" 404 238 "http://12.0.0.12/noindex/css/open-sans.css" "Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0"
::1 - - [30/Jul/2020:19:57:36 +0800] "OPTIONS * HTTP/1.0" 200 - "-" "Apache/2.4.6 (CentOS) (internal dummy connection)"

  • 1
  • 2
  • 3
  • 4
  • 5

4.4: 配置DNAT

[root@internal yum.repos.d]# mkdir bak2
[root@internal yum.repos.d]# mv *.repo bak2
[root@internal yum.repos.d]# vim abc.repo
[abc]
name=local
baseurl=file:///mnt
enabled=1
gpgcheck=0
[root@internal yum.repos.d]# mount /dev/sr0 /mnt
mount: /dev/sr0 写保护,将以只读方式挂载
[root@internal yum.repos.d]# yum install -y httpd
[root@internal yum.repos.d]# vim /var/www/html/index.html
<h1>this is cloud</h1>
[root@internal yum.repos.d]# systemctl start httpd
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

先自己检查appche页面能否被访问

mark

内部网外部无法访问做地址转换

[root@firewalld network-scripts]# iptables -t nat -I PREROUTING -d 12.0.0.1 -i ens36 -p tcp --dport 80 -j DNAT --to-destination 192.168.100.10

  • 1
  • 2
[root@internal yum.repos.d]# iptables -F
[root@internal yum.repos.d]# iptables -t nat -F
  • 1
  • 2

mark

4.5: iptables 规则的备份与恢复

4.5.1: 备份

[root@firewalld network-scripts]# iptables-save > /opt/abc.txt
[root@firewalld network-scripts]# cd /opt
[root@firewalld opt]# ls
abc.txt  rh
[root@firewalld opt]# vim abc.txt
[root@firewalld opt]# iptables -t nat -F
[root@firewalld opt]# iptables -F

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

mark

已经无法访问

4.5.2: 恢复

[root@firewalld opt]# iptables-restore < /opt/abc.txt
[root@firewalld opt]# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
DNAT       tcp  --  anywhere             firewalld            tcp dpt:http to:192.168.100.10
  • 1
  • 2
  • 3
  • 4
  • 5

mark
已经可以访问,实验完毕!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/631930
推荐阅读
相关标签
  

闽ICP备14008679号