Sådan opretter du en Brandvæg ved hjælp af Firevalld på CentOS 7

introduktion

brandvægsstyringsløsning er tilgængelig for mange distributioner, der fungerer som en frontend for iptables pakkefiltreringssystem leveret af kernen. I denne vejledning dækker vi, hvordan du opretter en brandvæg til din server og viser dig det grundlæggende ved at administrere brandvæggen med det administrative værktøj firewall-cmd (hvis du hellere vil bruge iptables med CentOS, følg denne vejledning).

Bemærk: Der er en chance for, at du muligvis arbejder med en nyere version af , end det var tilgængeligt på tidspunktet for denne skrivning, eller at din server blev konfigureret lidt anderledes end den eksempelserver, der blev brugt i denne vejledning. Således kan opførslen af nogle af de kommandoer, der er forklaret i denne vejledning, variere afhængigt af din specifikke konfiguration.

grundlæggende begreber

før vi begynder at tale om, hvordan du rent faktisk bruger værktøjet firewall-cmd til at administrere din konfiguration, bør vi blive bekendt med et par grundlæggende begreber, som værktøjet introducerer.

områder

dæmonen firewalld styrer grupper af regler ved hjælp af enheder kaldet “områder”. Områder er grundlæggende regelsæt, der dikterer, hvilken trafik der skal tillades, afhængigt af det tillidsniveau, du har i de netværk, din computer er tilsluttet. Netværksgrænseflader tildeles et område, der dikterer den adfærd, som brandvæggen skal tillade.

for computere, der ofte kan bevæge sig mellem netværk (som bærbare computere), giver denne form for fleksibilitet en god metode til at ændre dine regler afhængigt af dit miljø. Du har muligvis strenge regler, der forbyder mest trafik, når du opererer på et offentligt trådløst netværk, samtidig med at du tillader mere afslappede begrænsninger, når du er tilsluttet dit hjemmenetværk. For en server er disse områder ikke lige så vigtige, fordi netværksmiljøet sjældent, hvis nogensinde, ændres.

uanset hvor dynamisk dit netværksmiljø kan være, er det stadig nyttigt at være bekendt med den generelle ide bag hvert af de foruddefinerede områder for firewalld. I rækkefølge fra mindst betroede til mest betroede er de foruddefinerede områder inden for firewalld :

  • drop: Det laveste niveau af tillid. Alle indgående forbindelser droppes uden Svar, og kun udgående forbindelser er mulige.
  • blok: svarende til ovenstående, men i stedet for blot at droppe forbindelser, afvises indgående anmodninger med en icmp-host-prohibited eller icmp6-adm-prohibited besked.
  • offentlig: repræsenterer offentlige, ikke-betroede netværk. Du stoler ikke på andre computere, men tillader muligvis valgte indgående forbindelser fra sag til sag.
  • ekstern: eksterne netværk i tilfælde af at du bruger brandmuren som din port. Det er konfigureret til NAT maskering, så dit interne netværk forbliver privat, men nås.
  • internt: den anden side af det ydre område, der bruges til den indre del af en port. Computerne er temmelig troværdig og nogle ekstra tjenester er tilgængelige.
  • DMS: bruges til computere, der er placeret i en DMS (isolerede computere, der ikke har adgang til resten af dit netværk). Kun visse indgående forbindelser er tilladt.
  • arbejde: bruges til arbejdsmaskiner. Stol på de fleste computere i netværket. Et par flere tjenester kan være tilladt.
  • hjem: et hjemmemiljø. Det indebærer generelt, at du stoler på de fleste af de andre computere, og at et par flere tjenester vil blive accepteret.
  • trusted: Stol på alle maskinerne i netværket. Den mest åbne af de tilgængelige muligheder og bør bruges sparsomt.

for at bruge brandmuren kan vi oprette regler og ændre egenskaberne for vores områder og derefter tildele vores netværksgrænseflader til de områder, der er mest hensigtsmæssige.

Regelvarighed

i ildsted kan regler betegnes som enten permanente eller øjeblikkelige. Hvis en regel tilføjes eller ændres, ændres adfærden for den aktuelt kørende brandvæg som standard. Ved næste opstart vil de gamle regler blive vendt tilbage.

