0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux下的防火墙功能常用知识点介绍

阿铭linux 来源:阿铭linux 作者:阿铭linux 2022-12-27 09:06 次阅读

Linux下的防火墙功能是非常丰富的,但阿铭在日常的运维工作中,使用它的情况并不多。所以阿铭打算把一些常用的知识点介绍给大家。

14.4.3firewalld

介绍完了netfilter,阿铭觉得也有必要再说一下firewalld,毕竟这个才是Rocky8上默认的防火墙。

在上一节中,阿铭把firewalld服务给禁掉了,而是打开了iptables服务,现在再反过来关闭iptables服务,打开firewalld服务。

操作如下所示:

# iptables –P INPUT ACCEPT 
# yum remove -y iptables
# systemctl enable firewalld
Created symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service → /usr/lib/systemd/system/firewalld.service.
Created symlink /etc/systemd/system/multi-user.target.wants/firewalld.service → /usr/lib/systemd/system/firewalld.service.
# systemctl start firewalld
首先将INPUT链的默认策略设置为ACCEPT,因为前面的实验中有将其设置为DROP。

在前面介绍的iptables相关的命令,其实也是可以继续使用的,只不过在Rocky8中不用那么操作,而是有firewalld自己的命令。

Firewalld有两个基础概念,分别是zone和service,每一个zone里面有不同的iptables规则,默认一共有9个zone,而默认的zone为public。

获取系统所有的zone,命令如下所示:
# firewall-cmd --get-zones
block dmz drop external home internal public trusted work

如下命令可以查看系统默认的zone:

# firewall-cmd --get-default-zone
public

下面阿铭简单介绍一下上面提到的9个zone。

drop(丢弃):任何接收的网络数据包都被丢弃,没有任何回复。仅能有发送出去的网络连接。

block(限制):任何接收的网络连接都被 IPv4 的icmp-host-prohibited信息和 IPv6 的icmp6-adm-prohibited信息所拒绝。

public(公共):在公共区域内使用,不能相信网络内的其他计算机不会对你的计算机造成危害,只能接收经过选取的连接。

external(外部):特别是为路由器启用了伪装功能的外部网。你不能信任来自网络的其他计算,不能相信它们不会对你的计算机造成危害,只能接收经过选择的连接。

dmz(非军事区):用于你的非军事区内的计算机,此区域内可公开访问,可以有限地进入你的内部网络,仅仅接收经过选择的连接。

work(工作):用于工作区。你可以基本相信网络内的其他计算机不会危害你的计算机。仅仅接收经过选择的连接。

home(家庭):用于家庭网络。你可以基本信任网络内的其他计算机不会危害你的计算机。仅仅接收经过选择的连接。

internal(内部):用于内部网络。你可以基本上信任网络内的其他计算机不会威胁你的计算机。仅仅接受经过选择的连接。

trusted(信任):可接受所有的网络连接。

对于以上9个zone简单了解即可,阿铭相信你在日常工作中使用它们的机会不会太多。下面介绍几个关于zone的命令:

# firewall-cmd --set-default-zone=work  #设定默认的zone为work
success
# firewall-cmd --get-zone-of-interface=ens33 #查看指定网卡所在的zone
Work
# firewall-cmd --zone=public --add-interface=lo #给指定网卡设置zone
success
# firewall-cmd --zone=dmz --change-interface=lo #针对网卡更改zone
success
# firewall-cmd --zone=dmz --remove-interface=lo  #针对网卡删除zone
Success
# firewall-cmd --get-active-zones  #查看系统所有网卡所在的zone
Work
interfaces: ens33

阿铭觉得firewalld工具的开发者可能是想简化用户的使用过程,所以提供了这9种zone,这9种zone中,总有一个是适合我们的使用场景的。

那到底zone是什么?每一种zone之间到底有什么区别呢?

下面阿铭再给大家介绍一个概念——service。其实,之所以有9种zone,是因为每一个zone里面都使用了不同的service,而service就是针对一个服务(端口)做的iptables规则。

