Rocky fw

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen

Die Firewall

Ziel

Die Firewall trennt drei Netzbereiche voneinander: das Schulungsnetz (WAN), die DMZ und das interne LAN. Sie übernimmt gleichzeitig die Aufgaben eines Routers, eines DHCP-Servers für das LAN und kontrolliert den gesamten Netzverkehr zwischen den Zonen.

Netzplan

Interface Zone Netz IP Firewall
enp0s3 external 192.168.HS.0/24 (Schulungsnetz) 192.168.HS.2XX
enp0s8 dmz 10.88.2XX.0/24 10.88.2XX.1
enp0s9 internal 172.26.2XX.0/24 172.26.2XX.1

Feste IP-Adressen

System Netz IP Dienste
fw.it2XX.int WAN/DMZ/LAN siehe oben firewalld, Kea DHCP
ns.it2XX.int DMZ 10.88.2XX.21 BIND9 (DNS)
http.it2XX.int DMZ 10.88.2XX.11 Apache
ldap.it2XX.int DMZ 10.88.2XX.31 OpenLDAP
client.it2XX.int LAN per DHCP Ansible Control Node

Dienste auf der Firewall

firewalld
Zonenverwaltung, Paketfilterung, Masquerading
Kea DHCP4
IP-Vergabe für das LAN (172.26.2XX.0/24)

Regelwerk

Von Nach Erlaubt Gesperrt
LAN WAN alles
LAN DMZ alles (SSH für Ansible, DNS, HTTP ...)
DMZ WAN alles
WAN DMZ UDP+TCP/53 nur auf ns, TCP/80+443 nur auf http alles andere
WAN LAN alles
DMZ LAN alles
LAN ist vertrauenswürdig
Aus dem internen Netz darf alles raus – sowohl ins WAN als auch in die DMZ. So kann Ansible von client.it2XX.int per SSH alle DMZ-Maschinen erreichen.
WAN → DMZ gezielt
Aus dem Internet kommen nur die Dienste rein, die wirklich öffentlich sein sollen – und nur auf die jeweilige Ziel-IP. Dafür werden Rich Rules verwendet.
DMZ → LAN gesperrt
LDAP liegt jetzt in der DMZ – kein Grund mehr für Verbindungen aus der DMZ ins LAN.

Umsetzung

Netzwerkkonfiguration

enp0s3 (WAN)

Die WAN-Verbindung bekommt eine feste IP. Da die Connection bereits existiert, wird sie per mod angepasst.
  • nmcli con mod enp0s3 ipv4.method manual ipv4.addresses 192.168.HS.2XX/24 ipv4.gateway 192.168.HS.254 ipv4.dns 192.168.HS.88
  • nmcli con up enp0s3

Tabula Rasa

Rocky legt für neue Interfaces automatisch Connections mit generischen Namen an – diese werden gelöscht
  • nmcli con delete "Wired connection 1"
  • nmcli con delete "Wired connection 2"

enp0s8 (DMZ)

Neue Connection mit explizitem Namen – kein Gateway, kein DNS nötig
  • nmcli con add type ethernet ifname enp0s8 con-name enp0s8 ipv4.method manual ipv4.addresses 10.88.2XX.1/24
  • nmcli con up enp0s8

enp0s9 (LAN)

Das LAN-Interface wird Gateway für alle internen Clients
  • nmcli con add type ethernet ifname enp0s9 con-name enp0s9 ipv4.method manual ipv4.addresses 172.26.2XX.1/24
  • nmcli con up enp0s9

Zonen über NetworkManager setzen

Der saubere Weg
NetworkManager teilt firewalld mit welche Zone ein Interface bekommt – reproduzierbar auch nach Reboot
  • nmcli con mod enp0s3 connection.zone external
  • nmcli con mod enp0s8 connection.zone dmz
  • nmcli con mod enp0s9 connection.zone internal
  • nmcli con up enp0s3
  • nmcli con up enp0s8
  • nmcli con up enp0s9

IP-Forwarding aktivieren

Ohne IP-Forwarding leitet der Kernel keine Pakete zwischen den Interfaces weiter – die Firewall wäre kein Router
  • echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/99-forwarding.conf
  • sysctl -p /etc/sysctl.d/99-forwarding.conf

firewalld

Installation und Start

firewalld ist auf Rocky meist vorinstalliert, zur Sicherheit
  • dnf install -y firewalld
  • systemctl enable --now firewalld

Policies für inter-zone Forwarding