de fleste firewall-cmd operationer kan tage --permanent flag for at indikere, at den ikke-flygtige brandvæg skal målrettes. Dette vil påvirke regelsættet, der genindlæses ved opstart. Denne adskillelse betyder, at du kan teste regler i din aktive forekomst og derefter genindlæse, hvis der er problemer. Du kan også bruge --permanent – flaget til at opbygge et helt sæt regler over tid, som alle vil blive anvendt på en gang, når genindlæsningskommandoen udstedes.

Installer og aktiver din Brandvæg til at starte ved opstart

firewalld er som standard installeret på nogle distributioner, herunder mange billeder af CentOS 7. Det kan dog være nødvendigt for dig selv at installere ildsted:

  • sudo yum install firewalld

når du har installeret firewalld, kan du aktivere tjenesten og genstarte din server. Husk, at aktivering af brandvald vil få tjenesten til at starte ved opstart. Det er bedste praksis at oprette dine brandvægsregler og benytte lejligheden til at teste dem, før du konfigurerer denne adfærd for at undgå potentielle problemer.

  • sudo systemctl enable firewalld
  • sudo reboot

når serveren genstarter, skal din brandvæg bringes op, dine netværksgrænseflader skal placeres i de områder, du konfigurerede (eller falde tilbage til det konfigurerede standardområde), og eventuelle regler, der er knyttet til området(E), vil blive anvendt på de tilknyttede grænseflader.

vi kan kontrollere, at tjenesten kører og kan nås ved at skrive:

  • sudo firewall-cmd --state
output
running

dette indikerer, at vores brandmur er i gang med standardkonfigurationen.

Bliv fortrolig med de nuværende regler for Brandvæg

før vi begynder at foretage ændringer, skal vi gøre os bekendt med standardmiljøet og reglerne fra dæmonen.

udforskning af standardindstillingerne

vi kan se, hvilket område der i øjeblikket er valgt som standard ved at skrive:

  • firewall-cmd --get-default-zone
output
public

da vi ikke har givet firewalld nogen kommandoer til at afvige fra standardområdet, og ingen af vores grænseflader er konfigureret til at binde til et andet område, vil dette område også være det eneste “aktive” område (det område, der styrer trafikken for vores grænseflader). Vi kan bekræfte det ved at skrive:

  • firewall-cmd --get-active-zones
output
public interfaces: eth0 eth1

her kan vi se, at vores eksempelserver har to netværksgrænseflader, der styres af brandvæggen (eth0 og eth1). De administreres begge i øjeblikket i henhold til de regler, der er defineret for det offentlige område.

Hvordan ved vi dog, hvilke regler der er forbundet med det offentlige område? Vi kan udskrive standardområdets konfiguration ved at skrive:

  • sudo firewall-cmd --list-all
output
public (default, active) target: default icmp-block-inversion: no interfaces: eth0 eth1 sources: services: ssh dhcpv6-client ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:

vi kan fortælle fra output, at dette område er både standard og aktivt, og at grænsefladerne eth0 og eth1 er forbundet med dette område (vi vidste allerede alt dette fra vores tidligere forespørgsler). Vi kan dog også se, at dette område giver mulighed for de normale operationer, der er forbundet med en DHCP-klient (til IP-adressetildeling) og SSH (til fjernadministration).

udforskning af Alternative områder

nu har vi en god ide om konfigurationen af standard-og aktivområdet. Vi kan også finde oplysninger om andre områder.

for at få en liste over de tilgængelige områder, skriv:

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

vi kan se den specifikke konfiguration, der er knyttet til et område, ved at inkludere parameteren --zone= i vores kommando --list-all :

  • sudo firewall-cmd --zone=home --list-all
output
home interfaces: sources: services: dhcpv6-client ipp-client mdns samba-client ssh ports: masquerade: no forward-ports: icmp-blocks: rich rules:

du kan udskrive alle områdedefinitioner ved hjælp af indstillingen --list-all-zones. Du vil sandsynligvis ønsker at rør output i en personsøger for lettere visning:

  • sudo firewall-cmd --list-all-zones | less

valg af områder til dine grænseflader

medmindre du har konfigureret dine netværksgrænseflader ellers, placeres hver grænseflade i standardområdet, når brandvæggen startes.

ændring af et Grænsefladeområde

du kan skifte en grænseflade mellem områder under en session ved at bruge parameteren --zone= i kombination med parameteren --change-interface=. Som med alle kommandoer, der ændrer brandmuren, skal du bruge sudo.

for eksempel kan vi overføre vores eth0 interface til” home ” – området ved at skrive dette:

  • sudo firewall-cmd --zone=home --change-interface=eth0
output
success
Bemærk

