Iptables Netze absichern: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
Keine Bearbeitungszusammenfassung |
|||
| Zeile 11: | Zeile 11: | ||
= LAN = | = LAN = | ||
* Local Area Net steht in der Regel für ein Netz das von | * Local Area Net steht in der Regel für ein Netz das von aussen nicht erreichbar ist. | ||
* Meist ist es über Network Address Translation (NAT) angebunden. | * Meist ist es über Network Address Translation (NAT) angebunden. | ||
| Zeile 22: | Zeile 22: | ||
= Der Plan = | = Der Plan = | ||
{{#drawio:netzplan- | {{#drawio:netzplan-nftables-1}} | ||
= Das Grundgerüst = | = Das Grundgerüst = | ||
* Wir nutzen unsere Host | * Wir nutzen unsere Host Firewall als Ausgangsskript | ||
* Wir wollen aber von | * Wir wollen aber von vorneherein verstärkt mit Variablen arbeiten. | ||
* Dies macht die Skripte universeller. | * Dies macht die Skripte universeller. | ||
= iptables-Skript = | |||
= | '''vim /etc/iptables.sh''' | ||
<pre> | |||
#!/bin/bash | |||
# Variablen | |||
WAN_IF="ens18" | |||
DMZ_IF="ens19" | |||
LAN_IF="ens20" | |||
LAN_NET="192.168.4.0/24" | |||
REMOTE_TCP_PORTS="22 25 53 80 465 443" | |||
REMOTE_UDP_PORTS="53" | |||
LOCAL_TCP_PORTS="22 80 443" | |||
# Regelwerk löschen | |||
iptables -F | |||
iptables -X | |||
iptables -t nat -F | |||
iptables -t nat -X | |||
# Default Policies | |||
iptables -P INPUT DROP | |||
iptables -P FORWARD DROP | |||
iptables -P OUTPUT DROP | |||
# Loopback erlauben | |||
iptables -A INPUT -i lo -j ACCEPT | |||
iptables -A OUTPUT -o lo -j ACCEPT | |||
# Etablierte Verbindungen | |||
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT | |||
iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT | |||
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT | |||
# Lokale Dienste (eingehend) | |||
for port in $LOCAL_TCP_PORTS; do | |||
iptables -A INPUT -p tcp --dport $port -j ACCEPT | |||
done | |||
# Ausgehende Verbindungen | |||
for port in $REMOTE_TCP_PORTS; do | |||
iptables -A OUTPUT -p tcp --dport $port -j ACCEPT | |||
done | |||
for port in $REMOTE_UDP_PORTS; do | |||
iptables -A OUTPUT -p udp --dport $port -j ACCEPT | |||
done | |||
# Logging | |||
iptables -A INPUT -j LOG --log-prefix "--iptables-drop-input--" | |||
iptables -A OUTPUT -j LOG --log-prefix "--iptables-drop-output--" | |||
iptables -A FORWARD -j LOG --log-prefix "--iptables-drop-forward--" | |||
</pre> | |||
= | = Forwarding = | ||
Damit Pakete weitergeleitet werden können, muss als erstes FORWARDING im Kernel aktiviert werden. | |||
== Aktivierung == | |||
'''echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf''' | |||
'''sysctl -p''' | |||
Version vom 12. April 2025, 20:36 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 aussen 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 vorneherein verstärkt mit Variablen arbeiten.
- Dies macht die Skripte universeller.
iptables-Skript
vim /etc/iptables.sh
#!/bin/bash
# Variablen
WAN_IF="ens18"
DMZ_IF="ens19"
LAN_IF="ens20"
LAN_NET="192.168.4.0/24"
REMOTE_TCP_PORTS="22 25 53 80 465 443"
REMOTE_UDP_PORTS="53"
LOCAL_TCP_PORTS="22 80 443"
# Regelwerk löschen
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
# Default Policies
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
# Loopback erlauben
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# Etablierte Verbindungen
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# Lokale Dienste (eingehend)
for port in $LOCAL_TCP_PORTS; do
iptables -A INPUT -p tcp --dport $port -j ACCEPT
done
# Ausgehende Verbindungen
for port in $REMOTE_TCP_PORTS; do
iptables -A OUTPUT -p tcp --dport $port -j ACCEPT
done
for port in $REMOTE_UDP_PORTS; do
iptables -A OUTPUT -p udp --dport $port -j ACCEPT
done
# Logging
iptables -A INPUT -j LOG --log-prefix "--iptables-drop-input--"
iptables -A OUTPUT -j LOG --log-prefix "--iptables-drop-output--"
iptables -A FORWARD -j LOG --log-prefix "--iptables-drop-forward--"
Forwarding
Damit Pakete weitergeleitet werden können, muss als erstes FORWARDING im Kernel aktiviert werden.
Aktivierung
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p
