目录
防火墙
概念
形态
内核态:netfilter
用户态:iptables、firewalld
防火墙分类
firewalld网络区域
区域划分
使用图形化界面配置防火墙
端口配置
协议配置
源端口配置
永久配置恢复默认防火墙规则
配置防火墙相关命令
示例
实验环境
网关基本配置
内网Web服务器基本配置
内网测试机基本配置
外网测试机基本配置
操作步骤
1:基本环境配置
(1)修改网关服务器(web服务器)的主机名
(2)开启网关服务器的路由转发功能
(3)配置内网Web服务器主机名
2:内网Web服务器环境搭建
(1)安装httpd和mod_ssl软件包
(2)启用并启动httpd服务,关闭SELinux
(3)创建网站首页测试页index.html
(4)更改ssh的4监听地址,并重启sshd服务,
3:在内网服务器上启动并配置firewalld防火墙
(1)在网站服务器上启动firewalld防火墙并将默认区域设置为dmz区域
(2)为dmz区域打开https服务机添加TCP的12345端口
(3)将预定义的ssh服务移除
(4)禁止ping
(5)重新加载firewalld配置
4:在网关服务器上配置firewalld防火墙
(1)验证firewalld在网关服务器上启动并正常运行
(2)设置默认区域为external区域,并查看配置结果
(3)将ens37网卡配置到trusted区域,将ens38网卡配置到dmz区域
(4)查看配置情况
(5)在企业内网测试计算机上访问网站服务器
(6)关闭网关服务器的SELinux,并更改ssh的监听端口,并重启服务
(7)在网关服务器上配置external区域添加TCP的12345端口
(8)在网关服务器上配置external区域移除ssh服务
(9)在网关服务器上配置external区域禁止ping
(10)在网关服务器上重新加载防火墙激活配置
(11)在外网测试计算机上通过ssh登陆网关外部接口地址的12345
(12)在内网测试计算机上ssh登陆web网站服务器的12345端口
防火墙
概念
- 支持网络区域所定义的网络链接以及接口安全等级的动态防火墙管理工具
- 支持IPv4、IPv6防火墙设置以及以太网桥
- 支持服务或应用程序直接添加防火墙规则接口
- 拥有两种配置模式
- 运行时配置:添加的策略立即生效,不用重载防火墙,策略临时存在(重启后失效)
- 永久配置:添加的策略需要重载防火墙才会生效,策略永远存在
形态
不管是什么防火墙,只要是在Linux中运行的防火墙,就有两种形态
-
内核态:netfilter
- 指的是操作系统内核运行的环境,具有最高权限和直接访问系统硬件的能力。在内核态运行的代码可以执行高级的系统操作。
- netfilter:是Linux内核的一个框架,用于实现网络数据包的过滤和修改。它提供了对数据包进行处理的接口,可以用于实现防火墙功能、网络地址转换(NAT)等。
- 通常netfilter被firewalld和iptables管理
-
用户态:iptables、firewalld
- 是指操作系统提供给应用程序运行的环境,应用程序在用户态运行,不能直接访问硬件,必须通过系统调用等方式访问操作系统提供的服务。
- iptables:是Linux系统中一个传统的命令行工具,用于配置IPv4数据包过滤规则和网络地址转换(NAT)规则。iptables配置的规则会被netfilter在内核态中执行。
- firewalld:是一个动态管理防火墙的工具,提供了简化配置和管理防火墙规则的方式。它作为用户态程序运行,并与内核态中的netfilter交互,实现网络安全策略。
防火墙分类
- 包过滤防火墙:匹配数据包内的关键字,进行过滤
- 状态话防火墙(思科、华为等设备 )
firewalld网络区域
- 区域如同进入主机的安全门,每个区域都具有不同限制程度的规则
- 可以使用一个或多个区域,但是任何一个活跃区域至少需要关联源地址或接口
- 默认情况下,public区域是默认区域,包含所有接口(网卡)
区域划分
- 阻塞区域(block):任何传入的网络数据包都将被阻止。
- 隔离区域(DMZ):隔离区域也称为非军事区域,内外网络之间增加的一层网络,起到缓冲作用。对于隔离区域,只有选择接受传入的网络连接。
- 丢弃区域(drop):任何传入的网络连接都被拒绝。
- 外部区域(external):不相信网络上的其他计算机,不会损害你的计算机。只有选择接受传入的网络连接。
- 家庭区域(home):相信网络上的其他计算机,不会损害你的计算机。
- 内部区域(internal):信任网络上的其他计算机,不会损害你的计算机。只有选择接受传入的网络连接。
- 公共区域(public):不相信网络上的任何计算机,只有选择接受传入的网络连接。
- 信任区域(trusted):所有的网络连接都可以接受。
- 工作区域(work):相信网络上的其他计算机,不会损害你的计算机。
使用图形化界面配置防火墙
实验环境:两台安装桌面的Linux虚拟机(CentOS 7),这里实验中称为201和202主机
在201主机配置 输入firewall-config命令打开防火墙配置窗口
使用yum -y install httpd命令安装测试软件包
开启该服务,并添加测试的index文件
在防火墙配置的窗口中,将http服务打开,允许http流量通过,如果不开启http服务,防火墙会过滤http流量,其他主机就无法访问到201主机的http服务
因为当前是运行时配置,所以也不需要重启防火墙
在202主机测试
202能否访问到201主机的http服务
在201主机配置
如果使用永久配置,将http服务开启后也其他主机的http流量也不能通过防火墙
所以在永久配置的方式下需要修改策略后重载防火墙,策略就永久生效了,重载后添加的策略也不会失效
在202主机测试
端口配置
在201主机配置
需要注意的是,在设置规则之前,要确定接口属于哪个区域,以及用户要访问的是哪个接口,设置对应区域
双击接口
选择区域
如果服务的端口不是默认端口,就要去指定端口号
首先关闭服务
设置端口号
来到202主机测试还是可以访问
协议配置
如果设置为允许tcp协议的流量通过
凡是用TCP协议发布的服务,用户都可以访问
测试结果:
源端口配置
源端口:指的是发送数据包的应用程序或服务使用的端口号。当数据包从发送方发送到网络时,它会携带这个源端口信息,这样接收方可以确定数据包的来源。
作用:控制网络流量,只允许特定源端口的数据包通过防火墙,或者阻止某些源端口的数据包流入网络。这种配置可以帮助限制或允许特定应用程序或服务的访问。
当防火墙过滤流量时,就去查找数据包里的源端口,如果源端口的端口号在指定的范围内,就允许通过
永久配置恢复默认防火墙规则
防火墙各个区域默认规则的存放位置在cd /usr/lib/firewalld/zones/
防火墙实时使用的规则存放在cd /etc/firewalld/zones/
在201主机配置
把配置模式修改为永久,随便允许几个服务
此时在/etc/firewalld/zones下就可以看到internal.xml文件
如果想要恢复已经修改的规则到默认的初始规则,通过cp命令将默认文件覆盖到实时文件就行了
配置防火墙相关命令
命令 | 说明 |
firewall-cmd --state | 查询防火墙状态 |
firewall-cmd --get-zones | 获取当前所有区域 |
firewall-cmd --get-service | 获取所有能管理的服务 这里的服务都是默认端口,如果服务的端口被修改了,就不能直接管理该服务 |
firewall-cmd --get-default-zone | 当前接口默认属于哪个区域 |
firewall-cmd --set-default-zone=internal | 将当前接口的默认区域修改为internal |
firewall-cmd --get-active-zones | 查询当前被激活的区域 |
firewall-cmd --get-zone-of-interface=ens33 | 查询指定接口所在的区域 |
firewall-cmd --zone=dmz --list-interface | 列出指定区域有哪些接口 |
firewall-cmd --zone=dmz --add-service=http | 为指定区域添加支持的服务 |
firewall-cmd --zone=dmz --remove-service=http | 删除该区域的指定服务的默认端口 |
firewall-cmd --zone=dmz --list-services | 列出指定区域支持的服务 |
firewall-cmd --zone=dmz --add-port=80/tcp | 添加端口号策略 为同一个服务添加访问端口时,要把对应部署的服务默认端口删除 |
firewall-cmd --zone=dmz --change-interface=ens33 | 修改指定接口的所在区域为dmz |
firewall-cmd --zone=dmz --add-service=http --permanent | 为dmz区域以永久时的方式部署http服务 |
firewall-cmd --zone=dmz --remove-interface=ens38 | 删除dmz区域的ens38接口 |
firewall-cmd --list-all --zone=dmz | 列出指定区域的全部信息 |
firewall-cmd --reload | 重载防火墙 |
示例
实验环境
准备四台Linux CentOS 7虚拟机,分别作为:内网测试机、网关(Server-PT)、内网服务器、外网测试机(Internet测试机)
根据下图的说明,将4台虚拟机的IP地址和网关都改为图中一样
网关基本配置
再为作为网关的虚拟机添加两个网卡,并将网络模式更改为下图
用ens33网卡的配置文件通过cp命令拷贝为另外两个网卡配置文件,并修改三个网卡的接口为如下IP地址
因为网卡直接不能使用相同的uuid所以在网卡配置文件内也要把uuid的行给删掉或者注释掉
如果内网测试机和内网Web服务器同时不能ping通网关,那就可能是网关服务器的VMnet1和VMnet8这两个网卡的顺序与主机里的ens36、ens37的顺序不对
把两个网卡桥接模式换一下试试,就成功了
内网Web服务器基本配置
修改该虚拟机网络模式
修改IP地址和网关
内网测试机基本配置
修改该虚拟机网络模式
修改IP地址和网关
外网测试机基本配置
修改网络模式
因为外网的主机,网关地址一定是自己私网中的网关地址,所以外网测试机只需要配置IP地址,不需要配置网关地址
操作步骤
1:基本环境配置
(1)修改网关服务器(web服务器)的主机名
hostnamectl set-hostname gateway-server bash
(2)开启网关服务器的路由转发功能
修改对应配置文件:
vim /etc/sysctl.conf
在末尾添加:
net.ipv4.ip_forward=1
使用sysctl -p命令重载内核配置文件
(3)配置内网Web服务器主机名
hostnamectl set-hostname web bash
2:内网Web服务器环境搭建
(1)安装httpd和mod_ssl软件包
yum install -y httpd mod_ssl
- http默认端口:80
- https默认端口:443
(2)启用并启动httpd服务,关闭SELinux
[root@localhost ~]# systemctl enable httpd [root@localhost ~]# systemctl start httpd [root@localhost ~]# setenforce 0
(3)创建网站首页测试页index.html
echo "Test Web" > /var/www/html/index.html
(4)更改ssh的4监听地址,并重启sshd服务,
打开ssh配置文件
vim /etc/ssh/sshd_config
修改端口号为12345:Port 12345
不启用DNS:UseDNS no
重启服务systemctl restart sshd
3:在内网服务器上启动并配置firewalld防火墙
(1)在网站服务器上启动firewalld防火墙并将默认区域设置为dmz区域
[root@localhost ~]# systemctl start firewalld [root@localhost ~]# systemctl enable firewalld
[root@localhost ~]# systemctl status firewalld [root@localhost ~]# firewall-cmd --set-default-zone=dmz
(2)为dmz区域打开https服务机添加TCP的12345端口
[root@localhost ~]# firewall-cmd --zone=dmz --add-service=http --permanent
[root@localhost ~]# firewall-cmd --zone=dmz --add-service=https --permanent
[root@localhost ~]# firewall-cmd --zone=dmz --add-port=12345/tcp --permanent
(3)将预定义的ssh服务移除
[root@localhost ~]# firewall-cmd --zone=dmz --remove-service=ssh --permanent
(4)禁止ping
[root@localhost ~]# firewall-cmd --add-icmp-block=echo-request --zone=dmz --permanent
(5)重新加载firewalld配置
[root@localhost ~]# firewall-cmd --reload
success
[root@localhost ~]# firewall-cmd --list-all --zone=dmz
dmz (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources:
services: http https
ports: 12345/tcp
protocols:
masquerade: no
forward-ports:
sourceports:
icmp-blocks: echo-request
rich rules:
4:在网关服务器上配置firewalld防火墙
(1)验证firewalld在网关服务器上启动并正常运行
[root@localhost ~]# firewall-cmd --state running
[root@localhost ~]# systemctl enable firewalld
(2)设置默认区域为external区域,并查看配置结果
masquerade: yes (地址伪装;把数据包里的源地址转换为公有地址,external区域默认开启此策略)
[root@localhost ~]# firewall-cmd --set-default-zone=external
success
[root@localhost ~]# firewall-cmd --list-all
external (active)
target: default
icmp-block-inversion: no
interfaces: ens33 ens37 ens38
sources:
services: ssh
ports:
protocols:
masquerade: yes (地址伪装;把数据包里的源地址转换为公有地址,external区域默认开启此策略)
forward-ports:
sourceports:
icmp-blocks:
rich rules:
(3)将ens37网卡配置到trusted区域,将ens38网卡配置到dmz区域
[root@localhost ~]# firewall-cmd --change-interface=ens36 --zone=trusted --permanent
[root@localhost ~]# firewall-cmd --change-interface=ens37 --zone=dmz --permanent
(4)查看配置情况
[root@localhost ~]# firewall-cmd --get-active-zones
dmz
interfaces: ens37
external
interfaces: ens33
trusted
interfaces: ens36
(5)在企业内网测试计算机上访问网站服务器
curl 192.168.2.10
(6)关闭网关服务器的SELinux,并更改ssh的监听端口,并重启服务
[root@localhost ~]# setenforce 0
[root@localhost ~]# vim /etc/ssh/sshd_config
修改端口号为12345:Port 12345
不启用DNS:UseDNS no
# 重启服务
[root@localhost ~]# systemctl restart sshd
(7)在网关服务器上配置external区域添加TCP的12345端口
[root@localhost ~]# firewall-cmd --zone=external --add-port=12345/tcp --permanent
(8)在网关服务器上配置external区域移除ssh服务
[root@localhost ~]# firewall-cmd --zone=external --remove-service=ssh --permanent
(9)在网关服务器上配置external区域禁止ping
[root@localhost ~]# firewall-cmd --zone=external --add-icmp-block=echo-request --permanent
(10)在网关服务器上重新加载防火墙激活配置
[root@localhost ~]# firewall-cmd --reload
(11)在外网测试计算机上通过ssh登陆网关外部接口地址的12345
[root@localhost ~]# ssh -p 12345 100.1.1.10
(12)在内网测试计算机上ssh登陆web网站服务器的12345端口
[root@localhost ~]# ssh -p 12345 192.168.2.10