X
X
X
X

Конфигурирайте защитната стена на CentOS 8 с firewall и firewall-cmd

Начална страницаСтатииЗащита / Кибер сигурност Конфигурирайте защитната стена на ...

Как да конфигурирате защитната стена на CentOS 8 с firewall и firewall-cmd

Защитната стена е един от най-основните начини за наблюдение и филтриране на входящия и изходящия трафик. Набор от входящи и изходящи правила, дефинирани в настройките на защитната стена, определят кой трафик да се разреши или блокира.

В CentOS и други дистрибуции на Linux, firewalld е софтуерът за управление на защитната стена по подразбиране. В следващия урок ще започнем с обсъждане на основните концепции за защитна стена и след това ще я използваме за конфигуриране на защитна стена на CentOS 8.

Съдържание

Запознайте се със
зоните на firewalld във firewalld Услугите на
Firewall-cmd
във firewalld
Време на изпълнение срещу постоянни настройки в firewalld

Конфигуриране на firewalld на CentOS 8
Предварителни условия
Инсталирайте и активирайте firewalld
Запознайте се със настройките по подразбиране Промяна на зоната
по подразбиране
Промяна на зоната за интерфейс
Промяна на целта на зона
Създаване на персонализирана зона
Прилагане на услуги към зона
Създаване на персонализирана услуга
Отворете IP адреси и портове
Запазване на конфигурации по време на изпълнение за постоянно

Запознайте се с firewalld

Преди да започнем да си играем с firewalld, нека първо го опознаем по-добре.

Зони в защитната стена

Firewalld има набор от предварително дефинирани правила, известни като зони , които ви помагат да определите нивото на доверие, което имате в конкретна мрежа. Свързването на мрежов интерфейс със зона определя естеството на разрешеното поведение. За да разберем това малко по-добре, нека разгледаме няколко зони на защитна стена по подразбиране:

  • Доверен : Най-високо ниво на доверие. Разрешете входящия и изходящия трафик към всички машини в тази мрежа.
  • Начало : За домашни мрежи. Доверете се на всички други машини в мрежата. Разрешете само няколко входящи връзки.
  • Работа : За работна среда. Доверете се на всички машини и разрешавайте само одобрени входящи връзки.
  • Външен : Конфигурира се при използване на защитна стена като шлюз. Маскирането на NAT се използва, за да се гарантира, че топологията на вътрешната мрежа е скрита, но сървърите все още са достъпни.
  • Public : Не се доверявайте на никого по подразбиране. Разрешете шепа входящи връзки според нуждите.
  • Падение : Най-ниско ниво на доверие. Пуснете всеки входящ пакет, без да отговаряте. Разрешете само изходящ трафик.

Защитна стена-cmd

Firewall-cmd е помощната програма от командния ред за демона на firewalld. Използва се за дефиниране или промяна на конфигурациите на защитната стена.

Услуги в firewalld

Услугите са набор от съществуващи правила, които могат да се прилагат в рамките на зона. Те са чудесен начин за прилагане на различни правила наведнъж. Ще ги разгледаме по-подробно в следващите раздели.

Време на изпълнение срещу постоянни настройки в firewalld

Firewalld ви позволява да дефинирате два вида настройки: време на изпълнение и постоянни. Времето за изпълнение е текущо работещата конфигурация, която се връща към постоянната конфигурация, зададена при рестартиране.

По подразбиране, когато използвате firewall-cmd за конфигуриране на вашата защитна стена, промените се правят в конфигурационния комплект по време на изпълнение. За да направите промените постоянни, можете да добавите --permanentопцията към командата.

Конфигурирайте firewalld на CentOS 8

Сега, след като донякъде сме запознати с firewalld, нека започнем да го конфигурираме на машина с CentOS 8.

Предпоставки

  • CentOS 8 сървър .
  • Потребител с sudoпривилегии.

Инсталирайте и активирайте защитна стена

Firewalld е предварително инсталиран в повечето дистрибуции на Linux, включително CentOS 8. За да потвърдите, изпълнете:

sudo yum списък инсталиран | grep firewalld

Ако firewalld е инсталиран на вашата машина, трябва да получите някакъв изход като по-долу.

If firewalld is installed on your machine, you should get some output like below.

 firewalld.noarch                     0.8.0-4.el8                           @anaconda
 firewalld-filesystem.noarch          0.8.0-4.el8                           @anaconda

Ако не получите нищо, изпълнете следната команда, за да инсталирате firewalld:

sudo yum install firewalld

Следващата стъпка е да активирате firewalld и да го накарате да стартира при стартиране. За да направите това, стартирайте:

sudo systemctl enable firewalld

Накрая рестартирайте вашата машина:

reboot
 
След като вашият сървър се рестартира, използвайте следната команда, за да проверите дали firewalld наистина работи:
sudo firewall-cmd –state

Трябва да видите изхода на сървъра running.

Запознайте се с настройките по подразбиране

Сега нека се опитаме да проучим текущите активни конфигурации на защитната стена.

За да видите зоната по подразбиране:

sudo firewall-cmd --get-default-zone

Трябва да видите, че publicе настроено.

За да видите активните зони:

sudo firewall-cmd --get-active-zones

Тъй като все още не сме задали друга зона, това също трябва да ни даде public.

Output
public
   interfaces: ens3

Можем също да видим, че единственият ни мрежов интерфейс на сървъра ens3в момента се управлява в публичната зона.

За да видите всички правила, приложими към пубисната зона, стартирайте:

 

