Firewalld防火墙

Firewalld防火墙实战

firewalld概述

在CentOS7系统中集成了多款防火墙管理工具,默认启用的是firewalld(动态防火墙管理器)防火墙管理工具,Firewalld支持CLI(命令行)以及GUI(图形)的两种管理方式。
对于接触Linux较早的人员对Iptables比较熟悉,但由于Iptables的规则比较的麻烦,并且对网络有一定要求,所以学习成本较高。但firewalld的学习对网络并没有那么高的要求,相对iptables来说要简单不少,所以建议刚接触CentOS7系统的人员直接学习Firewalld。

在这里插入图片描述

需要注意的是:如果开启防火墙工具,并且没有配置任何允许的规则,那么从外部访问防火墙设备默认会被阻止,但是如果直接从防火墙内部往外部流出的流量默认会被允许。

firewalld 只能做和IP/Port相关的限制,web相关的限制无法实现。

防火墙区域管理

那么相较于传统的Iptables防火墙,firewalld支持动态更新,并加入了区域zone的概念
简单来说,区域就是firewalld预先准备了几套防火墙策略集合(策略模板),用户可以根据不同的场景选择不同的策略模板,从而实现防火墙策略之间的快速切换

区域选项默认规则策略
trusted允许所有的数据包流入流出
home拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh、mdns、ipp-client、amba-client与dhcpv6-client服务相关,则允许流量
internal等同于home区域
work拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh、ipp-client、dhcpv6-client服务相关,则允许流量
public拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh、dhcpv6-client服务相关,则允许流量
external拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh服务相关,则允许流量
dmz拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh服务相关,则允许流量
block拒绝流入的流量,除非与流出的流量相关
drop拒绝流入的流量,除非与流出的流量相关

需要注意的是Firewalld中的区域与接口
一个网卡仅能绑定一个区域, eth0 -->A区域 A区域–>eth0 eth1 eth2 但一个区域可以绑定多个网卡。 还可以根据来源的地址设定不同的规则。比如:所有人能访问80端口,但只有公司的IP才允许访问22端口。

防火墙基本指令参数

firewall-cmd命令分类列表

参数 作用

**zone区域相关指令 **

–get-default-zone 获取默认的区域名称

–set-default-zone=<区域名称> 设置默认的区域,使其永久生效

–get-active-zones 显示当前正在使用的区域与网卡名称

–get-zones 显示总共可用的区域

–get-zone= 新增区域

**services服务相关命令 **

–get-services 列出服务列表中所有可管理的服务

–add-service= 设置默认区域允许该填加服务的流量

–remove-service= 设置默认区域不允许该删除服务的流量

**Port端口相关指令 **

–add-port=<端口号/协议> 设置默认区域允许该填加端口的流量

–remove-port=<端口号/协议> 置默认区域不允许该删除端口的流量

Interface网站相关指令

–add-interface=<网卡名称> 将源自该网卡的所有流量都导向某个指定区域

–change-interface=<网卡名称> 将某个网卡与区域进行关联

其他相关指令

–list-all 显示当前区域的网卡配置参数、资源、端口以及服务等信息

–reload 让“永久生效”的配置规则立即生效,并覆盖当前的哦诶之规则

防火墙配置策略

runtime 运行时: 修改规则马上生效,但如果重启服务则马上失效,测试建议。 permanent 持久配置: 修改规则后需要reload重载服务才会生效,生产建议。

# 1.查看默认区域
[root@web03 ~]# firewall-cmd --get-default-zone
public
# 2.查看活动区域
[root@db01 ~]# firewall-cmd --get-active-zones
public
  interfaces: eth0 eth1

