如何在RHEL,CentOS和Fedora中配置FirewallD

Net-filter如我们所知,它是Linux中一个防火墙。Firewalld是一个以对网络区域支持管理防火墙的动态守护进程。在更早的版本RHEL以及CentOS 6中,我们已经使用iptables作为一个用户包过滤框架的守护程序。在RHEL/CentOS7/8, Fedora和OpenSUSE,iptables接口正在被firewalld替代。

推荐开始使用Firewalld替代iptables,由于iptables在未来可能不再继续。但iptables仍然被支持并且可以用yum命令安装它。我们不能在相同系统中安装Firewalld和ipables,这可能会导致冲突。

在iptables中,我们曾经配置为INPUT, OUTPUT和FORWARD CHAINS,但在Firewalld中,概念使用Zones。默认,在firewalld中有可用的不同区域,在本文中将讨论这些区域。

基本区域如public zone和private zone。要用这些区域使得事情顺利进行,我们需要用指定的区域支持添加接口并且接着我们可以添加服务到firewalld。

默认,有很多可用的服务,firewalld的最佳特性之一是,有预定义的服务与它一起出现,并且我们可以以这些服务作为一个示例来通过简单地复制它们来添加我们的服务。

Firewalld非常适合IPv4, IPv6和以太桥。我们在firewalld中有单独的运行时和永久配置。

我们从如何使用区域以及创建我们自己的服务和更多firewalld的使用开始。

我们的测试环境:

操作系统:Rocky Linux release 8.6 (Green Obsidian)
IP地址:192.168.50.180
主机名:main-machine
[blctrl@main-machine ~]$ hostnamectl
   Static hostname: main-machine
         Icon name: computer-desktop
           Chassis: desktop
        Machine ID: b1480b7ab5f943a4bd1542b88a7af8da
           Boot ID: bbe292e3e8e94ea792782909abe5bd6b
  Operating System: Rocky Linux 8.6 (Green Obsidian)
       CPE OS Name: cpe:/o:rocky:rocky:8:GA
            Kernel: Linux 4.18.0-372.9.1.el8.x86_64
      Architecture: x86-64
[blctrl@main-machine ~]$ ip addr show | grep inet
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
    inet 192.168.50.180/24 brd 192.168.50.255 scope global dynamic noprefixroute eno1
    inet6 fe80::1a60:24ff:fea6:ab08/64 scope link noprefixroute
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0

第一步:在基于RHEL 8的Linx系统中安装Firewalld

1) Firewalld软件包在RHEL/CentOS7/8,Fedora和Rocky Linux中默认被安装。如果没有,你使用以下dnf命令安装它。

[root@main-machine blctrl]# dnf install firewalld -y

2) 在firewalld软件包被安装后,该确认iptables服务是否正在运行,如果正在运行,你需要用以下命令停止并且屏蔽(不再使用)iptables服务。

[root@main-machine blctrl]# systemctl status iptables
[root@main-machine blctrl]# systemctl stop iptables
[root@main-machine blctrl]# systemctl mask iptables

第二步 讨论Firewalld组件

3) 在前往firewalld配置前,要讨论每个区域(zones)。默认,有一些可用区域。我们需要分配接口给区域。一个区域(zone)定义获取连接接口的受信任或拒绝级别的区域。一个区域可以包含服务和端口。

在这里将要描述在Firewalld中每个可用区域。

  • Drop Zone:如果我们使用这个丢弃区,丢弃任何进入的包。着与我们添加iptales -j drop相同。如果使用这种丢弃规则,表示没有响应,只有出去的网络连接将是可用的。
  • Block Zone:阻塞区将拒绝进入的网络连接,它用icmp-host-prohibited拒绝这些连接。将只允许在服务器内建立的连接。
  • Public Zone:接受选择的连接,我们能够在公共区中定义规则。这将在我们服务器中只允许特定端口打开,将丢弃其它连接。
  • External Zone:这个区域将用使能伪装作为路由选项,其它连接将被丢失并且不接受,仅允许指定的连接。
  • DMZ Zone:如果我们需要对公共允许访问一些服务,我们可以在DMZ区定义它。这也有仅接受选择的进入连接的特性。
  • Work Zone:在这个区,我们仅能定义内部网络,即是:允许私有网络流。
  • Home Zone:这个区域尤其用在家庭范围,我们可以使用这个区域作为每个区域来信任在网络上其它计算机不危害你的计算机。这也仅允许选择的进入连接。
  • Internal Zone:这个区域类似于带有选择允许连接的work zone。
  • Trusted Zone:如果我们设置信任区,接受所有网络流。

