Rocky fw: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
 
(24 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
= Die Firewall =
*[[Rocky fw firewalld]]
 
*[[Rocky fw nftables]]
== Ziel ==
*[[Rocky fw firewalld mit return]]
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 ==
 
{| class="wikitable"
! 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 ===
 
{| class="wikitable"
! 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 ==
 
{| class="wikitable"
! 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
<pre>
{
  "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" }
        ]
      }
    ]
  }
}
</pre>
 
=== 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

Aktuelle Version vom 7. Juli 2026, 03:45 Uhr