In modernem firewalld regeln Policies den Verkehr zwischen Zonen – nicht die Zonen selbst. Ohne Policy wird Forwarding zwischen Zonen standardmäßig geblockt.
LAN → WAN
Clients kommen ins Internet, Masquerading ersetzt die private Quell-IP
  • firewall-cmd --permanent --new-policy lan-to-wan
  • firewall-cmd --permanent --policy lan-to-wan --add-ingress-zone internal
  • firewall-cmd --permanent --policy lan-to-wan --add-egress-zone external
  • firewall-cmd --permanent --policy lan-to-wan --set-target ACCEPT
  • firewall-cmd --permanent --policy lan-to-wan --add-masquerade
DMZ → WAN
DMZ-Server kommen ins Internet, ebenfalls mit Masquerading
  • firewall-cmd --permanent --new-policy dmz-to-wan
  • firewall-cmd --permanent --policy dmz-to-wan --add-ingress-zone dmz
  • firewall-cmd --permanent --policy dmz-to-wan --add-egress-zone external
  • firewall-cmd --permanent --policy dmz-to-wan --set-target ACCEPT
  • firewall-cmd --permanent --policy dmz-to-wan --add-masquerade
LAN → DMZ
Ansible und andere interne Zugriffe auf DMZ-Server
  • firewall-cmd --permanent --new-policy lan-to-dmz
  • firewall-cmd --permanent --policy lan-to-dmz --add-ingress-zone internal
  • firewall-cmd --permanent --policy lan-to-dmz --add-egress-zone dmz
  • firewall-cmd --permanent --policy lan-to-dmz --set-target ACCEPT

WAN → DMZ: nur gezielt per Rich Rule

DNS auf ns.it2XX.int (10.88.2XX.21)
  • firewall-cmd --permanent --zone=dmz --add-rich-rule='rule family="ipv4" destination address="10.88.2XX.21" service name="dns" accept'
HTTP und HTTPS auf http.it2XX.int (10.88.2XX.11)
  • firewall-cmd --permanent --zone=dmz --add-rich-rule='rule family="ipv4" destination address="10.88.2XX.11" service name="http" accept'
  • firewall-cmd --permanent --zone=dmz --add-rich-rule='rule family="ipv4" destination address="10.88.2XX.11" service name="https" accept'

ICMP überall erlauben

Ping wird in allen Zonen und Policies freigeschaltet – erleichtert die Fehlersuche im Labor
  • firewall-cmd --permanent --zone=external --add-protocol=icmp
  • firewall-cmd --permanent --zone=dmz --add-protocol=icmp
  • firewall-cmd --permanent --zone=internal --add-protocol=icmp
  • firewall-cmd --permanent --policy lan-to-wan --add-protocol=icmp
  • firewall-cmd --permanent --policy dmz-to-wan --add-protocol=icmp
  • firewall-cmd --permanent --policy lan-to-dmz --add-protocol=icmp

Konfiguration laden

  • firewall-cmd --reload

Kontrolle

  • firewall-cmd --list-all --zone=external
  • firewall-cmd --list-all --zone=dmz
  • firewall-cmd --list-all --zone=internal
  • firewall-cmd --info-policy lan-to-wan
  • firewall-cmd --info-policy dmz-to-wan
  • firewall-cmd --info-policy lan-to-dmz

Kea DHCP4 für das LAN

Installation

  • dnf install -y kea

Konfiguration

Kea lauscht nur auf enp0s9 (LAN) und verteilt IPs im Bereich .100–.200.
  • vim /etc/kea/kea-dhcp4.conf
{
  "Dhcp4": {
    "interfaces-config": {
      "interfaces": [ "enp0s9" ]
    },
    "lease-database": {
      "type": "memfile",
      "persist": true,
      "name": "/var/lib/kea/kea-leases4.csv"
    },
    "valid-lifetime": 3600,
    "subnet4": [
      {
        "id": 1,
        "subnet": "172.26.2XX.0/24",
        "pools": [ { "pool": "172.26.2XX.100 - 172.26.2XX.200" } ],
        "option-data": [
          { "name": "routers", "data": "172.26.2XX.1" },
          { "name": "domain-name-servers", "data": "10.88.2XX.21" },
          { "name": "domain-name", "data": "it2XX.int" }
        ]
      }
    ]
  }
}

Start

  • systemctl enable --now kea-dhcp4

Kontrolle

  • ss -lnup | grep 67
  • systemctl status kea-dhcp4
  • journalctl -fu kea-dhcp4
  • cat /var/lib/kea/kea-leases4.csv