når du skifter en grænseflade til et nyt område, skal du være opmærksom på, at du sandsynligvis ændrer de tjenester, der skal fungere. For eksempel flytter vi her til “home” – området, som har SSH til rådighed. Det betyder, at vores forbindelse ikke bør falde. Nogle andre områder har ikke SSH aktiveret som standard, og hvis din forbindelse tabes, mens du bruger et af disse områder, kan du finde dig selv ude af stand til at logge ind igen.

vi kan bekræfte, at dette lykkedes ved at bede om de aktive områder igen:

  • firewall-cmd --get-active-zones
output
home interfaces: eth0public interfaces: eth1

justering af standardområdet

hvis alle dine grænseflader bedst kan håndteres af et enkelt område, er det sandsynligvis nemmere at bare vælge det bedste standardområde og derefter bruge det til din konfiguration.

du kan ændre standardområdet med parameteren --set-default-zone=. Dette vil straks ændre enhver grænseflade, der var faldet tilbage på standard til det nye område:

  • sudo firewall-cmd --set-default-zone=home
output
success

Indstilling af regler for dine applikationer

den grundlæggende måde at definere undtagelser for de tjenester, du ønsker at stille til rådighed, er let. Vi gennemgår den grundlæggende ide her.

tilføjelse af en tjeneste til dine områder

den nemmeste metode er at tilføje de tjenester eller porte, du har brug for, til de områder, du bruger. Igen kan du få en liste over de tilgængelige tjenester med --get-services indstillingen:

  • firewall-cmd --get-services
output
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 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
Bemærk

du kan få flere detaljer om hver af disse tjenester ved at se på deres tilknyttede .xml fil i mappen /usr/lib/firewalld/services. For eksempel er SSH-tjenesten defineret som denne:

/usr/lib/firevalld/services/ssh.kml
<?xml version="1.0" encoding="utf-8"?><service> <short>SSH</short> <description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description> <port protocol="tcp" port="22"/></service>

du kan aktivere en tjeneste for et område ved hjælp af parameteren --add-service=. Handlingen vil målrette mod standardområdet eller hvilket område der er angivet af parameteren --zone=. Som standard vil dette kun justere den aktuelle session. Du kan justere den permanente konfiguration ved at inkludere --permanent – flaget.

hvis vi for eksempel kører en internetserver, der betjener konventionel HTTP-trafik, kan vi tillade denne trafik til grænseflader i vores” offentlige ” område til denne session ved at skrive:

  • sudo firewall-cmd --zone=public --add-service=http

du kan udelade --zone=, hvis du ønsker at ændre standardområdet. Vi kan bekræfte, at operationen var vellykket ved at bruge --list-all eller --list-services operationerne:

  • sudo firewall-cmd --zone=public --list-services
output
dhcpv6-client http ssh

når du har testet, at alt fungerer som det skal, vil du sandsynligvis ændre de permanente regler for brandvæg, så din service stadig vil være tilgængelig efter en genstart. Vi kan gøre vores “offentlige” områdeændring permanent ved at skrive:

  • sudo firewall-cmd --zone=public --permanent --add-service=http
output
success

du kan bekræfte, at dette lykkedes ved at tilføje --permanent – flaget til handlingen --list-services. Du skal bruge sudo til alle --permanent operationer:

  • sudo firewall-cmd --zone=public --permanent --list-services
output
dhcpv6-client http ssh

dit” offentlige ” område tillader nu HTTP-trafik på port 80. Hvis din server er konfigureret til at bruge SSL/TLS, skal du også tilføje https – tjenesten. Vi kan tilføje det til den aktuelle session og det permanente regelsæt ved at skrive:

  • sudo firewall-cmd --zone=public --add-service=https
  • sudo firewall-cmd --zone=public --permanent --add-service=https

hvad hvis der ikke er nogen passende Service tilgængelig?

de tjenester, der er inkluderet i installationen, repræsenterer mange af de mest almindelige krav til applikationer, som du måske ønsker at give adgang til. Der vil dog sandsynligvis være scenarier, hvor disse tjenester ikke passer til dine krav.

i denne situation har du to muligheder.

åbning af en Port til dine områder

den nemmeste måde at tilføje support til din specifikke applikation er at åbne de porte, den bruger i det eller de relevante områder. Dette er lige så let som at specificere porten eller portområdet og den tilknyttede protokol for de porte, du skal åbne.