sudo firewall-cmd --list-all
Output
public (active)                                                                                                                      
 target: default                                                                                                         
 icmp-block-inversion: no                                                                                                
 interfaces: ens3                                                                                                        
 sources:                                                                                                                
 services: cockpit dhcpv6-client ssh                                                                   
 ports:                                                                                                                  
 protocols:                                                                                                              
 masquerade: no                                                                                                          
 forward-ports:                                                                                                          
 source-ports:                                                                                                           
 icmp-blocks:                                                                                                            
 rich rules:                                                                                                                                                                                                                                     

Можем да видим, наред с други неща, че правилата позволяват директен SSH в машината чрез интерфейса ens3 .

За да видите другите налични зони, стартирайте:

sudo firewall-cmd --get-zones
block dmz drop external home internal public trusted work

Можете също да видите правилата по подразбиране за всяка зона. Например, за да видите всички правила за зоната home :

sudo firewall-cmd --zone=home --list-all
Output
home
target: default                                                                                                         
 icmp-block-inversion: no                                                                                                
 interfaces:                                                                                                        
 sources:                                                                                                                
 services: cockpit dhcpv6-client mdns samba-client ssh                                                                   
 ports:                                                                                                                  
 protocols:                                                                                                              
 masquerade: no                                                                                                          
 forward-ports:                                                                                                          
 source-ports:                                                                                                           
 icmp-blocks:                                                                                                            
 rich rules:         

Променете зоната по подразбиране

Зоната по подразбиране се прилага за всичко, което не е изрично присвоено на нито една зона. Например, ако има източник, мрежов интерфейс или връзка, която не може да бъде свързана с нито една конфигурирана зона, firewalld ще използва правилата за зоната по подразбиране за това.

За да промените зоната по подразбиране:

 

sudo firewall-cmd --set-default-zone=home
Output
success

проверете:

sudo firewall-cmd --get-default-zone
Output
home

Променете зоната за интерфейс

За да промените зоната за интерфейс:

sudo firewall-cmd --zone=internal --change-interface=ens3

Горната команда ще активира зоната internalза интерфейса ens3.

Output
success

Променете целта на зона

Целта на зоната дефинира нейното поведение по подразбиране, когато работи с входящ трафик, който не може да бъде категоризиран, съгласно което и да е определено правило. Целта може да бъде DROP, ACCEPT, REJECT или по подразбиране.

За да промените целта на зона, можете да използвате следната команда:

sudo firewall-cmd --zone=вътрешен --set-target=DROP

Това ще настрои целта за вътрешната зона на DROP.

Създайте персонализирана зона

Firewalld също ви дава гъвкавостта да дефинирате своя собствена зона. Това е много удобно при дефиниране на специфични за приложението правила.

За да създадете нова зона с име redis :

sudo firewall-cmd --new-zone=redis --permanent

Ще отворим и TCP порт и ще разрешим достъп само от един IP източник. И двете правила ще станат постоянни.

sudo firewall-cmd --zone=redis --add-port=10003/tcp --permanent
sudo firewall-cmd --zone=redis --add-source=192.168.123.1/32 --permanent

Накрая рестартирайте демона на firewalld, за да приложите промените:

sudo firewall-cmd reload
Output for all 4 above commands
success

Прилагане на услуги към зона

Услугите ни позволяват да прилагаме набор от правила в рамките на зона. Точно като зоните, има някои услуги по подразбиране, които можете да използвате. За да ги видите всички:

sudo firewall-cmd --get-services
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 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 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


За да видите повече информация за услугите, можете да прочетете съответните xml конфигурационни файлове, налични в /usr/lib/firewalld/servicesдиректорията, като използвате lessи добавите директория с име на файл (изброени по-долу)

less /usr/lib/firewalld/services/filename.xml

Примерна команда

sudo less /usr/lib/firewalld/services/grafana.xml

За да видите пълния списък с файлове по-долу, стартирайте

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

За да добавите услуга към зона, използвайте:

sudo firewall-cmd --zone=internal --add-service=http
Output
success

Горната команда ще позволи http трафик на всички интерфейси в internalзоната.

По същия начин, ако планирате да използвате вашия сървър като DNS, можете да добавите услугата DNS:

sudo firewall-cmd --zone=internal --add-service=dns
Output
success

Създайте персонализирана услуга

Точно както можете да създадете персонализирана зона, можете също да създадете персонализирана услуга. Ето стъпките:

  1. Създайте нов XML файл в /usr/lib/firewalld/servicesдиректорията.
    sudo touch /usr/lib/firewalld/services/new-service.xml
  2. Въведете съответните подробности в XML файла и запазете.
  3. Презаредете демона на firewalld, така че да забележи новосъздадената услуга.sudo firewall-cmd reload

Вече трябва да можете да приложите новата услуга, както всяка друга.

Отворете IP адреси и портове

За да активирате целия входящ трафик от IP адрес или диапазон, в рамките на зона, без да се налага да създавате нова услуга:

sudo firewall-cmd --zone=internal --add-source=192.168.123.1 --permanent

За да премахнете IP адреса, просто го заменете --add-sourceс --remove-source.

sudo firewall-cmd --zone=internal --remove-source=192.168.123.1 --permanent

По същия начин, ако искате да разрешите целия входящ трафик на конкретен порт:

sudo firewall-cmd --zone=internal --add-port=8081/tcp --permanent

и да премахнете порта:

sudo firewall-cmd --zone=internal --remove-port=8081/tcp --permanent
Output
success

Запазете за постоянно конфигурации по време на изпълнение

Ако по всяко време искате да запазите настройките си по време на изпълнение, преди рестартирането да ги измие, можете да използвате следната команда:

sudo firewall-cmd --runtime-to-permanent
Output 
success

Top