Kā instalēt, konfigurēt un izmantot ugunsmūri CentOS un Ubuntu


Firewalld (ugunsmūra dēmons) ir alternatīva pakalpojumam iptables, lai dinamiski pārvaldītu sistēmas ugunsmūri, atbalstot tīkla (vai ugunsmūra) zonas, un nodrošina D-Bus saskarni konfigurāciju pārvaldībai. To ir viegli lietot un konfigurēt, un tagad tas ir noklusējuma ugunsmūra pārvaldības rīks RHEL/CentOS, Fedora un vairākos citos Linux izplatījumos.

Šajā rakstā mēs apspriedīsim, kā konfigurēt sistēmas ugunsmūri ar firewalld un ieviest pakešu filtrēšanu CentOS/RHEL 7 un Ubuntu.

Pamati par ugunsmūri

Firewalld sastāv no trim slāņiem, kas ir:

  • pamatslānis: atbildīgs par konfigurācijas un aizmugurējo daļu apstrādi (uzskaitīts zemāk).
  • D-Bus saskarne: galvenais veids, kā mainīt un izveidot ugunsmūra konfigurāciju.
  • aizmugures: mijiedarbībai ar netfilter (vietējā kodola modulis, ko izmanto ugunsmūri). Tie ietver iptables, ip6tables, ebtables, ipset, nft, linnftables; tīkla pārvaldnieks; un moduļiem.

Tas pārvalda ugunsmūra noteikumus, ieviešot tīkla/ugunsmūra zonas, kas nosaka tīkla savienojumu vai saskarņu uzticamības līmeni. Citas atbalstītās ugunsmūra funkcijas ietver pakalpojumus, tiešo konfigurāciju (ko izmanto, lai tieši nodotu neapstrādātu iptables sintaksi), IPSets, kā arī ICMP tipus.

Ugunsmūris atbalsta divu veidu konfigurācijas vides:

  • izpildlaika konfigurācija, kas darbojas tikai līdz brīdim, kad mašīna ir restartēta vai restartēts ugunsmūra pakalpojums.
  • pastāvīga konfigurācija, kas tiek saglabāta un darbojas pastāvīgi.

Ugunsmūra cmd komandrindas rīks tiek izmantots, lai pārvaldītu izpildlaiku un pastāvīgu konfigurāciju. Varat arī izmantot ugunsmūra konfigurēšanas grafiskā lietotāja saskarnes (GUI) konfigurācijas rīku, lai mijiedarbotos ar dēmonu.

Turklāt firewalld piedāvā labi definētu saskarni citiem vietējiem pakalpojumiem vai lietojumprogrammām, lai tieši pieprasītu izmaiņas ugunsmūra noteikumos, ja tie darbojas ar root tiesībām.

Firewalld globālais konfigurācijas fails atrodas /etc/firewalld/firewalld.conf, un ugunsmūra funkcijas ir konfigurētas XML formātā.

Izpratne par svarīgām ugunsmūra funkcijām

Firmardd galvenā iezīme ir tīkla/ugunsmūra zonas. Katra cita funkcija ir ierobežota ar zonu. Ugunsmūra zona apraksta savienojuma, saskarnes vai avota adreses saistīšanas uzticamības līmeni.

Noklusējuma konfigurācijā ir vairākas iepriekš definētas zonas, kas sakārtotas atbilstoši zonu noklusējuma uzticamības līmenim no neuzticamām līdz uzticamām: nomest, bloķēt, publisku, ārēju, DMZ, darbu, māju, iekšēju un uzticamu. Tie ir definēti failos, kas saglabāti direktorijā/usr/lib/firewalld/zone.

Varat konfigurēt vai pievienot pielāgotās zonas, izmantojot CLI klientu, vai vienkārši izveidot vai nokopēt zonas failu mapē/etc/firewalld/zonas no esošajiem failiem un rediģēt to.