# firewall-cmd --get-service  #列出当前系统所有的service
RH-Satellite-6 amanda-client amanda-k5-client amqp amqps apcupsd audit bacula bacula-client bb bgp bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc bittorrent-lsd ceph ceph-mon cfengine cockpit condor-collector ctdb dhcp dhcpv6 dhcpv6-client distcc dns dns-over-tls docker-registry docker-swarm dropbox-lansync elasticsearch etcd-client etcd-server finger freeipa-4 freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master git grafana gre high-availability http https imap imaps ipp ipp-client ipsec irc ircs iscsi-target isns jenkins kadmin kdeconnect kerberos kibana klogin kpasswd kprop kshell ldap ldaps libvirt libvirt-tls lightning-network llmnr managesieve matrix mdns memcache minidlna mongodb mosh mountd mqtt mqtt-tls ms-wbt mssql murmur mysql nfs nfs3 nmea-0183 nrpe ntp nut openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole plex pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy prometheus proxy-dhcp ptp pulseaudio puppetmaster quassel radius rdp redis redis-sentinel rpc-bind rsh rsyncd rtsp salt-master samba samba-client samba-dc sane sip sips slp smtp smtp-submission smtps snmp snmptrap spideroak-lansync spotify-sync squid ssdp ssh steam-streaming svdrp svn syncthing syncthing-gui synergy syslog syslog-tls telnet tentacle tftp tftp-client tile38 tinc tor-socks transmission-client upnp-client vdsm vnc-server wbem-http wbem-https wsman wsmans xdmcp xmpp-bosh xmpp-client xmpp-local xmpp-server zabbix-agent zabbix-server

这些service都是由一个个配置文件定义的,配置文件的模板在/usr/lib/firewalld/services/目录下,真正生效的配置在/etc/firewalld/services目录下面(默认为空):

# ls /usr/lib/firewalld/services/
amanda-client.xml dhcpv6-client.xml        git.xml                kpasswd.xml            murmur.xml                prometheus.xml      sip.xml                tentacle.xml
amanda-k5-client.xml dhcpv6.xml               grafana.xml            kprop.xml              mysql.xml                 proxy-dhcp.xml      slp.xml                tftp-client.xml
amqps.xml dhcp.xml                 gre.xml                kshell.xml             nfs3.xml                  ptp.xml             smtp-submission.xml    tftp.xml
amqp.xml distcc.xml               high-availability.xml  ldaps.xml              nfs.xml                   pulseaudio.xml      smtps.xml              tile38.xml
apcupsd.xml dns-over-tls.xml         https.xml              ldap.xml               nmea-0183.xml             puppetmaster.xml    smtp.xml               tinc.xml
audit.xml dns.xml                  http.xml               libvirt-tls.xml        nrpe.xml                  quassel.xml         snmptrap.xml           tor-socks.xml
bacula-client.xml docker-registry.xml      imaps.xml              libvirt.xml            ntp.xml                   radius.xml          snmp.xml               transmission-client.xml
bacula.xml docker-swarm.xml         imap.xml               lightning-network.xml  nut.xml                   rdp.xml             spideroak-lansync.xml  upnp-client.xml
bb.xml dropbox-lansync.xml      ipp-client.xml         llmnr.xml              openvpn.xml               redis-sentinel.xml  spotify-sync.xml       vdsm.xml
bgp.xml elasticsearch.xml        ipp.xml                managesieve.xml        ovirt-imageio.xml         redis.xml           squid.xml              vnc-server.xml
bitcoin-rpc.xml etcd-client.xml          ipsec.xml              matrix.xml             ovirt-storageconsole.xml  RH-Satellite-6.xml  ssdp.xml               wbem-https.xml
bitcoin-testnet-rpc.xml etcd-server.xml          ircs.xml               mdns.xml               ovirt-vmconsole.xml       rpc-bind.xml        ssh.xml                wbem-http.xml
bitcoin-testnet.xml finger.xml               irc.xml                memcache.xml           plex.xml                  rsh.xml             steam-streaming.xml    wsmans.xml
bitcoin.xml freeipa-4.xml            iscsi-target.xml       minidlna.xml           pmcd.xml                  rsyncd.xml          svdrp.xml              wsman.xml
bittorrent-lsd.xml freeipa-ldaps.xml        isns.xml               mongodb.xml            pmproxy.xml               rtsp.xml            svn.xml                xdmcp.xml
ceph-mon.xml freeipa-ldap.xml         jenkins.xml            mosh.xml               pmwebapis.xml             salt-master.xml     syncthing-gui.xml      xmpp-bosh.xml
ceph.xml freeipa-replication.xml  kadmin.xml             mountd.xml             pmwebapi.xml              samba-client.xml    syncthing.xml          xmpp-client.xml
cfengine.xml freeipa-trust.xml        kdeconnect.xml         mqtt-tls.xml           pop3s.xml                 samba-dc.xml        synergy.xml            xmpp-local.xml
cockpit.xml ftp.xml                  kerberos.xml           mqtt.xml               pop3.xml                  samba.xml           syslog-tls.xml         xmpp-server.xml
condor-collector.xml ganglia-client.xml       kibana.xml             mssql.xml              postgresql.xml            sane.xml            syslog.xml             zabbix-agent.xml
ctdb.xml ganglia-master.xml       klogin.xml             ms-wbt.xml             privoxy.xml               sips.xml            telnet.xml             zabbix-server.xml

阿铭刚刚说过,每个zone里面都有不同的service,那如何查看一个zone下面有哪些service呢?

