Iptables Netze absichern: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
(Die Seite wurde neu angelegt: „= Einleitung = * Nachdem wir ein Hostsystem abgesichert haben, kommen wir nun zum Absichern von Netzen. * Die Firewall agiert als Vermittler zwischen verschie…“)
 
Zeile 41: Zeile 41:
 
  WANIP="10.82.232.11"
 
  WANIP="10.82.232.11"
 
  WEBSERVER="192.168.4.12"
 
  WEBSERVER="192.168.4.12"
 
+
 
  case $1 in
 
  case $1 in
 
   start)
 
   start)
Zeile 50: Zeile 50:
 
     iptables -P OUTPUT DROP
 
     iptables -P OUTPUT DROP
 
     iptables -P FORWARD DROP
 
     iptables -P FORWARD DROP
 
+
 
     # Connection Tracking
 
     # Connection Tracking
 
     iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
 
     iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
 
     iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
 
     iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
 
+
 
     # Loopback
 
     # Loopback
 
     iptables -A INPUT -i lo -j ACCEPT
 
     iptables -A INPUT -i lo -j ACCEPT
 
     iptables -A OUTPUT -o lo -j ACCEPT
 
     iptables -A OUTPUT -o lo -j ACCEPT
 
+
 
     # Output Regeln
 
     # Output Regeln
 
     iptables -A OUTPUT -p tcp -m multiport --dports $REMOTE_TCP_PORTS -m state --state NEW -j ACCEPT
 
     iptables -A OUTPUT -p tcp -m multiport --dports $REMOTE_TCP_PORTS -m state --state NEW -j ACCEPT
 
     iptables -A OUTPUT -p udp -m multiport --dports $REMOTE_UDP_PORTS -m state --state NEW -j ACCEPT
 
     iptables -A OUTPUT -p udp -m multiport --dports $REMOTE_UDP_PORTS -m state --state NEW -j ACCEPT
 
     iptables -A OUTPUT -p icmp --icmp-type echo-request -m state --state NEW -j ACCEPT
 
     iptables -A OUTPUT -p icmp --icmp-type echo-request -m state --state NEW -j ACCEPT
 
+
 
     # Input Regeln
 
     # Input Regeln
 
     iptables -A INPUT -p tcp -m multiport --dports $LOCAL_TCP_PORTS -m state --state NEW -j ACCEPT
 
     iptables -A INPUT -p tcp -m multiport --dports $LOCAL_TCP_PORTS -m state --state NEW -j ACCEPT
 
+
 
     # SNAT
 
     # SNAT
 
     iptables -t nat -A POSTROUTING -s $LAN_NET -o $WANDEV -j SNAT --to-source $WANIP
 
     iptables -t nat -A POSTROUTING -s $LAN_NET -o $WANDEV -j SNAT --to-source $WANIP
 
+
 
     # Portforwarding
 
     # Portforwarding
 
     iptables -t nat -A PREROUTING -i $WANDEV -p tcp --dport 9922 -j DNAT --to-destination $WEBSERVER:22
 
     iptables -t nat -A PREROUTING -i $WANDEV -p tcp --dport 9922 -j DNAT --to-destination $WEBSERVER:22
 
     iptables -t nat -A PREROUTING -i $WANDEV -p tcp --dport 80 -j DNAT --to-destination $WEBSERVER:80
 
     iptables -t nat -A PREROUTING -i $WANDEV -p tcp --dport 80 -j DNAT --to-destination $WEBSERVER:80
 
+
 
     # Zugriff auf Webserver zulassen
 
     # Zugriff auf Webserver zulassen
 
     iptables -A FORWARD -i $WANDEV -d $WEBSERVER -p tcp --dport 22 -j ACCEPT
 
     iptables -A FORWARD -i $WANDEV -d $WEBSERVER -p tcp --dport 22 -j ACCEPT
 
     iptables -A FORWARD -i $WANDEV -d $WEBSERVER -p tcp --dport 80 -j ACCEPT
 
     iptables -A FORWARD -i $WANDEV -d $WEBSERVER -p tcp --dport 80 -j ACCEPT
 
