防火墙实战:从Iptables审计到公有云中二层防火墙实现

任务一、Linux防火墙Iptables基础

【任务描述】

本实验任务基于个人主机操作环境,主要完成以下内容:

了解Iptables的基本概念与相应基础知识,熟悉使用语法。
Iptables规则的增删改查的简单使用。

通过完成本实验任务,要求学生了解iptables的基础概念,掌握使用语法,会进行简单规则的增,删,改,查;为完成后续防火墙实验任务奠定坚实的基础。

【实验目标】

了解IPtables的基本概念与基础知识,熟悉使用语法。
会进行简单规则的增删查。

【实验工具】

  • iptables

【操作步骤】

1、防火墙一些概念

从防火墙作用范围讲,防火墙可以大体分为主机防火墙和网络防火墙。

主机防火墙:作用于单个机算机系统,例如个人电脑上windows自带的防火墙,linux系统上的iptables。
网络防火墙:往往处于网络入口或边缘,对企业网络入口进行防护,服务范围为整个企业的内部网络。中小企业可以使用一台x86服务器运用linux的iptables搭建功能强大的网络防火墙。

网络防火墙和主机防火墙在企业网络架构中所处的网络位置不一样,它俩的结合能使企业网络更安全。

从产品形态讲,防火墙可以分为硬件防火墙和软件防火墙。

硬件防火墙:在硬件级别实现部分防火墙功能,另一部分功能基于软件实现,性能高,成本高。
软件防火墙:应用软件处理逻辑运行于通用硬件平台之上的防火墙,性能低,成本低。

下面说说本实验的重点,Linux iptables。

iptables其实它并不是真正的防火墙,我们可以理解它为一个命令行工具,位于用户空间,我们用这个工具操作“安全框架”。netfilter是防火墙真正的安全框架(framework),netfilter位于内核空间。