Vēl viena svarīga koncepcija zem ugunsmūra ir pakalpojumi. Pakalpojums tiek definēts, izmantojot porti un protokolus; šīs definīcijas apzīmē noteiktu tīkla pakalpojumu, piemēram, tīmekļa serveri vai attālās piekļuves pakalpojumu. Pakalpojumi ir definēti failos, kas saglabāti direktorijā/usr/lib/firewalld/services/vai/etc/firewalld/services /.

Ja zināt pamata iptables/ip6tables/ebtables jēdzienus, varat arī izmantot tiešo saskarni (vai konfigurāciju), lai iegūtu tiešu piekļuvi ugunsmūrim. Bet tiem, kam nav zināšanu par iptables, varat izmantot bagātīgo valodu, lai izveidotu sarežģītākus ugunsmūra noteikumus IPv4 un IPv6.

Kā instalēt Firewalld pakotni Linux

CentOS 7 ugunsmūra pakotne ir iepriekš instalēta, un to var pārbaudīt, izmantojot šādu komandu.

$ rpm -qa firewalld

Operētājsistēmās Ubuntu 16.04 un 18.04 to var instalēt, izmantojot noklusējuma pakotņu pārvaldnieku, kā parādīts.

$ sudo apt install firewalld

Kā pārvaldīt ugunsmūri pakalpojumā Linux

Firewalld ir parasts systemd pakalpojums, kuru var pārvaldīt, izmantojot komandu systemctl.

 
$ sudo systemctl start firewalld	#start the service for the mean time
$ sudo systemctl enable firewalld	#enable the service to auto-start at boot time
$ sudo systemctl status firewalld	#view service status

Pēc ugunsmūra pakalpojuma palaišanas varat arī pārbaudīt, vai dēmons darbojas, vai nē, izmantojot ugunsmūra cmd rīku (ja tā nav aktīva, šī komanda izdos “nedarbojas”).

$ sudo firewall-cmd --state

Ja nejauši saglabājat izmaiņas, varat to atkārtoti ielādēt. Tas atkārtoti ielādēs ugunsmūra kārtulas un saglabās informāciju par stāvokli. Pašreizējā pastāvīgā konfigurācija kļūs par jaunu izpildlaika konfigurāciju.

$ sudo firewall-cmd --reload

Kā strādāt ar ugunsmūra zonām

Lai iegūtu visu pieejamo ugunsmūra zonu un pakalpojumu sarakstu, palaidiet šīs komandas.

$ sudo firewall-cmd --get-zones
$ sudo firewall-cmd --get-services

Noklusējuma zona ir zona, kas tiek izmantota katrai ugunsmūra funkcijai, kas nav skaidri saistīta ar citu zonu. Palaižot, tīkla savienojumiem un saskarnēm ir iestatīta noklusējuma zona.

$ sudo firewall-cmd --get-default-zone

Lai iestatītu noklusējuma zonu, piemēram, ārējai, izmantojiet šo komandu. Ņemiet vērā, ka, pievienojot opciju --permanent , konfigurācija tiek iestatīta neatgriezeniski (vai tiek iespējota informācijas meklēšana no pastāvīgās konfigurācijas vides).

$ sudo firewall-cmd --set-default-zone=external
OR
$ sudo firewall-cmd --set-default-zone=external --permanent
$ sudo firewall-cmd --reload 

Pēc tam apskatīsim, kā zonai pievienot saskarni. Šis piemērs parāda, kā bezvadu tīkla adapteri (wlp1s0) pievienot mājas zonai, kas tiek izmantota mājas zonās.

$ sudo firewall-cmd --zone=home --add-interface=wlp1s0

Saskarni var pievienot tikai vienai zonai. Lai to pārvietotu uz citu zonu, izmantojiet slēdzi - change-interface , kā parādīts, vai noņemiet to no iepriekšējās zonas, izmantojot –remove-interface slēdzi, pēc tam pievienojiet to jaunajai zonai.

Pieņemot, ka vēlaties izveidot savienojumu ar publisku WI-FI tīklu, bezvadu interfeiss jāpārvieto atpakaļ uz publisko zonu šādi:

$ sudo firewall-cmd --zone=public --add-interface=wlp1s0
$ sudo firewall-cmd --zone=public --change-interface=wlp1s0

Vienlaicīgi varat izmantot daudzas zonas. Lai iegūtu visu aktīvo zonu sarakstu ar iespējotām funkcijām, piemēram, saskarnēm, pakalpojumiem, portiem, protokoliem, palaidiet:

$ sudo firewall-cmd --get-active-zones

Attiecībā uz iepriekšējo punktu: ja vēlaties atrast vairāk informācijas par konkrētu zonu, t.i., visu tajā pievienoto vai iespējoto, izmantojiet kādu no šīm komandām:

$ sudo firewall-cmd --zone=home --list-all
OR
$ sudo firewall-cmd --info-zone public

Vēl viena noderīga opcija ir --get-target , kas parāda pastāvīgās zonas mērķi. Mērķis ir viens no šiem: noklusējums, ACCEPT, DROP, REJECT. Varat pārbaudīt dažādu zonu mērķi:

$ sudo firewall-cmd --permanent --zone=public --get-target  
$ sudo firewall-cmd --permanent --zone=block --get-target  
$ sudo firewall-cmd --permanent --zone=dmz --get-target  
$ sudo firewall-cmd --permanent --zone=external --get-target
$ sudo firewall-cmd --permanent --zone=drop --get-target

Kā atvērt un bloķēt ostas

Lai ugunsmūrī atvērtu portu (vai porta/protokola kombināciju), vienkārši pievienojiet to zonā ar opciju --add-port . Ja skaidri nenorādīsit zonu, tā tiks iespējota noklusējuma zonā.

Šajā piemērā parādīts, kā pievienot 80. un 443. portu, lai atļautu piesaistītu tīmekļa trafiku, izmantojot attiecīgi HTTP un HTTPS protokolus:

$ sudo firewall-cmd --zone=public --permanent --add-port=80/tcp --add-port=443/tcp

Pēc tam atkārtoti ielādējiet ugunsmūri un vēlreiz pārbaudiet iespējotās funkcijas publiskajā zonā, jums vajadzētu redzēt tikko pievienotās ostas.

$ sudo firewall-cmd --reload
$ sudo firewall-cmd --info-zone public

Ugunsmūra porta bloķēšana vai aizvēršana ir vienlīdz vienkārša, vienkārši noņemiet to no zonas, izmantojot opciju --remove-port . Piemēram, slēgt 80. un 443. ostu publiskajā zonā.

$ sudo firewall-cmd --zone=public --permanent --remove-port=80/tcp --remove-port=443/tcp

Tā vietā, lai izmantotu portu vai porta/protokola kombināciju, varat izmantot servisa nosaukumu, kuram piešķirts ports, kā paskaidrots nākamajā sadaļā.

Kā atvērt un bloķēt pakalpojumus

Lai atvērtu pakalpojumu ugunsmūrī, iespējojiet to, izmantojot opciju --add-service . Ja zona tiek izlaista, tiks izmantota noklusējuma zona.

Šī komanda neatgriezeniski iespējos http pakalpojumu publiskajā zonā.

$ sudo firewall-cmd --zone=public --permanent --add-service=http 
$ sudo firewall-cmd --reload 

Opciju --remove-service var izmantot, lai atspējotu pakalpojumu.

$ sudo firewall-cmd --zone=public --permanent --remove-service=http 
$ sudo firewall-cmd --reload 

Kā iespējot un atspējot IP maskēšanu, izmantojot

IP maskēšana (pazīstama arī kā IPMASQ vai MASQ) ir NAT (tīkla adrešu tulkošanas) mehānisms Linux tīklā, kas ļauj jūsu saimniekiem tīklā ar privātām IP adresēm sazināties ar internetu, izmantojot jūsu Linux servera (IPMASQ vārtejas) piešķirto publisko IP adrese.