现在你更好理解了Zones,现在用以下命令找出可用区域,默认区域,以及列出所有区域。

列出Firewalld Zones

[root@main-machine blctrl]# firewall-cmd --get-zones
block dmz drop external home internal libvirt nm-shared public trusted work

列出Firewalld默认 Zone

[root@main-machine blctrl]# firewall-cmd --get-default-zone
public

列出所有Firewalld Zones

[root@main-machine blctrl]# firewall-cmd --list-all-zones
block
  target: %%REJECT%%
  icmp-block-inversion: no
  interfaces:
  sources:
  services:
  ports:
  protocols:
  forward: no
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

...

drop
  target: DROP
  icmp-block-inversion: no
  interfaces:
  sources:
  services:
  ports:
  protocols:
  forward: no
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
...
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eno1
  sources:
  services: cockpit dhcpv6-client http ssh
  ports:
  protocols:
  forward: no
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

trusted
  target: ACCEPT
  icmp-block-inversion: no
  interfaces:
  sources:
  services:
  ports:
  protocols:
  forward: no
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
...

注意:以上命令的输出超过了单独一页,由于它将列出每个区域,如block, dmz, drop, external, home, internal, public, trusted和work。如果这些区域有任何丰富规则,也将以那些各自区域信息列出启用的服务或端口。

第三步: 设置默认Firewalld Zone

4) 如果你想要设置默认区域为internal, external, drop, work或者任何其它区域,你可以使用以下命令设置这个默认区域。我们在这里使用"internal"作为默认区域。

[root@main-machine blctrl]# firewall-cmd --set-default-zone=internal
success

5) 在设置这个区域后,用以下命令验证默认区域。

[root@main-machine blctrl]# firewall-cmd --get-default-zone
internal

6) 我们的接口是eno1,如果我们需要检查接口绑定在哪个区域中,我们可以使用以下命令。

[root@main-machine blctrl]# firewall-cmd --get-zone-of-interface=eno1
internal

7)firewalld的另一个有趣特性是'icmptype'是firewalld支持的icmp类型之一。要获取支持的icmp的列表,我们可以使用以下命令。

[root@main-machine blctrl]# firewall-cmd --get-icmptypes
address-unreachable bad-header beyond-scope communication-prohibited destination-unreachable echo-reply echo-request failed-policy 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 reject-route 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中创建自己的服务

8) 服务是一组端口和选项的规则,它由Firewalld使用。当Firewalld服务启动并且运行时,将自动装载被启动的服务。

默认,很多服务是可用地,要获取所有可用服务列表,使用以下命令。

[root@main-machine blctrl]# firewall-cmd --get-services
RH-Satellite-6 RH-Satellite-6-capsule 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 collectd condor-collector ctdb dhcp dhcpv6 dhcpv6-client distcc dns dns-over-tls docker-registry docker-swarm dropbox-lansync elasticsearch etcd-client etcd-server finger foreman foreman-proxy freeipa-4 freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp galera 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 kube-apiserver ldap ldaps libvirt libvirt-tls lightning-network llmnr managesieve matrix mdns memcache minidlna mongodb mosh mountd mqtt mqtt-tls ms-wbt mssql murmur mysql nbd 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 rquotad 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

9) 要获取所有默认可用服务,进入到以下目录,在这里将得到服务列表。