+
 
     # Zugriff vom LAN nach außen
 
     # Zugriff vom LAN nach außen
 
     iptables -A FORWARD -s $LAN_NET -i $LANDEV -o $WANDEV -p icmp --icmp-type echo-request -j ACCEPT
 
     iptables -A FORWARD -s $LAN_NET -i $LANDEV -o $WANDEV -p icmp --icmp-type echo-request -j ACCEPT
 
     iptables -A FORWARD -s $LAN_NET -i $LANDEV -o $WANDEV -p udp --dport 53 -j ACCEPT
 
     iptables -A FORWARD -s $LAN_NET -i $LANDEV -o $WANDEV -p udp --dport 53 -j ACCEPT
 
     iptables -A FORWARD -s $LAN_NET -i $LANDEV -o $WANDEV -p tcp -m multiport --dports 25,53,80,143,443,465,993 -j ACCEPT
 
     iptables -A FORWARD -s $LAN_NET -i $LANDEV -o $WANDEV -p tcp -m multiport --dports 25,53,80,143,443,465,993 -j ACCEPT
 
+
 
     # Eigene Kette für LAN nach WAN
 
     # Eigene Kette für LAN nach WAN
 
     iptables -N LAN2WAN
 
     iptables -N LAN2WAN
Zeile 89: Zeile 89:
 
     iptables -A FORWARD -s $LAN_NET -i $LANDEV -o $WANDEV -p udp --dport 53 -j LAN2WAN
 
     iptables -A FORWARD -s $LAN_NET -i $LANDEV -o $WANDEV -p udp --dport 53 -j LAN2WAN
 
     iptables -A FORWARD -s $LAN_NET -i $LANDEV -o $WANDEV -p tcp -m multiport --dports 25,53,80,143,443,465,993 -j LAN2WAN
 
     iptables -A FORWARD -s $LAN_NET -i $LANDEV -o $WANDEV -p tcp -m multiport --dports 25,53,80,143,443,465,993 -j LAN2WAN
 
+
 
     <span style="color:#FF0000"># Limitierte Logging-Regeln</span>
 
     <span style="color:#FF0000"># Limitierte Logging-Regeln</span>
 
     <span style="color:#FF0000">iptables -A INPUT -m limit --limit 5/min -j LOG --log-prefix "--iptables-drop-input--"</span>
 
     <span style="color:#FF0000">iptables -A INPUT -m limit --limit 5/min -j LOG --log-prefix "--iptables-drop-input--"</span>

Version vom 12. April 2025, 20:31 Uhr

Einleitung

  • Nachdem wir ein Hostsystem abgesichert haben, kommen wir nun zum Absichern von Netzen.
  • Die Firewall agiert als Vermittler zwischen verschiedenen Netzen.
  • In unserem Beispiel haben wir 3 Netzbereiche.

WAN

  • Wide Area Net steht für alles was nicht die anderen beiden Netze betrifft

LAN

  • Local Area Net steht in der Regel für ein Netz das von außen nicht erreichbar ist.
  • Meist ist es über Network Address Translation (NAT) angebunden.

DMZ

  • Demilitarized Zone ist ein Netz welches von außen erreichbar ist.
  • Die Zugriffe werden aber durch die Firewall abgesichert.
  • Dort werden meistens Dienste wie Mail oder Web gehostet. Teilweise auch Proxy Server.

Der Plan

netzplan-iptables-1
empty app.diagrams.net chart

Das Grundgerüst

  • Wir nutzen unsere Host-Firewall als Ausgangsskript
  • Wir wollen aber von vornherein verstärkt mit Variablen arbeiten.
  • Dies macht die Skripte universeller.
  • vi /usr/local/sbin/firewall
#!/bin/bash
REMOTE_TCP_PORTS="22,25,53,80,465,443"
REMOTE_UDP_PORTS="53"
LOCAL_TCP_PORTS="22,80,443"
WANDEV="ens18"
DMZDEV="ens19"
LANDEV="ens20"
LAN_NET="192.168.4.0/24"
WANIP="10.82.232.11"
WEBSERVER="192.168.4.12"