# firewall-cmd --list-services  #查看当前zone下有哪些service
cockpit dhcpv6-client ssh
# firewall-cmd --zone=public --list-services  #查看指定zone下有哪些service

一个zone下面有某个service,意味着这个service是被信任的。

比如,当前zone下面有ssh,那么ssh服务(也就是22)端口是放行的。

我们可以给一个zone添加一个service,命令如下:

# firewall-cmd --zone=public --add-service=http // 把http增加到public zone下面
success
# firewall-cmd --zone=public --list-service
cockpit dhcpv6-client http ssh

对于每个zone来说,都有自己的配置文件,你可以查看目录/usr/lib/firewalld/zones/下面对应的文件,这些就是zone的配置文件:

# ls /usr/lib/firewalld/zones/
block.xml dmz.xml  drop.xml  external.xml  home.xml  internal.xml  public.xml  trusted.xml  work.xml

刚刚阿铭教给你一个命令,可在一个zone里面增加一个service,但这种方法仅仅在内存中生效,并没有修改配置文件,如果想修改配置文件,需要加一个选项:

# firewall-cmd --zone=public --add-service=http --permanent
success

一旦更改了某个zone的配置文件,则会在/etc/firewalld/zones/目录下面生成对应zone的配置文件(.xml后缀的文件),其实这个目录下面的配置文件才是真正的配置文件。

阿铭在上面介绍的目录,可以说是所有zone的模板配置文件。

下面阿铭举一个实际的例子,帮助你明白zone和service两个概念。

需求:假如服务器上配置了一个FTP服务,但端口并非默认的21,而是1121,并且需要在work zone下面放行FTP。

具体的做法如下:

#cp/usr/lib/firewalld/services/ftp.xml/etc/firewalld/services/ #这个和上面阿铭提到的情况一样,///usr/lib/firewalld/services/目录下面为所有service的模板配置文件
# vi /etc/firewalld/services/ftp.xml  #把里面的21改为1121
# cp /usr/lib/firewalld/zones/work.xml /etc/firewalld/zones/
# vi /etc/firewalld/zones/work.xml   #在里面增加一行FTP相关的配置,内容如下

WorkFor use in work areas. You mostly trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.
# firewall-cmd --reload   #重新加载

再来验证一下work zone里面的service是否有FTP:

# firewall-cmd --zone=work --list-services
cockpit dhcpv6-client ftp ssh

上面的方法还是有点罗嗦,有没有像上一小节中iptables命令那样简单的方式呢?当然有,下面阿铭再给大家找几个典型例子。

1)放行指定端口:

# firewall-cmd --set-default-zone=public  #将默认zone设置为public
# firewall-cmd --zone=public --add-port 1000/tcp --permanent   #如果不指定--zone默认就是public,增加tcp的1000端口,增加--permanent是为了让其永久生效,否则重启后就失效了
success
# firewall-cmd --reload   #使其规则生效
# firewall-cmd --list-all  #列出当前具体规则,可以看到刚刚增加的1000端口
public (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources: 
services: cockpit dhcpv6-client http ssh
ports: 1000/tcp
protocols: 
masquerade: no
forward-ports: 
source-ports: 
icmp-blocks: 
rich rules:

2)添加多个端口

# firewall-cmd --add-port 3000-3010/tcp --permanent    #3000-3010指定一个范围
success
# firewall-cmd --reload   
# firewall-cmd --list-all |grep ports   #用grep过滤只含有’ports’字符的行
ports: 1000/tcp 3000-3010/tcp
forward-ports: 
source-ports:
# firewall-cmd --add-port 80/tcp --add-port 8080/tcp  --permanent   #如果要增加多个port,那就要写多个--add-port
# firewall-cmd --reload

3)删除指定端口

# firewall-cmd --remove-port 8080/tcp --permanent
success
# firewall-cmd --reload
success
# firewall-cmd --list-all |grep ports
ports: 1000/tcp 3000-3010/tcp 80/tcp
forward-ports: 
source-ports:

4)针对某个ip开放指定端口

# firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.72.166" port protocol="tcp" port="6379" accept"
success
# firewall-cmd --reload
success
# firewall-cmd --list-all 
public (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources: 
services: cockpit dhcpv6-client http ssh
ports: 1000/tcp 3000-3010/tcp 80/tcp
protocols: 
masquerade: no
forward-ports: 
source-ports: 
icmp-blocks: 
rich rules: 
rule family="ipv4" source address="192.168.72.166" port port="6379" protocol="tcp" accept
# firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.0.0/24" accept" //放行指定网段
success
# firewall-cmd --reload
success
# firewall-cmd --list-all 
public (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources: 
services: cockpit dhcpv6-client http ssh
ports: 1000/tcp 3000-3010/tcp 80/tcp
protocols: 
masquerade: no
forward-ports: 
source-ports: 
icmp-blocks: 
rich rules: 
rule family="ipv4" source address="192.168.72.166" port port="6379" protocol="tcp" accept
rule family="ipv4" source address="192.168.0.0/24" accept

5)删除某条规则

# firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.0.0/24" accept"
success
# firewall-cmd --reload

关于firewalld,阿铭就介绍这些。这部分内容要是仔细研究还是蛮多的,但阿铭觉得毕竟在工作中使用得并不多,了解这些内容足够了。







审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    10998

    浏览量

    206799
  • Linux系统
    +关注

    关注

    4

    文章

    568

    浏览量

    26937
  • 防火墙
    +关注

    关注

    0

    文章

    406

    浏览量

    35424
  • 路由器
    +关注

    关注

    22

    文章

    3514

    浏览量

    111438
  • FTP
    FTP
    +关注

    关注

    0

    文章

    99

    浏览量

    40283

原文标题:Linux下防火墙-firewalld

文章出处:【微信号:aming_linux,微信公众号:阿铭linux】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Linux下的防火墙

    Linux下的防火墙功能是非常丰富的,但阿铭在日常的运维工作中,使用它的情况并不多。所以阿铭打算把一些常用知识点
    发表于 12-22 09:15 477次阅读

    Linux防火墙-firewalld

    Linux下的防火墙功能是非常丰富的,但阿铭在日常的运维工作中,使用它的情况并不多。所以阿铭打算把一些常用知识点
    发表于 12-27 09:04 310次阅读

    Linux内核防火墙netfilter的原理和应用

    Linux内核防火墙netfilter的原理和应用在分析ipchains缺陷的基础上,着重介绍Linux2.4版内核防火墙netfilte
    发表于 09-19 09:22

    发现 STM32 防火墙的安全配置

    、共享执行、设置,只能在防火墙打开时才能修改,因此在推荐配置,典型的调用门代码执行序列应如下:结论本文根据STM32参考手册, 提出了一个STM32防火墙的安全配置,可在实际STM32防火墙
    发表于 07-27 11:04

    Linux如何关闭防火墙

    1、查看防火墙规则vim /etc/sysconfig/iptables放开某个端口号不被防火墙拦截,适用于部署tomcat,nginx等之类的软件
    发表于 07-12 06:31

    Linux防火墙入门教程分享

    电脑上的防火墙很重要。如果你维护一台 Linux 服务器,那么知道怎么去管理你的防火墙同样重要,只要掌握了这些知识你才能保护你的服务器免于本地或远程非法流量的入侵。
    发表于 12-28 06:54

    基于Linux防火墙技术研究

    介绍防火墙的基本概念及其主要功能,分析了Linux 内核防火墙Netfilter 的架构、构建防火墙
    发表于 06-10 14:40 15次下载

    防火墙技术

    防火墙技术.ppt 防火墙及相关概念包过滤型防火墙代理服务型防火墙 防火墙的配置分布式防火墙
    发表于 06-16 23:41 0次下载

    Linux新型内核防火墙研究和应用

    Linux新型防火墙netfilter框架原理及工作机制基础上,研究了该防火墙的应用设计, 提出了用netfilter/iptables构建门户服务器防火墙的实现方法,实验测试证明,
    发表于 08-25 11:35 14次下载

    防火墙防火墙的渗透技术

    防火墙防火墙的渗透技术 传统的防火墙工作原理及优缺点: 1.(传统的)包过滤防火墙的工作原理   包过滤是在IP层实现的,因
    发表于 08-01 10:26 980次阅读

    究竟什么是防火墙

    究竟什么是防火墙?     Q:防火墙初级入门:究竟什么是防火墙?     A:防火墙定义
    发表于 02-24 11:51 739次阅读

    防火墙,防火墙的作用有哪些?

    防火墙,防火墙的作用有哪些? 防火墙技术简介 ——Internet的发展给政府结构、企事业单位带来了革命性的改
    发表于 04-03 16:17 8278次阅读

    SIP防火墙基础知识及穿越的汇总

    SIP防火墙穿越的汇总 术语和基础知识防火墙  一个防火墙限制私人内网和公众因特网之间的通讯,典型地防火墙就是丢弃
    发表于 09-10 12:41 1710次阅读

    LINUX防火墙(原书第3版)

    LINUX防火墙(原书第3版)教材免费下载。
    发表于 06-01 14:53 0次下载

    Juniper防火墙几种常用功能的配置

    这里讲述的Juniper防火墙的几种常用功能主要是指基于策略的NAT的实现,包括:MIP、VIP和DIP,这三种常用功能主要应用于防火墙所保护服务器提供对外服务。
    的头像 发表于 04-03 10:52 2101次阅读