Firewalld

简介

防火墙是只设置在不同网络与网络安全与之间的一系列部件的场合,也是不同安全与之间信息的唯一出口。通过监测、限制并更改跨越防火墙的数据流,尽可能的对外屏蔽网络内部的信息、结构和运行状态,且有选择地接受外部网络访问。在内外网之间架起一道屏障,以避免发生不可预知或潜在的入侵。从传统意义上来说防火墙技术分为三类:包过滤(Packet Filtering)、应用代理(Application Proxy)、状态检测(Stateful Inspection)。
Linux的防火墙体系主要工作网络层,针对TCP/IP数据包实施过滤和限制,属于典型的包过滤防火墙(或称为网络层防火墙)。Linux系统的防火墙体系基于内核编码实现,具有非常稳定的性能和高效率,也因此获得广泛的应用。在CentOS7系统中几种防火墙共存:firewalld、iptables、ebtables,默认是用firewalld来管理netfilter子系统。
netfilter:指的是Linux内核中实现包过滤防火墙的内部结构,不以程序或文件的形式存在,属于“内核态”(Kernel Space,又称为内核空间)的防火墙的功能体系。
firewalld:指用于管理Linux防火墙的命令程序,属于“用户态”(User Space,又称为用户空间)的防火墙管理体系。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5BTEoqU2-1594968968969)(img/7.15.png)]

firewalld的作用是为包括过滤机制提供匹配规则(或称为策略),通过各种不同的规则,告诉netfilter对来自指定源,前往指定目的或具有某些协议特征的数据包采取何种处理方式。为了更方便地组织和管理防火墙,firewalld提供了支持网络区域链接以及接口安全等级的动态防火墙管理工具。它支持IPv4、IPv6防火墙设置以及以太网桥,并拥有两种配置模式:运行时配置与永久配置。它还支持服务或应用程序直接添加防火墙规则接口。

Firewalld与iptables对比

-firewalldiptables
配置文件/usr/lib/firewall/
/etc/firewalld//etc/sysconfig/iptables
对规则的修改不需要全部刷新策略,不丢失现在连接需要全部刷新策略,丢失连接
防火墙类型动态防火墙静态防火墙

firewalld 是 iptables 的前端控制器
iptables 静态防火墙 任一策略变更需要reload所有策略,丢失现有链接
firewalld 动态防火墙 任一策略变更不需要reload所有策略 将变更部分保存到iptables,不丢失现有链接
firewalld 提供一个daemon和service 底层使用iptables
基于内核的Netfilter

firewalld跟iptables比起来至少有两大好处:

1)irewalld可以动态修改单条规则,而不需要像iptables那样,在修改了规则后必须得全部刷新才可以生效;

2)firewalld在使用上要比iptables人性化很多,即使不明白“五张表五条链”而且对TCP/IP协议也不理解也可以实现大部分功能。
firewalld跟iptables比起来,不好的地方是每个服务都需要去设置才能放行,因为默认是拒绝。而iptables里默认是每个服务是允许,需要拒绝的才去限制。
firewalld自身并不具备防火墙的功能,而是和iptables一样需要通过内核的netfilter来实现,也就是说firewalld和 iptables一样,他们的作用都是用于维护规则,而真正使用规则干活的是内核的netfilter,只不过firewalld和iptables的结构以及使用方法不一样罢了。

firewalld 网络区域

firewalld网络区域
firewalld将所有的网络数据流量划分为多个区域,从而简化防火墙的管理。根据数据包的源IP地址或传入网络接口等条件,将数据流量传入相应的区域的防火墙规则。对于进入系统的数据包,首先检查的就是其源地址。
(1)若源地址关联到特定的区域,则执行该区域所制定的规则。
(2)若源地址未关联特定的区域,则使用传入网络接口的区域并执行该区域所制定的规则。
(3)若网络接口未关联到特定的区域,则使用默认区域执行该区域所制定的规则

firewalld 的预定义区域说明

