防火墙
目录
一、防火墙介绍:
1. 概念
- 防火墙指的是一个由软件和硬件设备组合而成、在内部网和外部网之间、专用网与公共网之间的界面上构造的保护屏障,用来隔离非授权用户并过滤网络中有害的流量或数据包。防火墙其实是一种隔离技术,简单来说,就是限制服务器之间的访问,以此来保护服务器的安全。
2. 功能
- 访问控制(策略)、攻击防护(主要三四层,五层次要)、冗余设计(HA)(类似路由器的vrrp,热备份)、路由、交换、日志记录、虚拟专网VPN、NAT
3. 分类
- 软件防火墙(一般保护个人)
- 硬件防火墙(保护多人)
4. 区域隔离
-
防火墙会将不同的网络区域进行隔离,总的来说会把网络隔离为3个区域
- 内部区域(Trust区域)
- DMZ区域(称为“隔离区”,也称“停火区”)
- 外部区域(Untrust区域)
-
trust区域一般被防火墙放行访问DMZ和untrust区域,即内网能访问DMZ
DMZ区域一般被防火墙放行访问untrust区域(不要放行访问trust区域),即DMZ能访问外网
untrust区域无法主动访问trust和DMZ区域,除非写了策略,即外网只能访问开通访问策略的部分DMZ
5. 性能
-
衡量防火墙性能的5大指标
1、吞吐量:在不丢包的情况下单位时间内通过的数据包数量2、时延:数据包第一个比特进入防火墙到最后一个比特从防火墙输出的时间间隔
3、丢包率:通过防火墙传送时所丢失的数据包数量占所发送数据包的比率
4、并发连接数:防火墙能够同时处理的点到点连接的最大数目
5、新建连接数:在不丢包的情况下每秒可以建立的最大连接数
二、linux的firewalld使用
1. 概述
-
在RHEL7(就是RedHat Enterprise Linux红帽企业版Linux的缩写)里有几种防火墙共存:firewalld、iptables、ebtables,Linux系统默认使用firewalld来管理netfilter子系统,firewalld其实底层调用的命令还是iptables等
-
firewalld是默认的防火墙配置管理工具,拥有基于CLI(命令行界面)、GUI(图形用户界面)和直接修改配置文件三种管理方式
-
相较于传统的防火墙管理配置工具,firewalld支持动态更新技术并加入了区域(zone)的概念,简单来说,区域就是firewalld预先准备了几套防火墙策略集合(策略模板),用户可以根据自己的场景选择适合自己的策略,从而实现防火墙策略之间的快速切换。
2. 与iptables的对比
-
对比:
- firewalld是iptables的前端控制器,iptables是静态防火墙,任一个策略变更都需要reload所有策略,丢失现有链接
- firewalld是动态防火墙,任一个策略变更不需要reload所有策略,只将变更部分保存到iptables,不丢失现有链接
- firewalld提供一个daemon和service,底层使用还是iptables
- firewalld和iptables都是基于内核Netfilter
- firewalld默认是全部拒绝,手动配置要放行的服务,而iptables默认是全部允许,需要拒绝的才去限制
- firewalld和iptables都是本身不具备防火墙功能,都是通过驱动内核netfilter来实现,都只是维护防火墙规则的工具
-
firewalld的优势
- firewalld可以动态修改单条规则,而不需要像iptables那样,再修改了规则后必须全部刷新才可以生效
- firewalld在使用上要比iptables更人性化,即使不明白“4表5链”,对TCP/IP协议也不理解也可以实现大部分功能。
- 支持了区域zone技术,不同的区域可以同时生效
- 支持IPv4、IPv6的防火墙设置以及以太网桥接
- 支持服务或者应用程序直接添加防火墙规则的接口
- 拥有运行时配置和永久配置两种选项
- 运行时配置,则服务或系统重启后失效
- 永久配置,则服务或者系统关机、重启后仍然生效
-
firewalld的域
-
*******注意:不同的区域是可以同时生效****** *******注意:最终一个区域的安全程度是取决于管理员在此区域中设置的规则;****** 区域如同进入主机的安全门, 每个区域都具有不同限制程度的规则,只会允许符合规则的流量传入; 可以根据网络规模, 使用一个或多个区域,但是任何一个 活跃区域 至少需要关联源地区或接口; 默认情况下,public区域是默认区域,包含所有接口(网卡) # 下面这些firewalld自带的9个域,只是表面上区分一下各个域的作用,实际效果还是要看每个域其中配置的规则 public:这是默认的Firewalld域,适用于公共网络,如互联网。该域的策略通常是较为严格的,以保护系统免受来自不受信任网络的攻击。 internal:该域适用于内部网络,如局域网。在这个域中,可以允许更多的流量传入和传出系统,因为该网络被认为是受信任的。 dmz:该域通常用于隔离被认为是不受信任的网络,如网络中的服务器。DMZ(Demilitarized Zone)是将不可信任网络与内部网络分离的安全措施。在这个域中,可以设置更加严格的规则来控制来自DMZ网络的流量。 work:这个域通常用于工作环境中的系统,如办公室网络。与公共网络相比,该域的策略可能会更加宽松,以适应对内部员工的需求。 home:该域适用于家庭网络环境。与公共网络相比,该域的策略可能会更加宽松,并允许更多的流量传入和传出系统。 trusted(信任区域)∶ 允许所有的传入流量 external(外部区域)∶ 允许与 ssh 预定义服务匹配的传入流量,其余均拒绝。默认将通过此区域转发的IPy4传出流量将进行地址伪装, 可用于为路由器启用了伪装功能的外部网络 block(限制区域)∶拒绝所有传入流量。 drop(丢弃区域)∶ 丢弃所有传入流量,并且不产生包含 ICMP的错误响应
-
3. firewalld的使用
(1)firewalld安装和启动
yum install firewalld firewall-config
systemctl start firewalld # 启动
systemctl status firewalld # 或者 firewall-cmd --state 查看状态
systemctl stop firewalld # 停止
systemctl enable firewalld # 开机自启
systemctl disable firewalld # 开机禁止启动
# 你也可以关闭目前还不熟悉的FirewallD防火墙,而使用iptables,命令如下:
systemctl stop firewalld
systemctl disable firewalld
yum install iptables-services
systemctl start iptables
systemctl enable iptables
(2)firewall-cmd 命令
i. 基本命令
firewall-cmd --version # 查看版本
firewall-cmd --help # 查看帮助
firewall-cmd --state # 显示状态
firewall-cmd --panic-on # 拒绝所有包
firewall-cmd --panic-off # 取消拒绝状态
firewall-cmd --query-panic # 查看是否拒绝
firewall-cmd --reload # 重新加载防火墙,并不中断用户连接(firewalld特性之一动态添加规则)
firewall-cmd --complete-reload # 重新加载防火墙并中断用户连接(类似于重启服务)
1. firewall-cmd 后面常用的参数:
--zone=区域名 :指定要添加服务的区域名称
--add-service :指定要添加的服务名称。
--list-all :列出所有规则。
--reload :重新加载防火墙规则。
--permanent :将规则保存到永久配置中,以便系统重启后仍然有效。
--delete-service :删除服务。
--list-services :列出当前系统中所有可用服务。
--add-source :添加一个 IP 或 IP 段。
--remove-source :删除一个 IP 或 IP 段。
--list-sources :列出所有已添加的 IP 或 IP 段。
--add-port :添加端口。
--remove-port :删除端口。
--list-ports :列出所有已添加的端口。
--add-rich-rule :添加一个更加复杂的规则。
--query-service :查询服务是否可用。
--get-zones :列出所有可用的区域。
ii. zone相关命令
firewall-cmd --get-zones # 显示支持的区域列表
firewall-cmd --get-active-zones # 查看当前的区域
firewall-cmd --get-default-zone # 查看默认区域
firewall-cmd --set-default-zone=home # 设置默认区域为 home,这个是立即生效,无需重启firewalld
firewall-cmd --zone=public --list-interfaces # 显示显示公共区域(public)所有接口
firewall-cmd --zone=public --list-all # 显示公共区域(public)所有设置
firewall-cmd --get-zone-of-interface=ens33 # 查看指定接口 ens33 所属区域
firewall-cmd --zone=internal --change-interface=ens33 # 临时修改网络接口 ens33 为内部区域(internal),永久修改加上 --permanent 参数
firewall-cmd --zone=public --add-interface=ens37 # 为公共区域(public)增加一个接口 ens37
iii. service相关命令
firewall-cmd --get-service # 显示服务列表
firewall-cmd --list-service # 显示当前服务
firewall-cmd --enable service=ssh # 允许SSH服务通过
firewall-cmd --disable service=ssh # 禁止SSH服务通过
firewall-cmd --enable service=samba --timeout=600 # 临时允许 samba 服务通过 600 秒
firewall-cmd --permanent --zone=internal --add-service=http # 添加 http 服务到内部区域(internal)
firewall-cmd --zone=work --add-service=smtp # 把 smtp 服务加入工作区域(work)
firewall-cmd --zone=work --remove-service=smtp # 从工作区域(work)移除 smtp 服务
firewall-cmd --zone=work --add-interface=eth1 # 把 网卡eth1 加入工作区域(work)
iiii. source和port、地址转发相关命令
--add-source=ip段
--remove-source=ip段
--add-port=端口号/协议(协议是小写的英文字母) # 表示该端口运行发出和接收流量
--remove-port=端口号/协议(协议是小写的英文字母)
--add-source-port=端口号/协议(协议是小写的英文字母) # 指定源端口
# 地址转发
--add-forward-port=端口号/协议:要转发到的目标地址:端口号 # 将流量转发到目标地址端口
--add-forward-port=端口号/协议:要转发到的目标地址:端口号 --source=ip段 # 只转发指定的来源地址的流量到目标地址端口
firewall-cmd --zone=block --add-source=192.168.100.0/24 # 将源地址192.168.100.0/24网段加入到block域,block域内的服务全都会阻塞掉
--add-port=80/tcp #添加端口,格式为:端口/通讯协议,相反的为 --remove-port=80/tcp
firewall-cmd --zone=internal --add-port=443/tcp # 在内部区域(internal)打开 443/tcp 端口
firewall-cmd --zone=external --add-forward-port=port=22:proto=tcp:toport=52222:toaddr=192.168.1.20 # 把外部区域(external)的 22 端口转发到 192.168.1.20 的 52222 端口
firewall-cmd --zone=internal --add-source-port==443/tcp # 表示internal域只接收源端口为443且使用协议为tcp的地址的流量
iiiii. 地址伪装相关命令
firewall-cmd --zone=external --query-masquerade # 查询外部区域(external)是否能伪装ip,结果为yes
firewall-cmd --zone=external --add-masquerade # 外部区域(external)启用IP伪装(masquerade)
firewall-cmd --zone=external --remove-masquerade # 外部区域(external)禁用用IP伪装