Tā ir kartēšana viens pret daudziem. Datplūsma no jūsu neredzamajiem saimniekiem parādīsies citiem datoriem internetā tā, it kā tā nāktu no jūsu Linux servera.

Jūs varat iespējot IP maskēšanu vēlamajā zonā, piemēram, publiskajā zonā. Bet pirms tā izdarīšanas vispirms pārbaudiet, vai maskēšanās ir aktīva vai nē (“nē” nozīmē tās invalīdu un “jā” nozīmē pretējo).

$ sudo firewall-cmd --zone=public --query-masquerade
$ sudo firewall-cmd --zone=public --add-masquerade

Tipisks maskēšanās gadījums ir ostas pārsūtīšana. Pieņemot, ka vēlaties SSH no attālās mašīnas uz resursdatoru iekšējā tīklā, izmantojot IP 10.20.1.3, kurā sshd dēmons klausās 5000 portā.

Visus savienojumus ar Linux porta 22. portu varat pārsūtīt uz mērķa resursdatora paredzēto portu, izsniedzot:

$ sudo firewall-cmd --zone=public --add-forward-port=port=22=proto=tcp:toport=5000:toaddr=10.20.1.3

Lai atspējotu maskēšanu zonā, izmantojiet slēdzi --remove-maskēties .

$ sudo firewall-cmd --zone=public --remove-masquerade

Kā iespējot un atspējot IMCP ziņojumu

ICMP (Internet Control Message Protocol) ziņojumi ir vai nu informācijas pieprasījumi, vai atbildes uz informācijas pieprasījumiem, vai arī kļūdu apstākļos.

Jūs varat iespējot vai atspējot ICMP ziņojumus ugunsmūrī, bet pirms tam vispirms uzskaitiet visus atbalstītos icmp veidus.

$ sudo firewall-cmd --get-icmptypes

Lai pievienotu vai noņemtu vajadzīgo bloķēšanas veidu.

$ sudo firewall-cmd --zone=home --add-icmp-block=echo-reply
OR
$ sudo firewall-cmd --zone=home --remove-icmp-block=echo-reply

Visus zonā pievienotos icmp veidus varat apskatīt, izmantojot slēdzi --list-icmp-blocks .

$ sudo firewall-cmd --zone=home --list-icmp-blocks

Kā izmantot tiešo saskarni, lai nodotu neapstrādātas iptables komandas

Ugunsmūris-cmd nodrošina arī tiešas opcijas ( --direct ), lai iegūtu tiešāku piekļuvi ugunsmūrim. Tas ir noderīgi tiem, kam ir pamatzināšanas par iptables.

Svarīgi! Tiešās opcijas izmantojiet tikai kā pēdējo iespēju, ja iepriekš aprakstītās parastās ugunsmūra cmd opcijas nav iespējams izmantot.

Šeit ir piemērs tam, kā nodot neapstrādātu iptables kārtulu, izmantojot slēdzi --add-rules . Varat viegli noņemt šīs kārtulas, aizstājot --add-rule ar --remove-rule :

$ sudo firewall-cmd --direct --add-rule ipv4 filter IN_public_allow 0 -m tcp -p tcp --dport 80 -j ACCEPT

Lai iegūtu papildinformāciju par iptables, skatiet šo rokasgrāmatu: Kā iestatīt Iptables ugunsmūri, lai iespējotu attālo piekļuvi pakalpojumiem Linux.

Ja jums nav pazīstama iptables sintakse, varat izvēlēties ugunsmūra “bagātīgo valodu”, lai sarežģītākus ugunsmūra noteikumus izveidotu viegli saprotamā veidā, kā paskaidrots tālāk.

Kā lietot bagātīgu valodu ugunsmūrī

Bagātinātā valoda (pazīstama arī kā bagātinātās kārtulas) tiek izmantota, lai pievienotu sarežģītākas ugunsmūra kārtulas IPv4 un IPv6, nezinot iptables sintaksi.

Tas paplašina mūsu aptvertās zonas funkcijas (serviss, osta, icmp-bloks, maskarāde un portu uz priekšu). Tas atbalsta avota un mērķa adreses, reģistrēšanu, darbības un ierobežojumus žurnāliem un darbībām.