区域名称默认配置说明
阻塞区域(block)任何传入的网络数据包都将被阻止。
工作区域(work)相信网络上的其他计算机,不会损害你的计算机。
家庭区域(home)相信网络上的其他计算机,不会损害你的计算机。
公共区域(public)不相信网络上的任何计算机,只有选择接受传入的网络连接。
隔离区域(DMZ)
隔离区域也称为非军事区域,内外网络之间增加的一层网络,起到缓冲作用。对于隔离区域,只有选择接受传入的网络连接。
信任区域(trusted)所有的网络连接都可以接受。
丢弃区域(drop)任何传入的网络连接都被拒绝。
内部区域(internal)信任网络上的其他计算机,不会损害你的计算机。只有选择接受传入的网络连接。
外部区域(external)不相信网络上的其他计算机,不会损害你的计算机。只有选择接受传入的网络连接。
  • 注:FirewallD的默认区域是public。
    在流量经过防火墙时,firewalld防火墙会对传入的每个数据包进行检查,如果此数据包的源地址关联到特定的区域,则会应用该区域的规则对此数据包进行处理,如果该源地址没有关联到任何区域,则将使用传入网络接口所在的区域规则进行处理。如果流量与不允许的端口 、协议或者服务匹配,则防火墙拒绝传入流量。

firewalld防火墙的配置方法

  • 运行时配置

    实时生效,并持续至Firewalld重新启动或重新加载配置
    不中断现有连接
    不能修改服务配置

  • 永久配置

    不立即生效,除非Firewalld重新启动或重新加载配置
    中断现有连接
    可以修改服务配置

配置firewalld的三种方式:
① firewall-config图形工具
② firewall-cmd命令行工具
③ /etc/firewalld/中的配置文件

  • Firewalld会优先使用/etc/firewalld/ 中的配置,如果不存在配置文件,则使用/etc/firewalld/ 中的配置
  • /etc/firewalld/ :用户自定义配置文件,需要时可通过从/usr/lib/firewalld/中拷贝
  • /usr/lib/firewalld/:默认配置文件,不建议修改,若恢复至默认配置,可直接删除/etc/firewalld/ 中的配置
  • 不建议直接编辑配置文件,建议使用命令行工具。

防火墙进程操作

[root@ns1 ~]# systemctl 选项 firewalld
  • 选项:start 、stop 、restart 、status

防火墙管理操作

  • firewall-cmd命令

    支持全部防火墙特性
    对于状态和查询模式,命令只返回状态,没有其他输出。
    –permanent 参数:携带该参数表示永久配置,否则表示运行时配置。
    [–zone=] 选项:不携带此选项表示针对默认区域操作,否则针对指定区域操作。

常用 firewall-cmd 命令

firewall-cmd 命令说明
–get-default-zone查看当前默认区域
–get-active-zones列出当前正在使用的区域及其所对应的网卡接口
–get-zones列出所有可用的区域
–set-default-zone=设置默认区域(注意此命令会同时修改运行时配置和永久配置)
–add-source=[–zone=]将来自IP地址或网段的所有流量路由到指定区域,没有指定区域时使用默认区域
–remove-source=[–zone]从指定区域中删除来自IP地址或网段的所有路由流量规则。没有指定区域时使用默认区域
–add-interface=[–zone]将来自该接口的所有流量都路由到指定区域。没有指定区域时使用默认区域
–change-interface=[–zone]将接口与指定区域做关联,没有指定区域时使用默认区域
–list-all [–zone=]列出指定区域已配置接口、源、服务、端口等信息,没有指定区域时使用默认区域
–add-service=[–zone]允许到该服务的流量通过指定区域,没有指定区域时使用默认区域
–remove-service=[–zone]从指定区域的允许列表中删除该服务,没有指定区域时使用默认区域
–add-port=<PORT/PROTOCOL>[–zone=]允许到该端口的流量通过指定区域,没有指定区域时使用默认区域
–remove-port=<PORT/PROTOCOL>[–zone]从指定区域的允许列表中删除该端口,没有指定区域时使用默认区域