[root@main-machine blctrl]# cd /usr/lib/firewalld/services/
[root@main-machine services]# ls
amanda-client.xml        dropbox-lansync.xml      isns.xml               mysql.xml                 redis.xml                   syncthing.xml
amanda-k5-client.xml     elasticsearch.xml        jenkins.xml            nbd.xml                   RH-Satellite-6-capsule.xml  synergy.xml
amqps.xml                etcd-client.xml          kadmin.xml             nfs3.xml                  RH-Satellite-6.xml          syslog-tls.xml
amqp.xml                 etcd-server.xml          kdeconnect.xml         nfs.xml                   rpc-bind.xml                syslog.xml
apcupsd.xml              finger.xml               kerberos.xml           nmea-0183.xml             rquotad.xml                 telnet.xml
audit.xml                foreman-proxy.xml        kibana.xml             nrpe.xml                  rsh.xml                     tentacle.xml
bacula-client.xml        foreman.xml              klogin.xml             ntp.xml                   rsyncd.xml                  tftp-client.xml
bacula.xml               freeipa-4.xml            kpasswd.xml            nut.xml                   rtsp.xml                    tftp.xml
bb.xml                   freeipa-ldaps.xml        kprop.xml              openvpn.xml               salt-master.xml             tile38.xml
bgp.xml                  freeipa-ldap.xml         kshell.xml             ovirt-imageio.xml         samba-client.xml            tinc.xml
bitcoin-rpc.xml          freeipa-replication.xml  kube-apiserver.xml     ovirt-storageconsole.xml  samba-dc.xml                tor-socks.xml
bitcoin-testnet-rpc.xml  freeipa-trust.xml        ldaps.xml              ovirt-vmconsole.xml       samba.xml                   transmission-client.xml
bitcoin-testnet.xml      ftp.xml                  ldap.xml               plex.xml                  sane.xml                    upnp-client.xml
bitcoin.xml              galera.xml               libvirt-tls.xml        pmcd.xml                  sips.xml                    vdsm.xml
bittorrent-lsd.xml       ganglia-client.xml       libvirt.xml            pmproxy.xml               sip.xml                     vnc-server.xml
ceph-mon.xml             ganglia-master.xml       lightning-network.xml  pmwebapis.xml             slp.xml                     wbem-https.xml
ceph.xml                 git.xml                  llmnr.xml              pmwebapi.xml              smtp-submission.xml         wbem-http.xml
cfengine.xml             grafana.xml              managesieve.xml        pop3s.xml                 smtps.xml                   wsmans.xml
cockpit.xml              gre.xml                  matrix.xml             pop3.xml                  smtp.xml                    wsman.xml
collectd.xml             high-availability.xml    mdns.xml               postgresql.xml            snmptrap.xml                xdmcp.xml
condor-collector.xml     https.xml                memcache.xml           privoxy.xml               snmp.xml                    xmpp-bosh.xml
ctdb.xml                 http.xml                 minidlna.xml           prometheus.xml            spideroak-lansync.xml       xmpp-client.xml
dhcpv6-client.xml        imaps.xml                mongodb.xml            proxy-dhcp.xml            spotify-sync.xml            xmpp-local.xml
dhcpv6.xml               imap.xml                 mosh.xml               ptp.xml                   squid.xml                   xmpp-server.xml
dhcp.xml                 ipp-client.xml           mountd.xml             pulseaudio.xml            ssdp.xml                    zabbix-agent.xml
distcc.xml               ipp.xml                  mqtt-tls.xml           puppetmaster.xml          ssh.xml                     zabbix-server.xml
dns-over-tls.xml         ipsec.xml                mqtt.xml               quassel.xml               steam-streaming.xml
dns.xml                  ircs.xml                 mssql.xml              radius.xml                svdrp.xml
docker-registry.xml      irc.xml                  ms-wbt.xml             rdp.xml                   svn.xml
docker-swarm.xml         iscsi-target.xml         murmur.xml             redis-sentinel.xml        syncthing-gui.xml
[root@main-machine services]# cat nfs.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>NFS4</short>
  <description>The NFS4 protocol is used to share files via TCP networking. You will need to have the NFS tools installed and properly configure your NFS server for this option to be useful.</description>
  <port protocol="tcp" port="2049"/>