--add-rich-rule tiek izmantots bagātinātu kārtulu pievienošanai. Šis piemērs parāda, kā atļaut jaunus IPv4 un IPv6 savienojumus pakalpojumam http un reģistrēt 1 minūtē, izmantojot auditu:

$ sudo firewall-cmd --add-rich-rule='rule service name="http" audit limit value="1/m" accept'

Lai noņemtu pievienoto kārtulu, aizstājiet opciju --add-rich-rule ar --remove-rich-rule .

$ sudo firewall-cmd --remove-rich-rule='rule service name="http" audit limit value="1/m" accept'

Šī funkcija ļauj arī bloķēt vai atļaut trafiku no konkrētas IP adreses. Šis piemērs parāda, kā noraidīt savienojumus no IP 10.20.1.20.

$ sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.0.254" reject'

Kā iespējot un atspējot panikas režīmu

Panikas režīms ir īpašs režīms zem ugunsmūra, kurā tiek nomestas visas iesūtītās un nesaistītās paketes, un aktīvie savienojumi beigsies, kad tie būs aktivizēti.
Šo režīmu varat iespējot ārkārtas situācijās, kad rodas draudi jūsu tīkla videi.

Lai vaicātu panikas režīmā, izmantojiet opciju --query-panic .

$ sudo firewall-cmd --query-panic

Lai iespējotu panikas režīmu, izmantojiet opciju --panic-on . Varat pārbaudīt, vai tas darbojas, izmantojot ping komandu, kā parādīts. Tā kā pakete ir nomesta, vārdu www.google.com nevar novērst, tāpēc tiek parādīta kļūda.

$ sudo firewall-cmd --panic-on
$ ping -c 2 www.google.com

Lai atspējotu panikas režīmu, izmantojiet opciju --panic-off .

$ sudo firewall-cmd --panic-off

Kā bloķēt ugunsmūri

Atcerieties, ka zem pamata par firewalld mēs minējām, ka vietējās lietojumprogrammas vai pakalpojumi var mainīt ugunsmūra konfigurāciju, ja tie darbojas ar root tiesībām. Varat kontrolēt, kuras lietojumprogrammas var pieprasīt ugunsmūra izmaiņas, pēc tam norādot bloķēšanas baltajā sarakstā.

Šī funkcija pēc noklusējuma ir izslēgta. To var iespējot vai atspējot, izmantojot uztvērēju slēdzi - lockdown-on vai - lockdown .

$ sudo firewall-cmd --lockdown-on
OR
$ sudo firewall-cmd --lockdown-off

Ņemiet vērā, ka ieteicams šo funkciju iespējot vai atspējot, rediģējot galveno konfigurācijas failu, jo, iespējojot bloķēšanu, ugunsmūris-cmd, iespējams, nepastāv bloķēšanas baltajā sarakstā.

$ sudo vim /etc/firewalld/firewalld.conf

Atrodiet parametru Lockdown un mainiet tā vērtību no no (nozīmē izslēgts) uz yes (nozīmē ieslēgts).

Lockdown=yes

Lai padarītu šo iestatījumu pastāvīgi atkārtoti ielādētu ugunsmūri.

$ sudo firewall-cmd --reload

Firewalld ir viegli lietojams pakalpojuma iptables aizstājējs, kas iptables izmanto kā aizmuguri. Šajā rakstā mēs parādījām, kā instalēt firewalld pakotni, izskaidrojām firewalld svarīgās funkcijas un apspriedām, kā tās konfigurēt izpildlaika un pastāvīgās konfigurācijas vidēs.

Ja jums ir kādi jautājumi vai komentāri, sazinieties ar mums, izmantojot zemāk esošo komentāru veidlapu. Lai iegūtu papildinformāciju, skatiet projekta firewalld rokasgrāmatas lapu (man firewalld) vai ugunsmūra dokumentāciju projekta vietnē.