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
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
ellericmp6-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
outputrunning
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
outputpublic
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
outputpublic 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
outputpublic (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
outputblock 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
outputhome 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
outputsuccess
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
outputhome 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
outputsuccess
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
outputRH-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
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:
<?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
outputdhcpv6-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
outputsuccess
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
outputdhcpv6-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
outputsuccess
vi kan kontrollere, at dette var vellykket ved hjælp af --list-ports
– operationen:
- sudo firewall-cmd --zone=public --list-ports
output5000/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
outputsuccesssuccess5000/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:
<?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:
<?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
outputRH-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
outputblock 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
outputblock 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
outputblock 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
outputpublicweb 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
outputprivateDNS 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
outputprivateDNS interfaces: eth1publicweb interfaces: eth0
og validere, at de relevante tjenester er tilgængelige for begge områder:
- sudo firewall-cmd --zone=publicweb --list-services
outputhttp https ssh
- sudo firewall-cmd --zone=privateDNS --list-services
outputdns
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.