# 3.查看当前默认区域的规则
[root@db01 ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0 eth1
  sources:
  services: ssh dhcpv6-client
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
  
# 4.查看指定区域规则
[root@db01 ~]# firewall-cmd --list-all --zone=drop
drop
  target: DROP
  icmp-block-inversion: no
  interfaces:
  sources:
  services:
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
  
[root@db01 ~]# firewall-cmd --list-all --zone=trusted
trusted
  target: ACCEPT
  icmp-block-inversion: no
  interfaces:
  sources:
  services:
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
  
## 安装一个补全包
[root@db01 ~]# yum install -y bash-completion-extras

添加一个放行端口

[root@db01 ~]# firewall-cmd --add-port=8081/tcp --permanent
success
[root@db01 ~]# firewall-cmd --add-port=8081/tcp
success

添加一个放行服务

[root@db01 ~]# firewall-cmd --add-service=mysql
success
[root@db01 ~]# firewall-cmd --add-service=mysql --permanent
success

规则配置

1.使用firewalld各个区域规则结合配置,调整默认public区域拒绝所有流量,但如果来源IP是10.0.0.0/24网段则允许

[root@db01 ~]# firewall-cmd --remove-service=ssh --remove-service=mysql --removeservice=dhcpv6-client

[root@db01 ~]# firewall-cmd --remove-port=8080/tcp --remove-port=8081/tcp --removeport=8083/tcp --permanent

[root@db01 ~]# firewall-cmd --add-source=10.0.0.0/24 --zone=trusted
success

[root@db01 ~]# firewall-cmd --get-active-zone
public
  interfaces: eth0 eth1
trusted
  sources: 10.0.0.0/24

[root@db01 ~]# firewall-cmd --add-service=http --add-service=https
success

防火墙自定义服务

# 1.查找firewalld服务定义的目录
[root@db01 ~]# rpm -ql firewalld
/usr/lib/firewalld/services/

# 2.定义
[root@db01 ~]# cp /usr/lib/firewalld/services/{https,qqq}.xml

# 3.修改端口
[root@db01 ~]# vim /usr/lib/firewalld/services/qqq.xml

<?xml version="1.0" encoding="utf-8"?>
<service>
<short>Secure WWW (HTTPS)</short>
<description>HTTPS is a modified HTTP used to serve Web pages when security is
important. Examples are sites that re
quire logins like stores or web mail. This option is not required for viewing pages
locally or developing Web pages. Y
ou need the httpd package installed for this option to be useful.</description>
<port protocol="tcp" port="8888"/>
</service>

# 4.重新加载防火墙
[root@db01 ~]# systemctl reload firewalld

防火墙端口转发

#公式
firewall-cmd --permanent --zone=<区域> --add-forward-port=port=<源端口号>:proto=<协议>:toport=<目标端口号>:toaddr=<目标IP地址>

10.0.0.51 5555 转发到 10.0.0.7 80

firewall-cmd --permanent --zone=public --add-forward-port=port=5555:proto=tcp:toport=80:toaddr=10.0.0.7

富语言规则

firewalld中的富语言规则表示更细致,更详细的防火墙策略配置,他可以针对系统服务、端口号、原地址和目标地址等诸多信息进行更有针对性的策略配置,优先级在所有的防火墙策略中也是最高的,下面为firewalld富语言规则帮助手册

语法:

rule [family="ipv4|ipv6"]
source address="address[/mask]" [invert="True"]
service name="service name"
port port="port value" protocol="tcp|udp"
protocol value="protocol value"
forward-port port="port value" protocol="tcp|udp" to-port="port value" toaddr="
address"

1.比如允许10.0.0.1主机能够访问http服务,允许172.16.1.0/24能访问3306端口

accept | reject | drop
允许    拒绝      拒绝
同意    拒绝      不搭理

[root@db01 ~]# firewall-cmd --add-rich-rule='rule family=ipv4 source address=10.0.0.1service name=http accept'
[root@db01 ~]# firewall-cmd --add-rich-rule='rule family=ipv4 sourceaddress=172.16.1.0/24 port port=3306 protocol=tcp accept'

2.默认public区域对外开放10.0.0.8能通过ssh服务连接,但拒绝172.16.1.0/24网段通过ssh连接服务器

[root@db01 ~]# firewall-cmd --add-rich-rule='rule family=ipv4 sourceaddress=10.0.0.8/32 service name=ssh accept'

[root@db01 ~]# firewall-cmd --add-rich-rule='rule family=ipv4 sourceaddress=172.16.1.0/24 service name=ssh drop'

3.使用firewalld,允许所有人能访问http,https服务,但只有10.0.0.1主机可以访问ssh服务

[root@db01 ~]# firewall-cmd --add-rich-rule='rule family=ipv4 service name={http,https}accept'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值