netfilter/iptables(下文中简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。

Netfilter是Linux操作系统内核的一个数据包处理模块,主要有如下功能:

网络地址转换(NAT)
数据包内容修改
包过滤防火墙
2、Iptables基础
Iptables有表、链、规则的概念,规则应用于链中, 链必须属于表,iptables默认的链可以属于多个表,每张表可以有多个链,可以在表中自定义链。
Iptables按照规则(rules)来处理数据包,规则其实就是预定义的条件。规则存储在内核空间的信息包过滤表中,这些规则分别指定了源地址、目的地址、源端口、目的端口、协议等。当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。配置防火墙的主要工作就是添加、修改和删除这些规则。
表的概念
iptables为我们提供了如下规则的分类,或者说,iptables为我们提供了如下“表”
filter表:负责包过滤功能,防火墙
nat表:网络地址转换功能
mangle表:拆解报文,做出修改,并重新封装数据包的功能
raw表:关闭nat表上启用的连接追踪机制
链的概念
iptables为我们提供了如下默认链
PREROUTING:路由前
INPUT:输入队列
FORWARD:转发队列
OUTPUT:输出队列
POSTROUTING:路由后   iptables为我们提供了如下默认链
PREROUTING:路由前
INPUT:输入队列
FORWARD:转发队列
OUTPUT:输出队列
POSTROUTING:路由后
表和链的对应关系:
raw表对应:PREROUTING, OUTPUT链
mangle表对应:PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING链
nat表对应:PREROUTING, OUTPUT, POSTROUTING,INPUT链
filter表对应:INPUT, FORWARD, OUTPUT链

同一链在不同表中的执行优先级次序(由高而低):

raw --> mangle --> nat --> filter
数据包经过iptables防火墙的处理流程

img

3、Iptables使用语法

Centos7下可用firewalld和iptables两种防火墙管理方式,实验中使用iptables。

基本语法格式:

iptables [-t table] SUBCOMMAND chain [matches..] [target]
-t tables:指明表,默认为filter表, 包括raw, mangle, nat表等;
SUBCOMMAND:子命令

链管理:

iptables -N CHAIN-NAME 新增一条自定义链;
iptables -X CHAIN-NAME 删除自定义的空链,先清除规则,才能删除链;
iptables -E CHAIN-NAME CHAIN-NEW-NAME 重命名自定义链,但要求是未被引用的链;
iptables -P {PREROUTING | INPUT | FORWARD | OUTPUT | POSTROUTING} {DROP| ACCEPT | REJECT} 设置链的默认策略;

规则管理:

-A:追加规则,默认追加在最后一个;
-I:插入规则,默认插入为第一个;
-D:删除规则,两种格式:指定规则或指定规则的序列号;
  - rule specification
  - rule number
-R:替换指定的规则;
-F:清空规则表;
-Z:给iptables计数器置0;
  iptables的每条规则,都有两个计数器
  - 此规则匹配到的所有的packets次数;
  - 此规则匹配到的所有packets大小之和;
-S:列出指定表上的规则,默认为所有表的规则,类似于iptables-save,可用于保存规则;

保存规则:

# iptables -S > /etc/sysconfig/iptables 
或
# iptables-save > /etc/sysconfig/iptables

恢复规则:

# iptables-restore < /etc/sysconfig/iptables

规则查看:

-L:列出规则;
-n:以数字格式显示地址和端口;
-v:显示详细信息;支持-vv,-vvv更详细信息;
-x:显示精确值;
--line-numbers:显示链上的规则的编号;
常用组合:-nvL,但L要写在后面
4、登陆实验机

image-20230412180438868

登陆帐号:root,登陆密码:Simplexue123

5、Iptables简单使用

使用man手册

# man iptables

image-20230412180513144

查看filter表规则,iptables默认使用filter表

# iptables -t filter -nvL

image-20230412180635546

添加规则,允许所有网络访问本机

# iptables -A INPUT -j ACCEPT

image-20230412180917725

注意:在不指定源、目的地址,源、目的IP,协议的情况下为全部IP、端口、协议

为FORWARD链添加默认规则

# iptables -P FORWARD DROP
# iptables -P FORWARD ACCEPT

image-20230412181332910

添加自定链test

# iptables -N test

image-20230412181618112

删除自定链test

# iptables -X test

image-20230412181658332

任务二、Iptables主机防火墙和审计

【任务描述】

本实验任务基于个人主机操作环境,主要完成以下内容:

iptables的常用语法的实际操作。
进行Iptables的特殊参数,自定义策略的的操作。
启用Iptables日志记录的功能,配置相应的策略,进行操作,验证。

通过完成本实验任务,要求学生掌握Iptables主机防火墙的常用配置已审计策略,具体包括:Iptables的常用语法,状态监测,特殊参数,自定义策略的使用,以及启用日志记录的功能进行相应的策略配置,具备更为夯石的防火墙配置使主机安全的能力。

【实验目标】

掌握Iptables工作中的常用策略。
掌握审计策略。

通过Iptables工作中的常用策略以及审计策略的学习和使用,具备丰富的主机安全防护的能力。

【实验工具】

  • Iptables

【操作步骤】

1、常用语法

对于任何协议及协议的扩展,通用匹配都可以直接使用。

(1)匹配指定协议。

-p,–protocol

例: iptables -A INPUT -p tcp -j ACCEPT

image-20230412182024038

说明匹配指定的协议,指定协议的形式有以下几种:

a、 名字不分大小写,但必须是在/etc/protocols中定义的;
b、 可以使用协议相应的整数值。例如,ICMP的值是1,TCP是6,UDP是17;
c、 不指定为ALL,相应数值是,要注意这只代表匹配TCP、UDP、ICMP,而不是/etc/protocols中定义的所有协议;
d、 可以是协议列表,以英文逗号为分隔符,如:udp,tcp;
e、 可以在协议前加英文的感叹号表示取反,注意有空格,如:--protocol ! tcp表示非TCP协议,也就是UDP和ICMP。可以看出这个取反的范围只是TCP、UDP和ICMP。
(2)以IP源地址匹配包。

-s,–src,–source

例: iptables -A INPUT -s 192.168.0.1 -j ACCEPT

image-20230412182424126

说明以IP源地址匹配包。地址的形式如下:

a、 单个地址,如192.168.0.1,也可写成192.168.0.1/255.255.255.255或192.168.0.1/32;
b、 网络,如192.168.0.0/24,或192.168.0.0/255.255.255.0;
c、 在地址前加英文感叹号表示取反,注意空格,如--source ! 192.168.0.0/24表示除此地址外的所有地址;
d、 缺省是所有地址。
(3)以IP目的地址匹配包。

-d,–dst,–destination

例: iptables -A INPUT -d 192.168.0.1 -j ACCEPT

image-20230412182512925

说明以IP目的地址匹配包。地址的形式和–source完全一样。

(4)以包进入本地使用的网络接口匹配包。

-i
例: iptables -A INPUT -i eth0 -j ACCEPT

image-20230412182629627

说明以包进入本地所使用的网络接口来匹配包。要注意这个匹配操作只能用于INPUT,FORWARD和PREROUTING这三个链,用在其他任何地方会提示错误信息。指定接口有以下方法:

a、 指定接口名称,如:eth0、ppp0等;
b、 使用通配符,即英文加号,它代表字符数字串。若直接用一个加号,即iptables -A INPUT -i +表示匹配所有的包,而不考虑使用哪个接口。通配符还可以放在某一类接口的后面,如:eth+表示匹配所有从Ethernet接口进入的包;
c、 在接口前加英文感叹号表示取反,如:-i ! eth0意思是匹配来自除eth0外的所有包。
(5)以包离开本地所使用的网络接口来匹配包。

-o
例: iptables -A OUTPUT -o eth0 -j ACCEPT

image-20230412182822496

说明以包离开本地所使用的网络接口来匹配包。要注意这个匹配操作只能用于OUTPUT,FORWARD和POSTROUTING这三个链,用在其他任何地方会提示错误信息。

(6)匹配通信源端口。

–source-port,–sport
例: iptables -A INPUT -p tcp --sport 1111

image-20230412183108422

说明当通信协议为TCP或UDP时,可以指定匹配的源端口,但必须与匹配协议相结合使用。

(7)匹配通信源端口。

– destination-port,–dport
例: iptables -A INPUT -p tcp --dport 80

image-20230412183230741

说明当通信协议为TCP或UDP时,可以指定匹配的目的端口,但必须与匹配协议相结合使用。

2、状态检测

-m state --state {NEW,ESTATBLISHED,INVALID,RELATED},指定检测那种状态

  • (1)NEW: 该包想要建立一个新的连接(重新连接或连接重定向)。
  • (2)RELATED: 该包是属于某个已经建立的连接所建立的新连接。
  • (3)ESTABLISHED: 该包属于某个已经建立的连接。
  • (4)INVALID: 该包不匹配于任何连接,通常这些包被DROP。

例: iptables -A INPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

image-20230412183825026

3、特殊参数

–icmp-type 指定ICMP的类型编号

例: iptables -A INPUT -p icmp --icmp-type 8

image-20230412184050055

-m multiport 指定多端口号

  • –sport
  • –dport
  • –ports

例: iptables -A INPUT -p tcp -m multiport --dport 22,53,80,110

image-20230412184146932

-m iprange 指定IP段

  • –src-range ip-ip
  • –dst-range ip-ip

例: iptables -A INPUT -m iprange --src-range 192.168.1.2-192.168.1.7 -j DROP

image-20230412184303701

-m connlimit 连接限定

–comlimit-above # 限定大连接个数

例: iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 100 -j REJECT

image-20230412184359052

-m limit 现在连接速率,也就是限定匹配数据包的个数

  • –limit # 指定速率
  • –limit-burst # 峰值速率,最大限定

例: iptables -A INPUT -m limit --limit-burst 6

image-20230412185156194

-m string 按字符串限定

–algo bm|kmp # 指定算法bm或kmp

–string “STRING” # 指定字符串本身

例: iptables -A OUTPUT -m string --string “tudou.com” --algo bm -j DROP

image-20230412185323039

4、iptables常用的操作语法
功能参数语法说明
添加规则Aiptables -A INPUT -p tcp -j ACCEPT在INPUT链后加入允许所有TCP请求
删除规则-Diptables -D INPUT -p tcp -j ACCEPT在INPUT链中删除对应规则
自定义链重命名-Eiptables -E A B将自定义链A重命名为B,原来的名字在前,新名字在后
清空规则-Fiptables -F INPUT清空INPUT链规则, 如果不加链名则是清除当前表所有规则
插入规则-Iiptables -I INPUT 1 -p tcp -j ACCEPT在INPUT链内的某个位置插入规则,如果序号为1或没有序号,规则会被插入到的头部
显示规则-Liptables -L INPUT显示INPUT链的所有规则,如果没有指定链,则显示指定表中的所有链。精确输出可用-n和-v等参数
新建自定义链-Niptables -N A在指定表新建链A,不可以同名
默认策略-Piptables -P INPUT DROP指定INPUT链的默认策略为DROP, 可选策略ACCEPT、DROP、REJECT、REDIRECT
替换规则-Riptables -R INPUT 1 -p udp -j ACCETP替换INPUT链中的第1条策略
删除用户自定义链-Xiptables -X A删除指定表中的自定义链A
计数器归零-Ziptables -Z清空指定表下指定链(如未指定则认为所有链)的所有计数器归零
5、iptables日志记录

Linux下单独记录Iptables日志,编辑/etc/syslog.conf文件,加入一行
# echo “kern.warning /var/log/iptables.log” >>/etc/rsyslog.conf

重启rsyslog服务生效:

# systemctl restart rsyslog

image-20230412191617125

例: 记录源为127.0.0.1为来的所有ICMP日志
(1) 配置iptables策略

# iptables -A INPUT -s 127.0.0.1 -p icmp -j LOG --log-prefix "iptables icmp-localhost"

(2) 验证规则

# ping -c 1 127.0.0.1

image-20230412191955975

图中pkts有两个数据包匹配

(3) 查看日志

image-20230412193205357

(4) 上例iptables日志字段解释(编号21后为未用到的字段)

Jan 12 18:24:05 [localhost] kernel: iptables icmp-localhost IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00 SRC=127.0.0.1 DST=127.0.0.1 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=8718 PROTO=ICMP TYPE=0 CODE=0 ID=9413 SEQ=1

编号字段说明
1Jan 12 18:24:05日期时间,由syslog生成
2localhost主机名称
3kernelsyslogd获取kernel产生的日志
4iptables icmp-localhost记录前缀,由用户指定—log-prefix “iptables icmp-localhost”
5IN=lo数据包进入的接口,若为空表示本机产生
6OUT=数据包流出的接口,若为空表示本机产生
7MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00前6段为源MAC, 后6段为目的MAC
808:0008:00 为上层协议代码,即表示IP协议
9SRC=127.0.0.1源IP地址
10DST=127.0.0.1目的IP地址
11LEN=84IP封包+承载数据的总长度(MTU)
12TOS=0x00IP包头内的服务类型字段,能反应服务质量包括延迟、可靠性和拥塞等
13PREC=0x00服务类型的优先级字段
14TTL=64IP数据包的生存时间
15ID=8718IP数据包标示
16PROTO=ICMP协议ICMP
17TYPE=0ICMP类型
18CODE=0ICMP代码
19ID=9413ICMP ID
20SEQ=1ICMP SEQ
21DF表示不分段,此字段还可能为MF/FRAG
22SPTTCP或UDP中的源端口
23DPTTCP或UDP中的目的端口
24LEN传输层协议头长度
25SEQTCP序列号
26ACKTCP应答号
27WINDOWSIP包头内的窗口大小
28RESTCP-Flags中ECN bits的值
29CWR/ECE/URG/ACK/PSH/RST/SYN/FINTCP标志位
30URGP紧急指针起点
31OPTIP或TCP选项
32INCOMPLETE不完整的数据包
33SPI当协议为AHESP时出现
34[ ]中括号出现在两个地方,在ICMP协议中作为协议头的递归使用;在数据包长度出现非法时用于指出数据实际长度
(5) 日志策略

a、 获取所有TCP日志

# iptables -A INPUT -p tcp -j LOG --log-prefix "iptables TCP"

image-20230412193526933

b、 获取所有UDP日志

# iptables -A INPUT -p udp -j LOG --log-prefix "iptables UDP"

image-20230412193652834

c、 获取ssh的日志

# iptables -A INPUT -p tcp --dport 22 -j LOG --log-prefix "iptables SSH"

image-20230412193746821

6、自定义策略
(1) 禁止ping 127.0.0.1

默认是通过的

# iptables -A INPUT -p icmp -j DROP

image-20230412200150923

应用策略ping不通了,图中iptables规则也有流量匹配

(2) 状态为已连接的放行

# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

image-20230412200315556

(3) 只允许本机访问80

# iptables -A INPUT -p tcp --src 127.0.0.1 --dport 80 -j ACCEPT

image-20230412200542178

应用策略后通过curl 127.0.0.1匹配策略 (图中错误因为本机没有80服务)

image-20230412200625022

(4) 利用扩展模块limit,可以实现DoS攻击防范

# iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT

image-20230412200734652

任务三、虚拟网络使用,SDN交换机Openvswitch与Linux namespace

【任务描述】

本实验在个人主机操作环境中虚拟网络的使用:openswitch与namespace,模拟多个网络设备,将不同类型的网络应用隔离。为下一任务搭建网络环境实验场景做环境准备。

通过完成本实验任务,要求学生掌握openswitch与namespace的使用,会构建虚拟网络环境。

【实验目标】

了解openswitch与namespace的概念。
掌控Linux虚拟网络设备的使用。
掌握SDN交换机openvswitch的安装与使用。

【实验工具】

  • Openswitch
  • ovs-vsctl(openvswitch软件提供)
  • IP(包含ip link、ip netns、ip addr等)
  • tcpdump
  • ethtool

【操作步骤】

1、概述

(1)Open vSwitch

Open vSwitch(简称为 OVS)是由 Nicira Networks 主导的,运行在虚拟化平台(例如 KVM,Xen)上的虚拟交换机。在虚拟化平台上,OVS 可以为动态变化的端点提供 2 层交换功能,很好的控制虚拟网络中的访问策略、网络隔离、流量监控等等。

OVS 遵循 Apache 2.0 许可证, 能同时支持多种标准的管理接口和协议。OVS 也提供了对 OpenFlow 协议的支持,用户可以使用任何支持 OpenFlow 协议的控制器对 OVS 进行远程管理控制。

(2)网络名称空间netns

netns是在linux中提供网络虚拟化的一个项目,使用netns网络空间虚拟化可以在本地虚拟化出多个网络环境。netns可以让一台机器上模拟多个网络设备,是网络虚拟化的重要组成,将不同类型的网络应用隔离。
一个net namespace拥有独立的独立的网卡空间,路由表,ARP表,ip地址表,iptables等。

2、软件安装
(1)netns功能由系统网络配置工具iproute2提供,命令形式为ip netns
(2)openvswitch安装

# yum -y install openvswitch

image-20230412202428529

(3) 启动openvswitch并设置自启

image-20230412202552358

(4) 安装抓包工具tcpdump,网络配置工具bridge-utils

# yum -y install tcpdump bridge-utils

image-20230412202643586

3、ip link使用
(1) 查看ip link帮助

# ip link help

image-20230412202724246

(2) 新建网络接口

# ip link add link eth0 name eth0.10 type vlan id 10

# ip link add veth1 type veth peer name veth2

image-20230412202817732

(3) 查看网络接口

# ip link show

# ip link show type veth

# ip link show type vlan

image-20230412203011436

# ip -d link show type veth

# ip -d link show type vlan

image-20230412203147655

# ethtool -S veth1

image-20230412203305216

注: 实验中此处ID号可能不同

(4) 使接口UP

# ip link set eth0.10 up

# ip link set veth1 up

# ip link set veth2 up

image-20230412203549283

(5) 删除接口

# ip link del dev eth0.10

# ip link del dev veth1

image-20230412204011717

4、ip netns使用
(1) 查看ip netns帮助

# ip netns help

image-20230412204109928

(2) 创建一个名为test的namespace

# ip netns add test

(3) 查看所有namespace

#ip netns listip netns

(4) 查看名为test的namespace

# ip netns exec test ip addr show

image-20230412204328956

(5) 进入名为test的namespace,执行网络命令

# ip netns exec test bash

# route -n

# iptables -nvL

image-20230412204504963

(6) 退出namespace

# exit

(7) 给test 添加接口tap1

# ip link add tap1 type dummy

# ip link set tap1 netns test

# ip netns exec test ip link show

image-20230412204550427

(8) 启用tap1虚拟接口

# ip netns exec test ip link set tap1 up

image-20230412204708777

(9) 给tap1虚拟接口配置IP

# ip netns exec test ip addr add dev tap1 192.168.0.1/24

(10) 删除test namespace

# ip netns del test

image-20230412204935052

5、openvswitch使用
(1) 查看openvswitch安装的命令工具

image-20230412205041811

(2) 添加网桥br0

# ovs-vsctl add-br br0

(3) 列出open vswitch中所有的网桥

# ovs-vsctl list-br

image-20230412205118279

(4) 判断网桥是否存在

# ovs-vsctl br-exists br0

(5) 将网卡添加到网桥br0

# ip link add tap1 type dummy

# ovs-vsctl add-port br0 tap1

image-20230412205317449

(6) 查看open vswitch的网络状态

# ovs-vsctl show

image-20230412205413474

(7) 在网桥br0中新建openvswitch网口

# ovs-vsctl add-port br0 tap2 -- set interface tap2 type=internal

image-20230412205522402

(8) 列出网桥br0中所有端口

# ovs-vsctl list-ports br0

(9) 列出所有连接到网卡tap2的网桥

# ovs-vsctl port-to-br tap2

image-20230412205629137

(10) 删除网桥br0上的网口tap2

# ovs-vsctl del-port br0 tap2

image-20230412205920078

(11) 设置网口tap1的vlan tag为10

# ovs-vsctl set port tap1 tag=10

image-20230412210014094

(12) 查看网口tap1的属性

# ovs-vsctl list port tap1

image-20230412210111855

(13) 从网桥br0删除网口tap1, 并从系统删除虚拟网口tap1

# ovs-vsctl del-port br0 tap1

# ip link del dev tap1

image-20230412210137170

(14) 删除网桥br0

# ovs-vsctl del-br br0

image-20230412210215726

任务四、搭建网络防火墙实验场景

【任务描述】

本实验任务在任务三操作完成的基础上,Linux下利用工具组搭建如网络拓扑所示的虚拟网络环境。

通过完成本实验任务,了解和掌握部分虚拟化网络软件的使用,利用虚拟交换机openvswitch和linux的netns(网络命名空间)模拟复杂的网络环境。

【实验目标】

掌握openswitch与netns的使用。
掌握利用openswitch与netns来模拟复杂网络环境。

【实验工具】

  • ovs-vsctl(openvswitch软件提供)
  • ip(包含ip link、ip netns、ip addr等)
  • sysctl

【操作步骤】

1、实验网络拓扑

img

图4-1

2、环境搭建

利用openvswitch创建tag为10和11的两个接口,结全netns模拟内网1、内网2。

1、开启主机路由转发功能

\# echo “net.ipv4.ip_forward = ()” >> /etc/sysctl.conf
\# sysctl -p
\# sysctl -a | grep “ip_forward”

image-20230417141206859

image-20230417141306682

2、创建tag为10的内网1

\# ovs-vsctl add-br br0
\# ovs-vsctl () br0 tap1 tag=10 -- set interface tap1 type=internal
\# ip link show
\# ip netns add ns-tap1
\# ip link set dev tap1 netns ns-tap1
\# ip netns exec ns-tap1 ip link show

image-20230417141520643

image-20230417141655693

\# ip netns exec ns-tap1 ip link set dev lo up
\# ip netns exec ns-tap1 ip link set dev tap1 up

image-20230417141837820

\# ip netns exec ns-tap1 ip addr add dev tap1 10.0.0.2/24
\# ip netns exec ns-tap1 ip route add default via 10.0.0.1
\# ip netns exec ns-tap1 ip addr show
\# ip netns exec ns-tap1 ip route show

image-20230417142245845

3、创建tag为11的内网2,方法同上

image-20230417142840079

4、查看网络内网1 与 内网2的连通性

\# ip netns

image-20230417143015742

\# ovs-vsctl show

image-20230417143052100

\# ip netns exec ns-tap1 ping -c 1 10.0.1.2

image-20230417143245123

测试两个内网是不通的。

4、netns模拟器由器实现内网1与内网2互通

\# ovs-vsctl add-port br0 r1 tag=10 -- set interface r1 type=internal
\# ovs-vsctl add-port br0 r2 tag=11 -- set interface r2 type=internal

image-20230417143615651

\# ip netns add router
\# ip link set dev r1 netns router
\# ip link set dev r2 netns router
\# ip netns exec router ip link set dev lo up
\# ip netns exec router ip link set dev r1 up
\# ip netns exec router ip link set dev r2 up
\# ip netns exec router ip addr add dev r1 10.0.0.1/24
\# ip netns exec router ip addr add dev r2 10.0.1.1/24
\# ip netns exec router ping -c 1 10.0.0.2
\# ip netns exec router ping -c 1 10.0.1.2
\# ip netns exec ns-tap1 ping -c 1 10.0.1.2

image-20230417143812935

在路由器内ping两个内网都是通的,在内网1内ping内网2也是通的,实验环境搭建成功。

任务五 网络防火墙nat、防问控制实战

【任务描述】

本实验任务在任务四操作完成的基础上,主要完成以下内容:

了解iptables  nat基础知识与常用配置,
进行网络防火墙访问控制的实战。

通过完成本实验任务,要求学生掌握企业中简单的iptables防火墙的应用。

【实验目标】

掌握iptables nat的基础知识与常用配置的操作。
掌握简单的网络防火墙的访问控制操作。

可以利用iptables加固企业网络。

【实验工具】

  • iptables
  • ip (包含ip link、ip netns、ip addr等)

【操作步骤】

1、iptables nat基础知识
nat表需要的三个链:
PREROUTING:在数据包到达防火墙时进行路由判断之前的规则,作用是是否改变目的地址或者目的端口;
POSTROUTING:在数据包离开防火墙时进行路由判断,是否要改变源地址、源端口等;
INPUT:改变访问目的为主机的数据包源地址;
OUTPUT:改变主机发出去的数据包目的地址;
动作选项:
REDIRECT: 将数据包重定向到其它或其它主机的某个端口;
SNAT: 源地址转换,改变数据包的源地址;
DNAT: 目的地址转换,改变数据包的目的地址;
MASQUERADE: ip智能伪装;
注意点:
PRERROUTING: DNAT、REDIRECT (路由之前)只支持-i,不支持-o。在作出路由之前,对目的地址进行修改;
POSTROUTING: SNAT、MASQUERADE (路由之后)只支持-o,不支持-i。在作出路由之后,对源地址进行修改;
OUTPUT: DNAT、REDIRECT (本机)DNAT和REDIRECT规则用来处理来自NAT主机的出站数据包;
INPUT: SNAT (本机)SNAT规则用来修改目的为本机的源地址;
2、nat常用配置
(1) 将源转换成路由器router的r2接口地址
\# ip netns exec router iptables -t nat -A POSTROUTING -o r2 -j MASQUERADE
\# ip netns exec ns-tap1 ping -c 1 10.0.1.2
\# ip netns exec router iptables -t nat -nvL

image-20230417144438018

(2) 打开两个终端利用tcpdump抓包分析
a、# ip netns exec ns-tap1 ping -c 1 10.0.1.2
b、# ip netns exec ns-tap2 tcpdump -nei tap2

注意:b操作需要ctrl + alt + f2切换到新的视图操作,验证后ctrl + c中止抓包,按ctrl + alt + f1回到a视图继续下面的实验

image-20230417144841891

image-20230417144812619

(3) 配置SNAT
\# ip netns exec router iptables -t nat -F
\# ip netns exec router iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o r2 -j SNAT --to 10.0.1.1
\# ip netns exec ns-tap1 ping -c 1 10.0.1.2
\# ip netns exec router iptables -t nat -nvL

image-20230417145121006

(4) 配置DNAT
\# ip netns exec router iptables -t nat -F
\# ip netns exec router iptables -t nat -I PREROUTING -i r1 -p tcp --dport 80 -j DNAT --to-destination 10.0.1.2:80
\# ip netns exec ns-tap1 curl `http://10.0.1.1`

image-20230417145342957

注: 因本实验机未安装80服务,所以curl http://10.0.1.1 错误

(5) 重定向
\# ip netns exec router iptables -t nat -F
\# ip netns exec router iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 81
\# ip netns exec ns-tap1 curl `http://10.0.1.1`

image-20230417145551778

3、网络防火墙
(1) 允许内网1访问内问2
\# ip netns exec router iptables -t nat -F
\# ip netns exec router iptables -F
\# ip netns exec router iptables -A FORWARD -s 10.0.0/24 -d 10.0.1.0/24 -j ACCEPT
\# ip netns exec router iptables -nvL
\# ip netns exec ns-tap1 ping -c 1 10.0.1.2

image-20230417145822558

注:有数据包匹配说明规则生效

(2) 拒绝内网1访问内网2
\# ip netns exec router iptables -F
\# ip netns exec router iptables -A FORWARD -s 10.0.0/24 -d 10.0.1.0/24 -j DROP
\# ip netns exec ns-tap1 ping -c 1 10.0.1.2

image-20230417151050450

(3) 拒绝内网1访问内网2的80服务
\# ip netns exec router iptables -F
\# ip netns exec router iptables -A FORWARD -s 10.0.0/24 -d 10.0.1.0/24 -p tcp --dport 80 -j DROP

image-20230417151324112

注:上图中需要按ctrl+c结束

image-20230417151441709

任务六、公有云中二层防火墙实现

【任务描述】

本实验任务在前五个实验掌握的基础上,主要完成以下内容:

利用前面学习到的虚拟化技术搭建复杂的网络实验场景;
进一步学习虚拟交换机openvwitch网络配置;
云计算中一种二层防火墙的实现;
利用ipset动态加载防火墙策略
巩固防火墙、虚拟网络知识

通过完成本实验任务,要求学生掌握企业公有云中二层防火墙实现的一种方法。可以控制同网段虚拟机间的通信,也可以防止用户随意修改IP或者MAC地址。

【实验目标】

利用虚拟化技术搭建复杂的网络实验场景
掌握云计算中一种二层防火墙的实验方法
进一步掌握iptables的使用

【实验工具】

  • ovs-vsctl (openvswitch软件提供)
  • IP (包含ip link、ip netns、ip addr等)
  • brctl
  • modprobe
  • ipset

【操作步骤】

1、实验网络修改
(1) 实验拓扑

img

(2) 查看上个实验环境
# ovs-vsctl show
# ip netns
(3) 清空配置
# ovs-vsctl del-br br0

image-20230417153013331

# ip netns del router
# ip netns del ns-tap1
# ip netns del ns-tap2

image-20230417153114615

(4) 搭建实验环境

a、新建网桥br0

# ovs-vsctl add-br br0

b、配置内网1

# ip link add qvo-tap1 type veth peer name qvb-tap1
# ip link set qvb-tap1 up
# ip link set qvo-tap1 up
# brctl addbr qbr-tap1
# ip link set qbr-tap1 up
# brctl addif qbr-tap1 qvb-tap1
# ovs-vsctl add-port br0 qvo-tap1 tag=10

image-20230417153346697

# ip link add tap1 type veth peer name tap11
# brctl addif qbr-tap1 tap11
# ip link set tap11 up
# ip netns add ns-tap1
# ip link set dev tap1 netns ns-tap1
# ip netns exec ns-tap1 ip link set dev lo up
# ip netns exec ns-tap1 ip link set dev tap1 up
# ip netns exec ns-tap1 ip addr add dev tap1 10.0.0.2/24

image-20230417153702733

c、配置内网2

# ip link add qvo-tap2 type veth peer name qvb-tap2
# ip link set qvb-tap2 up
# ip link set qvo-tap2 up
# brctl addbr qbr-tap2
# ip link set qbr-tap2 up
# brctl addif qbr-tap2 qvb-tap2
# ovs-vsctl add-port br0 qvo-tap2 tag=10

image-20230417155007433

# ip link add tap2 type veth peer name tap22
# brctl addif qbr-tap2 tap22
# ip link set tap22 up
# ip netns add ns-tap2
# ip link set dev tap2 netns ns-tap2
# ip netns exec ns-tap2 ip link set dev lo up
# ip netns exec ns-tap2 ip link set dev tap2 up
# ip netns exec ns-tap2 ip addr add dev tap2 10.0.0.3/24

image-20230417155255814

d、测试二层同网段通信

# ip netns exec ns-tap1 ping -c 1 10.0.0.3

image-20230417155339518

(5) 加载内核参数
# modprobe br_netfilter
# ls /proc/sys/net/bridge

image-20230417155453945

# echo "net.bridge.bridge-nf-call-arptables = 1" >> /etc/sysctl.conf
# echo "net.bridge.bridge-nf-call-ip6tables = 1" >> /etc/sysctl.conf
# echo "net.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.conf
# sysctl -p
# sysctl -a | egrep "bridge-nf-call-arptables|bridge-nf-call-iptables|bridge-nf-call-ip6tables"

image-20230417155749461

(6) 二层防火墙配置

a、把FORWARD链所有流量导入自定义链

# iptables -N openvswitch-forward
# iptables -A FORWARD -j openvswitch-forward

image-20230417155938093

b、添加内网1 in、out方向链表,将匹配到的physdev流量导入进出链表

# iptables -N openvswitch-i-tap1
# iptables -N openvswitch-o-tap1
# iptables -A openvswitch-forward -m physdev --physdev-out tap11 --physdev-is-bridged -j openvswitch-i-tap1
# iptables -A openvswitch-forward -m physdev --physdev-in tap11 --physdev-is-bridged -j openvswitch-o-tap1

image-20230417160133128

c、添加内网1 in方向规则, 并将没有匹配的流量导入新链表,过滤源地址使用ipset管理

# iptables -N openvswitch-fallback
# ipset create ipv4-tap1 hash:net
# iptables -A openvswitch-i-tap1 -m set --match-set ipv4-tap1 src -j RETURN
# iptables -A openvswitch-i-tap1 -j openvswitch-fallback

image-20230417160410459

d、添加内网1 out方向规则,将所有流量导入新的链过滤

# iptables -N openvswitch-s-tap1
# iptables -A openvswitch-o-tap1 -j openvswitch-s-tap1
# iptables -A openvswitch-o-tap1 -j RETURN

image-20230417160551072

e、添加内网1安全规则

# tap1_ip=\`ip netns exec ns-tap1 ip -o -f inet addr show tap1 | awk -F'/' '{print $1}'|awk '{print $4}'\`
# tap1_mac=\`ip netns exec ns-tap1 ip link show tap1 | grep "link/ether"|awk '{print $2}'\`
# iptables -A openvswitch-s-tap1 -s $tap1_ip/32 -m mac --mac-source $tap1_mac -m comment --comment "Allow traffic from defined IP/MAC pairs." -j RETURN
# iptables -A openvswitch-s-tap1 -j DROP

image-20230417161909836

f、拒绝未匹配的流量

# iptables -A openvswitch-fallback -m comment --comment "Default drop rule for unmatched traffic." -j DROP

image-20230417162115628

g、测试内网1与内网2的网络连通性

# ip netns exec ns-tap1 ping -c 1 10.0.0.3

image-20230417162231115

可以看到已经不通了,二层防火墙策略已经生效。

h、ipset添加源地址内网2,验证连通性

ipset是iptables的扩展,可以想像它是一个IP地址集合,可以动态的加载iptables规则的地址集, 有效提升iptables的查找效率。

i、验证内网1能否修改IP、MAC

# ip netns exec ns-tap1 ip addr del dev tap1 10.0.0.2/24
# ip netns exec ns-tap1 ip addr add dev tap1 10.0.0.4/24

image-20230417162533090

# ip netns exec ns-tap1 ip addr del dev tap1 10.0.0.4/24
# ip netns exec ns-tap1 ip addr add dev tap1 10.0.0.2/24
# ip netns exec ns-tap1 ip link set dev tap1 address 16:f7:55:f5:d7:ac

image-20230419181545145

注: 每次实验的MAC地址不一样, 请自行使用自己实验中的MAC

实验中的方式就是公有云中二层防火墙实现的一种方法。可以控制同网段虚拟机间的通信,也可以防止用户随意修改IP或者MAC地址。

  • 11
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值