</service>

10) 要创建你自己的服务,你需要在以下位置定义它。例如,我们在想要在这里为RTMP端口1935添加一个服务,首先复制这些服务中任何一个。

[root@main-machine services]# cd /etc/firewalld/services/
[root@main-machine services]# cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/rtmp.xml
[root@main-machine services]# ls
rtmp.xml

11) 接着打开和编辑这个文件,设置为RTMP需要的Heading, Description, Protocol和Port Number。

[root@main-machine services]# cat rtmp.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>rtmp</short>
  <description>To allow RTMP Streaming</description>
  <port protocol="tcp" port="1935"/>
</service>

12) 要使得这些更改有效,重启firewalld服务或者重载配置。

[root@main-machine services]# firewall-cmd --reload
success

13) 确认是否添加了这个服务,运行以下命令获取可用服务的列表。

第五步 分配服务到Firewalld区域

16) 在以上示例中,我们见到了如何通过rtmp服务创建我们自己的服务,我们在这里将看到如何添加rtmp服务到区域。

[root@main-machine services]# firewall-cmd --reload
success

17) 移除添加的区域,输入。

[root@main-machine services]# firewall-cmd --zone=internal --remove-service=rtmp
success

以上步骤仅是一个临时的。要使之永久化,我们需要用--permanent选项运行以下命令。

[root@main-machine blctrl]# firewall-cmd --add-service=rtmp --permanent
success
[root@main-machine blctrl]# firewall-cmd --reload
success

18) 为网络源地址范围定义规则并且打开任意端口。例如,如果你想要开放一个192.168.50.0/24的网络范围以及端口'1935',使用以下命令。

[root@main-machine blctrl]# firewall-cmd --permanent --add-source=192.168.50.0/24
success
[root@main-machine blctrl]# firewall-cmd --permanent --add-port=1935/tcp
success

在添加或移除任何服务或端口之后,确认重载防火墙服务。

[root@main-machine blctrl]# firewall-cmd --reload
success
[root@main-machine blctrl]# firewall-cmd --list-all
internal (active)
  target: default
  icmp-block-inversion: no
  interfaces: eno1
  sources: 192.168.50.0/24
  services: cockpit dhcpv6-client mdns rtmp samba-client ssh
  ports: 1935/tcp
  protocols:
  forward: no
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

第七步:为网络范围添加丰富规则

19) 如果想要允许诸如http, https, vnc-server等服务,你使用以下规则。首先,添加规则并且使之永久且重新装载这些规则,并且检查状态。

[root@main-machine blctrl]# firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.50.0/24" service name="http" accept'                    
success
[root@main-machine blctrl]# firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.50.0/24" service name="http" accept' --permanent
success

[root@main-machine blctrl]# firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.50.0/24" service name="https" accept'
success
[root@main-machine blctrl]# firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.50.0/24" service name="https" accept' --permanent
success

[root@main-machine blctrl]# firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.50.0/24" service name="vnc-server" accept'
success
[root@main-machine blctrl]# firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.50.0/24" service name="vnc-server" accept' --permanent
success

现在网络范围192.168.50.0/24可以使用来自服务器的以上服务。在每个规则中可以使用--permanent选项,但我们必须定义这个规则并且在我们使他永久之后用客户端检查。

20) 在定义以上规则后,不要忘记用以下列出重新装载防火墙规则并且这些规则:

[root@main-machine blctrl]# firewall-cmd --reload
success
[root@main-machine blctrl]# firewall-cmd --list-all
internal (active)
  target: default
  icmp-block-inversion: no
  interfaces: eno1
  sources: 192.168.50.0/24
  services: cockpit dhcpv6-client mdns rtmp samba-client ssh
  ports: 1935/tcp
  protocols:
  forward: no
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
        rule family="ipv4" source address="192.168.50.0/24" service name="http" accept
        rule family="ipv4" source address="192.168.50.0/24" service name="https" accept
        rule family="ipv4" source address="192.168.50.0/24" service name="vnc-server" accept
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值