文章目录
Linux防火墙基础之firewalld
一:Firewalld简介
1.1:防火墙概述
- 支持网络区域所定义的网络链接以及接口安全等级的动态防火墙管理工具
- 支持IPv4、IPv6防火墙设置以及以太网桥
- 支持服务或应用程序直接添加防火墙规则接口
- 拥有两种配置模式
1、运行时配置
2、永久配置
1.2: 防火墙放行规则
- 出去的 数据防火墙记录其源IP地址,是内部的地址,回应的数据防火墙检查要是内部地址就放行
- 如果额外添加防火墙规则,可以进出都检查
- 同等级别的访问默认也拒绝
- 低级别往高级别默认拒绝
- 高级别往低级别默认放行
1.3:Firewalld和iptables的关系
1.3.1 netfilter位于Linux内核中的包过滤功能体系
- 称为Linux防火墙的“内核态”
1.3.2 Firewalld/iptables
- CentOS7默认的管理防火墙规则的工具(Firewalld)
- 称为Linux防火墙的“用户态"
1.3.3 netfilter和Firewalld,iptables关系
- 只有iptables才能和内核态进行交互
- Firewalld就是对iptables的封装,并且有区域性的概念
1.3.4 Firewalld和iptables的区别
Firewalld | iptables | |
---|---|---|
配置文件 | /usr/lib/firewalld,/etc/firewalld/firewalld.conf | /etc/sysconfig/iptables-config |
对规则的修改 | 不需要全部刷新策略,不丢失现行连接 | 需要全部刷新策略,丢失链接 |
防火墙类型 | 动态防火墙 | 静态防火墙 |
1.4 CentOS 6 和CentOS 7 防火墙的区别
-
centos6是iptables
只有命令管理工具 iptables(操作复杂) firewall-cmd
-
centos7有firewalld,iptables
图形化管理工具 firewall-config
命令管理工具 iptables(操作复杂) firewall-cmd
二、Firewalld网络区域
2.1:Firewalld网络区域
- 区域如同进入主机的安全门,每个区域都具有不同限制程度的规则
- 可以使用一个或多个区域,但是任何一个活跃区域至少需要关联源地址或接口
- 默认情况下,public区域是默认区域,包含所有接口(网卡) .
2.2:Firewalld 数据处理流程
- Firewalld数据处理流程
检查数据来源的源地址
◆若源地址关联到特定的区域,则执行该区域所指定的规则
◆若源地址未关联到特定的区域,则使用传入网络接口的区域并执行该区域所指定的规则
◆若网络接口未关联到特定的区域,则使用默认区域并执行该区域所指定的规则
3.3 区域分类
区域 | 默认规则策略 |
---|---|
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防火墙的配置方法
3.1配置种类
- 运行时配置
实时生效,并持续至Firewalld重新启动或重新加载配置
不中断现有连接
不能修改服务配置 - 永久配置
不立即生效,除非Firewalld重新启动或重新加载配置
中断现有连接
可以修改服务配置
3.3配置工具
- firewall-config图形工具(用的少)
- firewall-cmd命令行工具(用的多)
- /etc/firewalld/中的配置文件
Firewalld会优先使用/etc/firewalld/中的配置,如果不存在配置文件,则使用/usr/bin/firewalld/中的配置
/etc/firewalld/:用户自定义配置文件,需要时可通过从/usr/lib/firewalld/中拷贝
/usr/lib/firewalld/:默认配置文件,不建议修改,若恢复至默认配置,可以直接删除/etc/firewalld/中的配置 - 优先读/etc/firewalld,如果不存在,再读取/usr/lib/firewalld 这个一般不建议修改
四、 Firewalld防火墙命令使用
4.1 启动、停止、查看 firewalld 服务
[root@localhost ~]# systemctl start firewalld //启动 firewalld
[root@localhost ~]# systemctl enable firewalld //设置 firewalld 为开机自启动
[root@localhost ~]# systemctl status firewalld //查看 firewalld 防火墙状态
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since 四 2020-07-30 11:40:47 CST; 3 days ago
Docs: man:firewalld(1)
Main PID: 8899 (firewalld)
CGroup: /system.slice/firewalld.service
└─8899 /usr/bin/python -Es /usr/sbin/firewa...
7月 30 11:40:45 localhost.localdomain systemd[1]: Sta...
[root@localhost ~]# firewall-cmd --state //查看防火墙状态
running
[root@localhost ~]# systemctl stop firewalld //停止 firewalld
[root@localhost ~]# systemctl disable firewalld //设置 firewalld 开机不自启动
4.2 获取自定义信息
firewall-cmd 预定义信息主要包括三种:可用的区域、可用的服务以及可用的 ICMP 阻 塞类型,具体的查看命令如下所示。
[root@localhost ~]# firewall-cmd --get-zones //显示预定义的区域
[root@localhost ~]# firewall-cmd --get-service //显示预定义的服务
RH-Satellite-6 amanda-client amanda-k5-client bacula bacula-client bgp bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client dns docker-registry docker-swarm dropbox-lansync elasticsearch freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master git gre high-availability http https imap imaps ipp ipp-client ipsec irc ircs iscsi-target jenkins kadmin kerberos kibana klogin kpasswd kprop kshell ldap ldaps libvirt libvirt-tls managesieve mdns minidlna mongodb mosh mountd ms-wbt mssql murmur mysql nfs nfs3 nmea-0183 nrpe ntp openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster quassel radius redis rpc-bind rsh rsyncd samba samba-client sane sip sips smtp smtp-submission smtps snmp snmptrap spideroak-lansync squid ssh syncthing syncthing-gui synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client upnp-client vdsm vnc-server wbem-https xmpp-bosh xmpp-client xmpp-local xmpp-server zabbix-agent zabbix-server
[root@localhost ~]# firewall-cmd --get-icmptypes //显示预定义的 ICMP 类型
address-unreachable bad-header communication-prohibited destination-unreachable echo-reply echo-request fragmentation-needed host-precedence-violation host-prohibited host-redirect host-unknown host-unreachable ip-header-bad neighbour-advertisement neighbour-solicitation network-prohibited network-redirect network-unknown network-unreachable no-route packet-too-big parameter-problem port-unreachable precedence-cutoff protocol-unreachable redirect required-option-missing router-advertisement router-solicitation source-quench source-route-failed time-exceeded timestamp-reply timestamp-request tos-host-redirect tos-host-unreachable tos-network-redirect tos-network-unreachable ttl-zero-during-reassembly ttl-zero-during-transit unknown-header-type unknown-option
4.3 区域管理
使用 firewall-cmd 命令可以实现获取和管理区域,为指定区域绑定网络接口等功能
4.3.1显示网络连接或接口的默认区域
[root@localhost ~]# firewall-cmd --get-default-zone
public
4.3.2 设置网络连接或接口的默认区域
[root@localhost ~]# firewall-cmd --set-default-zone= <>里面是想要设置为默认的区域
示例
[root@localhost ~]# firewall-cmd --set-default-zone=dmz
success
[root@localhost ~]# firewall-cmd --get-default-zone
dmz
4.3.3 显示网络接口 ens33 对应区域
[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens33
dmz
4.3.4 将网络接口 ens33 对应区域更改为 internal 区域
[root@localhost ~]# firewall-cmd --zone=internal --change-interface=ens33
The interface is under control of NetworkManager, setting zone to 'internal'.
success
[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens33查看网络接口ens33对应的区域
internal
4.3.5 查看internal区域对应的网络接口
[root@localhost ~]# firewall-cmd --zone=internal --list-interfaces
ens33
4.3.6 显示所有激活区域
[root@localhost ~]# firewall-cmd --get-active-zones
internal
interfaces: ens33
4.4.7 为指定接口绑定区域
firewall-cmd --zone= --add-interface=
4.4.8 为指定的区域更改绑定的网络接口
[root@localhost ~]# firewall-cmd --zone= --change-interface=
4.4.9 为指定的区域删除绑定的网络接口
[root@localhost ~]# firewall-cmd --remove-interface=<interface>
4.4.10 显示所有区域及其规则
[root@localhost ~]# firewall-cmd --list-all-zones
block
target: %%REJECT%%
icmp-block-inversion: no
interfaces:
sources:
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports
4.4.11 显示所有指定区域的所有规则
[root@localhost ~]# firewall-cmd [–zone=] --list-all
4.5 区域命令总结
命令选项 | 说明 |
---|---|
–get-default-zone | 显示网络连接或接口的默认区域 |
–set-default-zone=区域类型 | 设置网络连接或接口的默认区域 |
–get-active-zones | 显示已激活的所有区域 |
–get-zone-of-interface=接口(网卡) | 显示指定接口绑定的区域 |
–zone=区域类型 --add-interface=接口(网卡) | 为指定接口绑定区域 |
–zone=区域类型 --change-interface=接口(网卡) | 为指定的区域更改绑定的网络接口 |
–zone=区域类型 --remove-interface=接口(网卡) | 为指定的区域删除绑定的网络接口 |
–query-interface=接口(网卡) | 查询区域中是否包含某接口 |
–list-all-zones | 显示所有区域及其规则 |
[–zone=区域类型] --list-all | 显示所有指定区域的所有规则 |
4.6Firewalld服务操作指令
-
为 了 方 便 管 理 , firewalld 预 先 定 义 了 很 多 服 务 , 存 放 在 /usr/lib/firewalld/services/ 目录中,服务通过单个的 XML 配置文件来指定。这些配置文件则按以下格式命名:service-name.xml,每个文件对应一项具体的网络服务,如 ssh 服 务等。与之对应的配置文件中记录了各项服务所使用的 tcp/udp 端口。
-
在最新版本的 firewalld 中默认已经定义了 70 多种服务供我们使用,对于每个网络区域,均可以配置允 许访问的服务。当默认提供的服务不适用或者需要自定义某项服务的端口时,我们需要将
service 配置文件放置在 /etc/firewalld/services/ 目录中。service 配置具有以下优点
4.6.1为默认区域设置允许访问的服务
[root@localhost ~]# firewall-cmd --list-services //显示默认区域内允许访问的所有服务
[root@localhost ~]# firewall-cmd --add-service=http //设置默认区域允许访问 http 服务
[root@localhost ~]#firewall-cmd --add-service=ssh //设置默认区域允许访问 https 服务
4.6.2 internal 区域设置允许访问的服务
[root@localhost ~]# firewall-cmd --zone=internal --add-service=mysql //设置 internal 区域允许访问 mysql 服务
[root@localhost~]#firewall-cmd --zone=internal --remove-service=samba-client //设置 internal 区域不允许访问 samba-client 服务
[root@localhost ~]# firewall-cmd --zone=internal --list-services //显示 internal 区域内允许访问的所有服务
4.6.3 操作命令总结
命令选项 | 说明 |
---|---|
[–zone=区域类型] --list-services | 显示指定区域内允许访问的所有服务 |
[–zone=区域类型] --add-service=服务 | 为指定区域设置允许访问的某项服务 |
[–zone=区域类型] --remove-service=服务 | 删除指定区域已设置的允许访问的某项服务 |
[–zone=区域类型] --query-service=服务 | 查询指定区域中是否启用了某项服务 |
4.7 端口管理
4.7.1 显示指定区域允许访问的所有端口
[root@localhost ~]# firewall-cmd --zone=work --list-port
4.7.2 为指定区域设置允许访问的端口号
[root@localhost ~]# firewall-cmd --zone=internal --add-port=69/udp
success
[root@localhost ~]# firewall-cmd --zone=internal --list-ports 查看
69/udp
4.7.3 删除指定区域已设置的允许访问端口号(包括协议号)
删除udp69端口
[root@localhost ~]# firewall-cmd --zone=internal --remove-port=69/udp
4.8 firewall阻塞ICMP操作命令
4.8.1 显示指定区域内拒绝访问的所有ICMP类型
[root@localhost ~]# firewall-cmd --zone=internal --list-icmp-blocks
4.8.2 为指定区域内设置拒绝访问的某项ICMP类型
[root@promote ~]# firewall-cmd --zone=internal --remove-icmp-block=echo-reply
success
4.8.3 删除指定区域已设置的拒绝访问的某项ICMP类
[root@promote ~]# firewall-cmd --zone=internal --remove-icmp-block=echo-reply
success
4.8.4 :查询work区域的echo-request类型的ICMP是否阻塞
[root@localhost ~]# firewall-cmd --zone=internal --query-icmp-block=echo-request
no
4.8.5 操作命令总结
操作命令选项 | 说明 |
---|---|
[–zone=区域类型] --list-icmp-blocks | 显示指定区域内阻塞的所有ICMP类型 |
[–zone=区域类型] --add-icmp-block=ICMP类型 | 为指定区域设置阻塞的某项ICMP类型 |
nternal --query-icmp-block=echo-request
no
#### 4.8.5 操作命令总结
| 操作命令选项 | 说明 |
| --------------------------------------------- | -------------------------------- |
| [–zone=区域类型] --list-icmp-blocks | 显示指定区域内阻塞的所有ICMP类型 |
| [–zone=区域类型] --add-icmp-block=ICMP类型 | 为指定区域设置阻塞的某项ICMP类型 |
| [–zone=区域类型] --remove-icmp-block=ICMP类型 | 删除指定区域已阻塞的某项ICMP类型 |