hvis vores applikation for eksempel kører på port 5000 og bruger TCP, kan vi tilføje dette til det “offentlige” område for denne session ved hjælp af parameteren --add-port=. Protokoller kan enten være tcp ellerudp:

  • sudo firewall-cmd --zone=public --add-port=5000/tcp
output
success

vi kan kontrollere, at dette var vellykket ved hjælp af --list-ports – operationen:

  • sudo firewall-cmd --zone=public --list-ports
output
5000/tcp

det er også muligt at specificere et sekventielt interval af porte ved at adskille begyndelsen og slutningen af porten i området med et bindestreg. For eksempel, hvis vores applikation bruger UDP-porte 4990 til 4999, kunne vi åbne disse på “public” ved at skrive:

  • sudo firewall-cmd --zone=public --add-port=4990-4999/udp

efter at have testet, vil vi sandsynligvis gerne tilføje disse til den permanente brandvæg. Du kan gøre det ved at skrive:

  • sudo firewall-cmd --zone=public --permanent --add-port=5000/tcp
  • sudo firewall-cmd --zone=public --permanent --add-port=4990-4999/udp
  • sudo firewall-cmd --zone=public --permanent --list-ports
output
successsuccess5000/tcp 4990-4999/udp

definition af en tjeneste

åbning af porte til dine områder er let, men det kan være svært at holde styr på, hvad hver enkelt er til. Hvis du nogensinde nedlægger en tjeneste på din server, kan du have svært ved at huske, hvilke porte der er åbnet, der stadig kræves. For at undgå denne situation er det muligt at definere en tjeneste.

tjenester er simpelthen samlinger af porte med et tilknyttet navn og beskrivelse. Brug af tjenester er lettere at administrere end porte, men kræver lidt forudgående arbejde. Den nemmeste måde at starte på er at kopiere et eksisterende script (findes i /usr/lib/firewalld/services) til /etc/firewalld/services-mappen, hvor brandvæggen søger efter ikke-standarddefinitioner.

for eksempel kunne vi kopiere SSH-servicedefinitionen til brug for vores “eksempel” servicedefinition som denne. Filnavnet minus .xml suffikset vil diktere navnet på tjenesten på listen over brandvægstjenester:

  • sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/example.xml

nu Kan du justere definitionen, der findes i den fil, du kopierede:

sudo vi /etc/firewalld/services/example.xml

for at starte, vil filen indeholde den SSH-definition, du kopierede:

/etc/firealld/services/eksempel.
<?xml version="1.0" encoding="utf-8"?><service> <short>SSH</short> <description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description> <port protocol="tcp" port="22"/></service>

størstedelen af denne definition er faktisk metadata. Du vil gerne ændre det korte navn for tjenesten inden for <short> tags. Dette er et menneskeligt læsbart navn til din tjeneste. Du skal også tilføje en beskrivelse, så du har flere oplysninger, hvis du nogensinde har brug for at revidere tjenesten. Den eneste konfiguration, du skal foretage, der faktisk påvirker tjenestens funktionalitet, vil sandsynligvis være portdefinitionen, hvor du identificerer det portnummer og den protokol, du ønsker at åbne. Dette kan angives flere gange.

for vores “eksempel” – tjeneste, forestil dig, at vi skal åbne port 7777 for TCP og 8888 for UDP. Ved at gå ind i indsætningstilstand ved at trykke på i, kan vi ændre den eksisterende definition med noget som dette:

/etc/firevalld/services/eksempel.
<?xml version="1.0" encoding="utf-8"?><service> <short>Example Service</short> <description>This is just an example service. It probably shouldn't be used on a real system.</description> <port protocol="tcp" port="7777"/> <port protocol="udp" port="8888"/></service>

tryk på ESC, og indtast derefter :x for at gemme og lukke filen.

genindlæs din brandvæg for at få adgang til din nye tjeneste:

  • sudo firewall-cmd --reload

du kan se, at det nu er blandt listen over tilgængelige tjenester:

  • firewall-cmd --get-services
output
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 example 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 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

du kan nu bruge denne service i dine områder, som du normalt ville.

oprettelse af dine egne områder

mens de foruddefinerede områder sandsynligvis vil være mere end nok for de fleste brugere, kan det være nyttigt at definere dine egne områder, der er mere beskrivende for deres funktion.

du kan f.eks. oprette et område til din internetserver, kaldet “Internet”. Du vil dog muligvis have et andet område konfigureret til den DNS-tjeneste, du leverer på dit private netværk. Du vil måske have et område kaldet “privateDNS” til det.

