Iptables Netze absichern: Unterschied zwischen den Versionen
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
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--"