防火墙状态查询命令

[root@ns1 ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:firewalld(1)
[root@ns1 ~]# firewall-cmd --state
not running

重新加载 Firewalld的配置

  • firewall-cmd --reload
[root@ns1 ~]# firewall-cmd --reload
success
  • firewall-cmd --complete-reload

    状态信息将会丢失,多用于处理防火墙出现问题时

[root@ns1 ~]# firewall-cmd --complete-reload
success
  • systemctl restart firewalld
[root@ns1 ~]# systemctl restart firewalld

查询预定义信息

[root@ns1 ~]# firewall-cmd --get-zones        //查看预定义的区域
block dmz drop external home internal public trusted work
[root@ns1 ~]# firewall-cmd --get-services       //查看预定义的服务
RH-Satellite-6 amanda-client amanda-k5-client bacula bacula-client bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client dns docker-registry dropbox-lansync elasticsearch freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master high-availability http https imap imaps ipp ipp-client ipsec iscsi-target kadmin kerberos kibana klogin kpasswd kshell ldap ldaps libvirt libvirt-tls managesieve mdns mosh mountd ms-wbt mssql mysql nfs nfs3 nrpe ntp openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster quassel radius rpc-bind rsh rsyncd samba samba-client sane sip sips smtp smtp-submission smtps snmp snmptrap spideroak-lansync squid ssh synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client vdsm vnc-server wbem-https xmpp-bosh xmpp-client xmpp-local xmpp-server
[root@ns1 ~]# 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

firewalld 区域操作命令

  • 显示网络连接或接口的默认区域
[root@ns1 ~]# firewall-cmd --get-default-zone
public
  • 设置网络连接或接口的默认区域为internal
[root@ns1 ~]# firewall-cmd --set-default-zone=internal
success
  • 显示已激活的所有区域
[root@ns1 ~]# firewall-cmd --get-active-zones
internal
  interface:ens33
  • 显示ens33接口绑定的区域
[root@ns1 ~]# firewall-cmd --get-zone-of-interface=ens33
internal
  • 为ens33接口绑定work区域
[root@ns1 ~]# firewall-cmd --zone=work --add-interface=ens33
success
  • 为work区域更改绑定的网络接口ens33
[root@ns1 ~]# firewall-cmd --zone=work --change-interface=ens33
success
  • 为work区域删除绑定的网络接口ens33
[root@ns1 ~]# firewall-cmd --zone=work --remove-interface=ens33
success
  • 查询work区域中是否包含ens33
[root@ns1 ~]# firewall-cmd --zone=work --query-interface=ens33
no
  • 显示所有区域及其规则
[root@ns1 ~]# firewall-cmd --list-all-zones
  • 显示internal区域的所有规则
[root@ns1 ~]# firewall-cmd --zone=internal --list-all
  • 显示默认区域的所有规则
[root@ns1 ~]# firewall-cmd --list-all

小结:

选项说明
–zone= --add-interface=为指定接口绑定区域
–zone= --change-interface=为指定的区域更改绑定的网络接口
–zone= --remove-interface=为指定的区域删除绑定的网络接口
–query-interface=查询区域中是否包含某接口
[–zone=] --list-all显示所有指定区域的所有规则
–get-default-zone显示网络连接或接口的默认区域
–set-default-zone=设置网络连接或接口的默认区域
–get-active-zones显示已激活的所有区域
–get-zone-of-interface=显示指定接口绑定的区域
  • 显示 internal区域内允许访问的所有服务
[root@ns1 ~]# firewall-cmd --zone=internal --list-service
ssh mdns samba-client dhcpv6-client
  • 为 public区域设置允许访问SMTP服务
[root@ns1 ~]# firewall-cmd --zone=public --add-service=smtp
success
  • 删除 internal区域中的SSH服务
[root@ns1 ~]# firewall-cmd --zone=internal --remove-service=ssh
success
  • 查询 internal区域中是否启用了SSH服务
[root@ns1 ~]# firewall-cmd --zone=internal --query-service=ssh
no

小结:

选项说明
[–zone=] --list-service显示指定区域内允许访问的所有服务
[–zone=] --add-service=为指定区域设置允许访问的某些服务
[–zone=] --remove-service=删除指定区域以设置的允许访问的某项服务
[–zone=] --query-service=查询指定区域中是否启用了某项服务

firewalld端口操作命令

  • 显示 internal区域内允许访问的所有端口号
[root@ns1 ~]# firewall-cmd --zone=internal --list-ports
  • 启用 internal区域22端口的TCP协议组合
[root@ns1 ~]# firewall-cmd --zone=internal --add-port=22/tcp --timeout=5m
success
  • 禁用 internal区域22端口的TCP协议组合
[root@ns1 ~]# firewall-cmd --zone=internal --remove-port=22/tcp
success
  • 查询 internal区域中是否启用了22端口和TCP协议组合
[root@ns1 ~]# firewall-cmd --zone=internal --query-port=22/tcp
no

小结:

选项说明
[–zone=] --list-ports显示指定区域内允许访问的所有端口号
[–zone=] --add-port=[-]/ [–timeout=]启用区域端口和协议组合,可选配置超时时间
[–zone=] --remove-port=[-]/禁用区域端口和协议组合
[–zone=] --query-port=[-]/查询区域中是否启用了端口和协议组合

firewalld阻塞ICMP操作命令

  • 显示 work区域内阻塞的所有ICMP类型
[root@ns1 ~]# firewall-cmd --zone=work --list-icmp-blocks
  • 为 work区域设置阻塞 echo-reply类型的ICMP
[root@ns1 ~]# firewall-cmd --zone=work --add-icmp-block=echo-reply
success
  • 删除 work区域已阻塞的 echo-reply类型的ICMP
[root@ns1 ~]# firewall-cmd --zone=work --remove-icmp-block=echo-reply
success
  • 查询 work区域的 echo-request类型的ICMP是否阻塞
[root@ns1 ~]# firewall-cmd --zone=work --query-icmp-block=echo-request
no

小结:

选项说明
[–zone=] --list-icmp-blocks显示指定区域内阻塞的所有ICMP类型
[–zone=] --add-icmp-block=为指定区域设置阻塞的某项ICMP类型
[–zone=] --remove-icmp-block=删除指定区域已阻塞的某项ICMP类型
[–zone=] --query-icmp-block=查询指定区域的 ICMP阻塞功能

Firewalld 防火墙案例


### 实验:通过防火墙接口设置,来实现 ssh的访问控制
<1>在防火墙策略中去掉 ssh服务
```bash
[root@ns1 ~]# firewall-cmd --list-all        //显示所有指定区域的所有规则
public
  target: default
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: ssh dhcpv6-client
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
  
[root@ns1 ~]# firewall-cmd --permanent --remove-service=ssh
success
[root@ns1 ~]# firewall-cmd --reload       //不中断连接,重启防火墙
success
[root@ns1 ~]# firewall-cmd --list-all
public
  target: default
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: dhcpv6-client
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

连接失败

[root@ns2 ~]# ssh 192.168.160.7
ssh: connect to host 192.168.160.7 port 22: No route to host
[root@ns2 ~]# 

<2>添加防火墙策略

[root@ns1 ~]# firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -p tcp --dport 22 -s 192.168.160.5 -j ACCEPT                  //允许192.168.160.7 主机通过22端口(ssh默认端口)访问。
success
[root@ns1 ~]# firewall-cmd --list-all
public
  target: default
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: dhcpv6-client
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:

连接成功

[root@ns2 ~]# ssh 192.168.160.7
The authenticity of host '192.168.160.7 (192.168.160.7)' can't be established.
ECDSA key fingerprint is SHA256:f2HoWJm2jEjRBvDbJpQzKOuirt2QYkVIiQg9YO/GZtk.
ECDSA key fingerprint is MD5:aa:26:f1:79:40:2e:66:dd:3c:d1:34:f3:1c:43:44:2d.
Are you sure you want to continue connecting (yes/no)? y
Please type 'yes' or 'no': yes
Warning: Permanently added '192.168.160.7' (ECDSA) to the list of known hosts.

root@192.168.160.7's password: 
Last login: Fri Jul 10 22:04:20 2020 from 192.168.160.1
[root@ns1 ~]# 

案例二

需求描述
  • 禁止主机ping服务器
  • 只允许 192.168.8.130主机访问Apache服务
  • 只允许 192.168.8.150主机访问TCP/22端口
1.绑定区域
[root@ns1 ~]# firewall-cmd --get-active-zone           //默认下激活的区域
[root@ns1 ~]# firewall-cmd --permanent --zone=work --add-source=192.168.8.130
success                                //将来源地址192.168..8.130和work区域关联
[root@ns1 ~]# firewall-cmd --permanent --zone=internal --add-source=192.168.8.150
success                                //将来源地址192.168.8.150和internel区域关联
[root@ns1 ~]# firewall-cmd --reload     //重新加载
success
[root@ns1 ~]# firewall-cmd --get-active-zone
work
  sources: 192.168.8.130
internal
  sources: 192.168.8.150
配置服务
  • Work区域配置
[root@ns1 ~]# firewall-cmd --zone=work --list-services
ssh dhcpv6-client
[root@ns1 ~]# firewall-cmd --permanent --zone=work --remove-service=ssh
success
[root@ns1 ~]# firewall-cmd --permanent --zone=work --remove-service=dhcpv6-client
success
[root@ns1 ~]# firewall-cmd --permanent --zone=work --add-service=http
success
[root@ns1 ~]# firewall-cmd --permanent --zone=work --list-services
http
  • internal区域配置
[root@ns1 ~]# firewall-cmd --zone=internal --list-services
ssh mdns samba-client dhcpv6-client
[root@ns1 ~]# firewall-cmd --permanent --zone=internal --remove-service=ssh
success
[root@ns1 ~]# firewall-cmd --permanent --zone=internal --remove-service=dhcpv6-client
success
[root@ns1 ~]# firewall-cmd --permanent --zone=internal --remove-service=samba-client
success
[root@ns1 ~]# firewall-cmd --permanent --zone=internal --remove-service=mdns
success
[root@ns1 ~]# firewall-cmd --zone=internal --list-services
  • public区域配置
[root@ns1 ~]# firewall-cmd --permanent --zone=public --list-services
dhcpv6-client ssh
[root@ns1 ~]# firewall-cmd --permanent --zone=public --remove-service=dhcpv6-client
success
[root@ns1 ~]# firewall-cmd --permanent --zone=public --remove-service=ssh
success
[root@ns1 ~]# firewall-cmd --permanent --zone=public --list-services
  • 配置端口
[root@ns1 ~]# firewall-cmd --permanent --zone=internal --list-ports

[root@ns1 ~]# firewall-cmd  --permanent --zone=internal --add-port=22/tcp
success
[root@ns1 ~]# firewall-cmd --permanent --zone=internal --list-ports
22/tcp
  • 配置ICMP阻塞
[root@ns1 ~]# firewall-cmd --permanent --zone=public --list-icmp-blocks
[root@ns1 ~]# firewall-cmd --permanent --zone=public --add-icmp-block=echo-request
success
[root@ns1 ~]# firewall-cmd --permanent --zone=public --list-icmp-blocks
echo-request
[root@ns1 ~]# firewall-cmd --reload          //重新加载配置
success
  • 验证即可。

总结

  • firewalld 防火墙是一款功能强大的包过滤防火墙,可同时支持IPv4和IPv6地址。
  • firewalld 防火墙拥有 运行时(runtime)和永久(permanent)配置两种状态。拥有区域的概念,支持直接添加服务或者端口。
  • firewalld 防火墙既可以通过字符管理工具 firewall-cmd 管理,又可以通过图形管理工具 firewall-config 进行管理。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值