Rocky fw: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Zeile 37: Zeile 37:
 
! System !! Netz !! IP !! Dienste
 
! System !! Netz !! IP !! Dienste
 
|-
 
|-
| fw.it2XX.int || WAN/DMZ/LAN || siehe oben || firewalld, Kea DHCP
+
| fw.it2XX.int || WAN || 192.168.HS.2XX/24 || firewalld, Kea DHCP
 
|-
 
|-
| ns.it2XX.int || DMZ || 10.88.2XX.21 || BIND9 (DNS)
+
| fw.it2XX.int || DMZ || 10.88.2XX.1/24 || firewalld, Kea DHCP
 
|-
 
|-
| http.it2XX.int || DMZ || 10.88.2XX.11 || Apache
+
| fw.it2XX.int || LAN || 172.26.2XX.1/24 || firewalld, Kea DHCP
 
|-
 
|-
| ldap.it2XX.int || DMZ || 10.88.2XX.31 || OpenLDAP
+
| ns.it2XX.int || DMZ || 10.88.2XX.21/24 || BIND9 (DNS)
 +
|-
 +
| http.it2XX.int || DMZ || 10.88.2XX.11/24 || Apache
 +
|-
 +
| ldap.it2XX.int || DMZ || 10.88.2XX.31/24 || OpenLDAP
 
|-
 
|-
 
| client.it2XX.int || LAN || per DHCP || Ansible Control Node
 
| client.it2XX.int || LAN || per DHCP || Ansible Control Node

Version vom 30. Juni 2026, 18:42 Uhr

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.

Plan

Interface Wert Erläuterung
enp0s3 192.168.HS.2XX/24 (Schulungsnetz)
GW 10.88.2XX.1 GATEWAY
NS 192.168.HS.88 Resolver
enp0s8 10.88.2XX.1/24 DMZ
enp0s9 172.26.2XX.1/24 LAN
GW 192.168.HS.254 GATEWAY
FQDN fw.it2XX.int Fully Qualified Domain Name
SHORT fw Short Name
DOM it2XX.int Domain Name
ROUTE 10.88.0.0/16 192.168.HS.88


Feste IP-Adressen

System Netz IP Dienste
fw.it2XX.int WAN 192.168.HS.2XX/24 firewalld, Kea DHCP
fw.it2XX.int DMZ 10.88.2XX.1/24 firewalld, Kea DHCP
fw.it2XX.int LAN 172.26.2XX.1/24 firewalld, Kea DHCP
ns.it2XX.int DMZ 10.88.2XX.21/24 BIND9 (DNS)
http.it2XX.int DMZ 10.88.2XX.11/24 Apache
ldap.it2XX.int DMZ 10.88.2XX.31/24 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