case $1 in
  start)
    echo "starte firewall"
    iptables -F
    iptables -F -t nat
    iptables -P INPUT DROP
    iptables -P OUTPUT DROP
    iptables -P FORWARD DROP

    # Connection Tracking
    iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

    # Loopback
    iptables -A INPUT -i lo -j ACCEPT
    iptables -A OUTPUT -o lo -j ACCEPT

    # Output Regeln
    iptables -A OUTPUT -p tcp -m multiport --dports $REMOTE_TCP_PORTS -m state --state NEW -j ACCEPT
    iptables -A OUTPUT -p udp -m multiport --dports $REMOTE_UDP_PORTS -m state --state NEW -j ACCEPT
    iptables -A OUTPUT -p icmp --icmp-type echo-request -m state --state NEW -j ACCEPT

    # Input Regeln
    iptables -A INPUT -p tcp -m multiport --dports $LOCAL_TCP_PORTS -m state --state NEW -j ACCEPT

    # SNAT
    iptables -t nat -A POSTROUTING -s $LAN_NET -o $WANDEV -j SNAT --to-source $WANIP

    # Portforwarding
    iptables -t nat -A PREROUTING -i $WANDEV -p tcp --dport 9922 -j DNAT --to-destination $WEBSERVER:22
    iptables -t nat -A PREROUTING -i $WANDEV -p tcp --dport 80 -j DNAT --to-destination $WEBSERVER:80

    # Zugriff auf Webserver zulassen
    iptables -A FORWARD -i $WANDEV -d $WEBSERVER -p tcp --dport 22 -j ACCEPT
    iptables -A FORWARD -i $WANDEV -d $WEBSERVER -p tcp --dport 80 -j ACCEPT

    # Zugriff vom LAN nach außen
    iptables -A FORWARD -s $LAN_NET -i $LANDEV -o $WANDEV -p icmp --icmp-type echo-request -j ACCEPT
    iptables -A FORWARD -s $LAN_NET -i $LANDEV -o $WANDEV -p udp --dport 53 -j ACCEPT
    iptables -A FORWARD -s $LAN_NET -i $LANDEV -o $WANDEV -p tcp -m multiport --dports 25,53,80,143,443,465,993 -j ACCEPT

    # Eigene Kette für LAN nach WAN
    iptables -N LAN2WAN
    iptables -A LAN2WAN -s $LAN_NET -i $LANDEV -o $WANDEV -j ACCEPT
    iptables -A FORWARD -s $LAN_NET -i $LANDEV -o $WANDEV -p icmp --icmp-type echo-request -j LAN2WAN
    iptables -A FORWARD -s $LAN_NET -i $LANDEV -o $WANDEV -p udp --dport 53 -j LAN2WAN
    iptables -A FORWARD -s $LAN_NET -i $LANDEV -o $WANDEV -p tcp -m multiport --dports 25,53,80,143,443,465,993 -j LAN2WAN

    # Limitierte Logging-Regeln
    iptables -A INPUT -m limit --limit 5/min -j LOG --log-prefix "--iptables-drop-input--"
    iptables -A OUTPUT -m limit --limit 5/min -j LOG --log-prefix "--iptables-drop-output--"
    iptables -A FORWARD -m limit --limit 5/min -j LOG --log-prefix "--iptables-drop-forward--"
    ;;
  stop)
    echo "stoppe firewall"
    iptables -F
    iptables -F -t nat
    iptables -P INPUT ACCEPT
    iptables -P OUTPUT ACCEPT
    iptables -P FORWARD ACCEPT
    ;;
  *)
    echo "usage: $0 start|stop"
    ;;
esac

Forwarding

  • echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
  • sysctl -p

Hinweis zu neuer Syntax

  • Neue Ketten erzeugt mit:
    iptables -N <KETTENNAME>
  • Portweiterleitungen:
    iptables -t nat -A PREROUTING -i <WAN> -p tcp --dport <PORT> -j DNAT --to-destination <IP:PORT>
  • SNAT für ausgehende Pakete:
    iptables -t nat -A POSTROUTING -s <LAN> -o <WAN> -j SNAT --to-source <WAN-IP>
  • Limits:
    iptables -A <CHAIN> -m limit --limit <WERT> -j LOG --log-prefix "--DEIN-PREFIX--"