Selbst bei einer Minimalinstallation eines Linux ist die Firewall aktiv.
Bei den neuen RedHat Derivaten (CentOS, Fedora, ScientificLinux, …) wird die Firewall mit dem Kommando firewall-cmd kontrolliert.
Ähnlich wie bei Windows 7 etc. unterscheidet die Firewall verschiedene “Zonen”, die den Computer mehr oder weniger komplett abschotten. Bei einem Laptop kann sich die Zone ändern, je nachdem wie die Verbindung ins Internet hergestellt wird.
Bei einem festen Computer wie in meinem Beispiel, definiert man die Zone einmal und belässt es dabei.
In diesem Beispiel geht es darum, ein frisch installiertes CentOS so zu konfigurieren, das auf den Webserver zugegriffen werden kann.
Mit firewall-cmd –state kann man überprüfen, das die Firewall auch tatsächlich läuft:
[root@cds2 cbs]# firewall-cmd --state
running
Die Firewall läuft also.
Mit firewall-cmd –list-all sieht man, welcher Zone die aktuelle Netzwerkkarte zugewiesen ist und welche Dienste von aussen erreicht werden können:
[root@cds2 cbs]# firewall-cmd --list-all
public (default, active)
interfaces: enp2s0
sources:
services: dhcpv6-client ssh
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
Die eingebaute Netzwerkkarte nennt sich enp2s0 und ist in der Zone “public”
In meinem Fall steht der Server in meinem internen Netzwerk, hinter einer Hardware-Firewall, public ist also zu restriktiv. Was für Zonen gibt es noch?
[root@cds2 cbs]# firewall-cmd --list-all-zones
block
interfaces:
sources:
services:
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
dmz
interfaces:
sources:
services: ssh
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
drop
interfaces:
sources:
services:
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
external
interfaces:
sources:
services: ssh
ports:
masquerade: yes
forward-ports:
icmp-blocks:
rich rules:
home
interfaces:
sources:
services: dhcpv6-client ipp-client mdns samba-client ssh
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
internal
interfaces:
sources:
services: dhcpv6-client ipp-client mdns samba-client ssh
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
public (default, active)
interfaces: enp2s0
sources:
services: dhcpv6-client ssh
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
trusted
interfaces:
sources:
services:
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
work
interfaces:
sources:
services: dhcpv6-client ipp-client ssh
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
“internal” klingt für mich richtig, also weise ich der Netzwerkkarte diese Zone zu.
Zum Testen kann man die Zone mit folgendem Befehl zuweisen:
[root@cds2 cbs]# firewall-cmd --zone=internal --change-interface=enp2s0
success
Wenn alles funktioniert, muss man die Änderung noch permanent machen, indem man die Datei /etc/sysconfig/network-scripts/ifcfg-enp2s0 ändert:
Also nano /etc/sysconfig/network-scripts/ifcfg-enp2s0
, dann eine Zeile anhängen:
ZONE=internal
Dann den ganzen Rechner neu starten, oder nur die Services:
sudo systemctl restart network.service
sudo systemctl restart firewalld.service
Ob das funktioniert hat, kann man auch mit firewall-cmd –get-active-zones überprüfen:
[root@cds2 cbs]# firewall-cmd --get-active-zones
internal
interfaces: enp2s0
Ich möchte den Webserver zugänglich machen, also den Service http. Und https, für sichere Webseiten.
Welche Services die Firewall überhaupt kennt, kann man sich mit
firewall-cmd --get-services
anzeigen lassen. Eine ziemlich lange Liste, http und https sind auch dabei.
Die “internal” Zone hat im Moment folgende Services aktiviert:
[root@cds2 cbs]# firewall-cmd --zone=internal --list-services
dhcpv6-client ipp-client mdns samba-client ssh
Fügen wir http und https hinzu:
[root@cds2 cbs]# firewall-cmd --zone=internal --add-service=http --add-service=https
success
[root@cds2 cbs]# firewall-cmd --zone=internal --list-services dhcpv6-client http https ipp-client mdns samba-client ssh
Und schon sollte der Webserver von einem anderen Computer aus erreichbar sein.
Allerdings nur bis zum Neustart. Um die Services permanent erreichbar zu machen, müssen wir noch folgendes ausführen:
[root@cds2 cbs]# firewall-cmd --zone=internal --permanent --add-service=http --add-service=https
success
Mehr dazu findet sich auf Digital Ocean