når du tilføjer et område, skal du føje det til den permanente konfiguration. Du kan derefter genindlæse for at bringe konfigurationen ind i din kørende session. For eksempel kunne vi oprette de to områder, vi diskuterede ovenfor ved at skrive:

  • sudo firewall-cmd --permanent --new-zone=publicweb
  • sudo firewall-cmd --permanent --new-zone=privateDNS

du kan kontrollere, at disse er til stede i din permanente konfiguration ved at skrive:

  • sudo firewall-cmd --permanent --get-zones
output
block dmz drop external home internal privateDNS public publicweb trusted work

som tidligere nævnt vil disse ikke være tilgængelige i den aktuelle forekomst af brandmuren endnu:

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

Genindlæs brandvæggen for at bringe disse nye områder ind i den aktive konfiguration:

  • sudo firewall-cmd --reload
  • firewall-cmd --get-zones
output
block dmz drop external home internal privateDNS public publicweb trusted work

nu Kan du begynde at tildele de relevante tjenester og porte til dine områder. Det er normalt en god ide at justere den aktive forekomst og derefter overføre disse ændringer til den permanente konfiguration efter test. For eksempel, for området “offentlig internet”, du måske ønsker at tilføje SSH, HTTP, og HTTPS-tjenester:

  • sudo firewall-cmd --zone=publicweb --add-service=ssh
  • sudo firewall-cmd --zone=publicweb --add-service=http
  • sudo firewall-cmd --zone=publicweb --add-service=https
  • sudo firewall-cmd --zone=publicweb --list-all
output
publicweb target: default icmp-block-inversion: no interfaces: sources: services: ssh http https ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:

ligeledes kan vi tilføje DNS-tjenesten til vores” privateDNS ” – område:

  • sudo firewall-cmd --zone=privateDNS --add-service=dns
  • sudo firewall-cmd --zone=privateDNS --list-all
output
privateDNS interfaces: sources: services: dns ports: masquerade: no forward-ports: icmp-blocks: rich rules:

vi kunne derefter ændre vores grænseflader til disse nye områder for at teste dem ud:

  • sudo firewall-cmd --zone=publicweb --change-interface=eth0
  • sudo firewall-cmd --zone=privateDNS --change-interface=eth1

på dette tidspunkt har du mulighed for at teste din konfiguration. Hvis disse værdier fungerer for dig, vil du tilføje de samme regler til den permanente konfiguration. Du kan gøre det ved at anvende reglerne igen med --permanent flag:

  • sudo firewall-cmd --zone=publicweb --permanent --add-service=ssh
  • sudo firewall-cmd --zone=publicweb --permanent --add-service=http
  • sudo firewall-cmd --zone=publicweb --permanent --add-service=https
  • sudo firewall-cmd --zone=privateDNS --permanent --add-service=dns

når du har anvendt disse dine regler permanent, kan du genstarte dit netværk og genindlæse din brandvægsservice:

  • sudo systemctl restart network
  • sudo systemctl reload firewalld

Bekræft, at de korrekte områder blev tildelt:

  • firewall-cmd --get-active-zones
output
privateDNS interfaces: eth1publicweb interfaces: eth0

og validere, at de relevante tjenester er tilgængelige for begge områder:

  • sudo firewall-cmd --zone=publicweb --list-services
output
http https ssh
  • sudo firewall-cmd --zone=privateDNS --list-services
output
dns

du har med succes oprettet dine egne områder! Hvis du vil gøre et af disse områder til standard for andre grænseflader, skal du huske at konfigurere denne adfærd med parameteren --set-default-zone= :

sudo firewall-cmd --set-default-zone=publicweb

konklusion

du skal nu have en ret god forståelse af, hvordan du administrerer tjenesten til dit CentOS-system til daglig brug.

tjenesten giver dig mulighed for at konfigurere vedligeholdelige regler og regelsæt, der tager hensyn til dit netværksmiljø. Det giver dig mulighed for problemfrit at skifte mellem forskellige brandmurspolitikker gennem brug af områder og giver administratorer mulighed for at abstrahere havnestyringen til mere venlige servicedefinitioner. At erhverve en praktisk viden om dette system giver dig mulighed for at drage fordel af den fleksibilitet og kraft, som dette værktøj giver.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.

Previous post Cefalu, Italien: en komplet Guide til den sicilianske Strandby
Next post Mystery middag ideer med menupunkter