Linux.iptables: Unterschied zwischen den Versionen
(34 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
iptables ist ein Paket-Gutachter der in den Kernel integriert ist. Es gibt viele Bildchen, die erklären wollen wie ein Paket durch den Kernel läuft. Ich habe aber bisher keines Verstanden | == Dein OpenSuse Linux als Router betreiben == | ||
=== zwei Netzwerk-Anschlusse === | |||
... deines Servers sind hilfreich, so ist das lokale Netz auch physikalisch vom Internet getrennt. Und laufen auf deinem Linux Server-Dienste (z.B. Samba) können diese Wunderbar nur auf dein Lokales Netzwerk gebunden werden. | |||
=== ein Modem, KEIN ROUTER === | |||
ähm - wir wollen der Router sein. Router-Kästchen und dahinter dein Linux-Server? Vergiss es. Zunächst brauchst Du ein T-DSL/ADSL/ADSL+/VDSL - Modem (z.B. Speedport 200 für bis zu ADSL+) das du an eine 2. Netzwerkkarte Deiner Linux-Kiste koppelst. Über die erste wird ja dein normales Netz betrieben. Du kannst aber auch ein moderneres Gerät als Modem misbrauchen den, so z.B. den DSL-Router "Speedport 500V" oder das "SINUS 1054 DSL" (WLAN abschalten!!!). | |||
Diese "modernen" habe 1000 Möglichkeiten, du musst es aber dann im PPPoE-Pass-Trough-Modus verwenden, und den ganzen schnick-schnack abschalten. | |||
==== Modem im eigenen Netz fernwarten ==== | |||
Oftmals entsteht der Wunsch das Modem/den Router von einem beliebigen Punkt im Netzwerk fernzuwarten. In meiner Konfiguration hängt das Modem an einer eigenen Netzwerkkarte. Dieser verpasse ich natürlich ein anderes Netzwerk. Um dennoch an das Web-Interface des Modems ranzukommen verwende ich folgende Regel: | |||
* eth0 sei die Netzwerkkarte deines "normalen" Netzwerkes | |||
* eth2 sei in diesem Fall die Netzwerkarte, an der das Modem hängt | |||
* das Webinterface veröffentlicht das Modem auf 192.168.1.1:80 | |||
echo "1" > /proc/sys/net/ipv4/ip_forward | |||
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.1:80 | |||
iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE | |||
== IP-Tables erledigt das NAT == | |||
iptables ist ein Paket-Gutachter der in den Kernel integriert ist. Es gibt viele Bildchen, die erklären wollen wie ein Paket durch den Kernel läuft. Ich habe aber bisher keines Verstanden das wahrheitsgemäss die Wirklichkeit abgebildet hätte. Ich stelle mir die Sache so vor: | |||
* Auf einem Laufband sieht der Kernel wie ALLE Pakete durch das System ziehen. Auf dem Adressaufkleber jedes Paketes sind diverse Eintragungen gemacht. iptables kann nun durch ein Regelwerk zu diversen Fälschungen an diesem Adressaufkleber gewzungen werden. iptables kann Pakete auch einfach vom Band kicken (DROP) oder dem versender mitteilen, dass die Annahme verweigert wurde (REJECT). | * Auf einem Laufband sieht der Kernel wie ALLE Pakete durch das System ziehen. Auf dem Adressaufkleber jedes Paketes sind diverse Eintragungen gemacht. iptables kann nun durch ein Regelwerk zu diversen Fälschungen an diesem Adressaufkleber gewzungen werden. iptables kann Pakete auch einfach vom Band kicken (DROP) oder dem versender mitteilen, dass die Annahme verweigert wurde (REJECT). | ||
Zeile 7: | Zeile 34: | ||
Typ | Typ | ||
Grösse | Grösse | ||
# Herkunft | # Herkunft | ||
Quell-IP Quell-Port | Quell-IP Quell-Port | ||
Quell-Interface | Quell-Interface | ||
# Ziel | # Ziel | ||
Ziel-IP Ziel-Port | Ziel-IP Ziel-Port | ||
Zeile 53: | Zeile 80: | ||
echo "0" > /proc/sys/net/ipv4/conf/$DEV_EXT/bootp_relay | echo "0" > /proc/sys/net/ipv4/conf/$DEV_EXT/bootp_relay | ||
echo "1" > /proc/sys/net/ipv4/conf/$DEV_EXT/log_martians | echo "1" > /proc/sys/net/ipv4/conf/$DEV_EXT/log_martians | ||
# done | # done | ||
Zeile 120: | Zeile 147: | ||
$IPTABLES -A FORWARD -j nirwana | $IPTABLES -A FORWARD -j nirwana | ||
</code> | </code> | ||
* Fraglich: IP_FORWARDING, muss das im Kernel extra aktiviert werden? Irgendwie gab es da bei mir schwierigkeiten. Mal sehen was die nächste Server-Installation dazu sagt! | |||
== URL Filter zum Schutz vor ungewolltem Content == | |||
* http://www.squidguard.org/ | |||
* http://www.urlfilter.net/download/ipcop-urlfilter-1.9.3.tar.gz | |||
* http://www.shallalist.de/ | |||
== auf dem Labortisch == | |||
iptables -F INPUT | |||
iptables -F OUTPUT | |||
iptables -F FORWARD | |||
iptables -F -t nat | |||
#Default Policys setzen | |||
iptables -P INPUT DROP | |||
iptables -P OUTPUT DROP | |||
iptables -P FORWARD DROP | |||
#SSH lokal erlauben | |||
iptables -A INPUT -p tcp --destination-port 22 -j ACCEPT | |||
iptables -A OUTPUT -p tcp --source-port 22 -j ACCEPT | |||
#DNS lokal erlauben | |||
iptables -A INPUT -p udp --sport 53 -j ACCEPT | |||
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT | |||
#HTTP lokal erlauben | |||
iptables -A INPUT -p tcp --sport 80 -j ACCEPT | |||
iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT | |||
#NTP lokal erlauben | |||
iptables -A INPUT -p udp --sport 123 -j ACCEPT | |||
iptables -A OUTPUT -p udp --dport 123 -j ACCEPT | |||
#HTML erlauben | |||
iptables -A FORWARD -p tcp --destination-port 80 -j ACCEPT | |||
iptables -A FORWARD -p tcp --source-port 80 -j ACCEPT | |||
#DNS erlauben | |||
iptables -A FORWARD -p udp --destination-port 53 -j ACCEPT | |||
iptables -A FORWARD -p udp --source-port 53 -j ACCEPT | |||
#VPN-Konfiguration | |||
iptables -A FORWARD -p udp --dport 500 -j ACCEPT | |||
iptables -A FORWARD -p udp --sport 500 -j ACCEPT | |||
iptables -A FORWARD -p udp --dport 10000 -j ACCEPT | |||
iptables -A FORWARD -p udp --sport 10000 -j ACCEPT | |||
iptables -A FORWARD -p tcp --dport 10000 -j ACCEPT | |||
iptables -A FORWARD -p tcp --sport 10000 -j ACCEPT | |||
iptables -A FORWARD -p udp --dport 4500 -j ACCEPT | |||
iptables -A FORWARD -p udp --sport 4500 -j ACCEPT | |||
iptables -A FORWARD -p 50 -j ACCEPT | |||
iptables -A FORWARD -p 51 -j ACCEPT | |||
iptables -t nat -A PREROUTING -i dsl0 -p udp --dport 500 -j DNAT --to 192.168.22.1:500 | |||
iptables -t nat -A PREROUTING -i dsl0 -p 50 -j DNAT --to 192.168.22.1 | |||
iptables -t nat -A PREROUTING -i dsl0 -p 51 -j DNAT --to 192.168.22.1 | |||
#Routing aktivieren | |||
iptables -t nat -A POSTROUTING -o dsl0 -j MASQUERADE | |||
#IP Forwarding aktivieren | |||
echo 1 > /proc/sys/net/ipv4/ip_forward | |||
#Ausgabe nach erfolgreichem Starten | |||
echo "Firewall gestartet";; |
Aktuelle Version vom 14. Oktober 2019, 11:53 Uhr
Dein OpenSuse Linux als Router betreiben
zwei Netzwerk-Anschlusse
... deines Servers sind hilfreich, so ist das lokale Netz auch physikalisch vom Internet getrennt. Und laufen auf deinem Linux Server-Dienste (z.B. Samba) können diese Wunderbar nur auf dein Lokales Netzwerk gebunden werden.
ein Modem, KEIN ROUTER
ähm - wir wollen der Router sein. Router-Kästchen und dahinter dein Linux-Server? Vergiss es. Zunächst brauchst Du ein T-DSL/ADSL/ADSL+/VDSL - Modem (z.B. Speedport 200 für bis zu ADSL+) das du an eine 2. Netzwerkkarte Deiner Linux-Kiste koppelst. Über die erste wird ja dein normales Netz betrieben. Du kannst aber auch ein moderneres Gerät als Modem misbrauchen den, so z.B. den DSL-Router "Speedport 500V" oder das "SINUS 1054 DSL" (WLAN abschalten!!!). Diese "modernen" habe 1000 Möglichkeiten, du musst es aber dann im PPPoE-Pass-Trough-Modus verwenden, und den ganzen schnick-schnack abschalten.
Modem im eigenen Netz fernwarten
Oftmals entsteht der Wunsch das Modem/den Router von einem beliebigen Punkt im Netzwerk fernzuwarten. In meiner Konfiguration hängt das Modem an einer eigenen Netzwerkkarte. Dieser verpasse ich natürlich ein anderes Netzwerk. Um dennoch an das Web-Interface des Modems ranzukommen verwende ich folgende Regel:
- eth0 sei die Netzwerkkarte deines "normalen" Netzwerkes
- eth2 sei in diesem Fall die Netzwerkarte, an der das Modem hängt
- das Webinterface veröffentlicht das Modem auf 192.168.1.1:80
echo "1" > /proc/sys/net/ipv4/ip_forward iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.1:80 iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE
IP-Tables erledigt das NAT
iptables ist ein Paket-Gutachter der in den Kernel integriert ist. Es gibt viele Bildchen, die erklären wollen wie ein Paket durch den Kernel läuft. Ich habe aber bisher keines Verstanden das wahrheitsgemäss die Wirklichkeit abgebildet hätte. Ich stelle mir die Sache so vor:
- Auf einem Laufband sieht der Kernel wie ALLE Pakete durch das System ziehen. Auf dem Adressaufkleber jedes Paketes sind diverse Eintragungen gemacht. iptables kann nun durch ein Regelwerk zu diversen Fälschungen an diesem Adressaufkleber gewzungen werden. iptables kann Pakete auch einfach vom Band kicken (DROP) oder dem versender mitteilen, dass die Annahme verweigert wurde (REJECT).
- Einzelne Zeilen des Adressaufkleber sind:
# Inhaltsinfo Typ Grösse # Herkunft Quell-IP Quell-Port Quell-Interface # Ziel Ziel-IP Ziel-Port Ziel-Interface
and-firewall
#!/bin/bash
#
#
# to-do
# =====
#
# 1) umstellen auf /etc/init.d/skeleton
# 2) ev. keepcon ein interface ppp0,ippp0 übergeben lassen, wenn
# der erste parameter leer ist
#
#
IPTABLES=/usr/sbin/iptables
DEV_LOC=eth0
DEV_EXT=$2
# DEV_EXT=dsl0
# Kernelmodule laden
. /etc/rc.status
rc_reset
echo -n "Wolff firewall Rev. 1.000 device $2"
rc_status -v
echo "1" > /proc/sys/net/ipv4/conf/$DEV_LOC/rp_filter
echo "0" > /proc/sys/net/ipv4/conf/$DEV_LOC/accept_redirects
echo "0" > /proc/sys/net/ipv4/conf/$DEV_LOC/accept_source_route
echo "0" > /proc/sys/net/ipv4/conf/$DEV_LOC/bootp_relay
echo "1" > /proc/sys/net/ipv4/conf/$DEV_LOC/log_martians
echo "1" > /proc/sys/net/ipv4/conf/$DEV_EXT/rp_filter
echo "0" > /proc/sys/net/ipv4/conf/$DEV_EXT/accept_redirects
echo "0" > /proc/sys/net/ipv4/conf/$DEV_EXT/accept_source_route
echo "0" > /proc/sys/net/ipv4/conf/$DEV_EXT/bootp_relay
echo "1" > /proc/sys/net/ipv4/conf/$DEV_EXT/log_martians
# done
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
echo "1" > /proc/sys/net/ipv4/ip_dynaddr
echo "1" > /proc/sys/net/ipv4/ip_forward
# Zu Anfang alles verbieten (Default Policy)
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT
# Alle Regelketten, die sich noch im Speicher befinden könnten, löschen
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -t mangle -F
$IPTABLES -X
# Kernelmodule masq und forwarding aktivieren (dyn. IP vom Provider)
$IPTABLES -t nat -A POSTROUTING -o $DEV_EXT -j MASQUERADE
$IPTABLES -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
# XML RPC
$IPTABLES -t nat -A PREROUTING -i $DEV_EXT -p tcp --dport 3049 -j DNAT --to 192.168.115.34:3048
# sewa3
$IPTABLES -t nat -A PREROUTING -i $DEV_EXT -p tcp --dport 8082 -j DNAT --to 192.168.115.34:5900
# sewa4
$IPTABLES -t nat -A PREROUTING -i $DEV_EXT -p tcp --dport 8083 -j DNAT --to 192.168.115.35:80
$IPTABLES -t nat -A PREROUTING -i $DEV_EXT -p tcp --dport 8084 -j DNAT --to 192.168.115.35:5900
/etc/tcshape
/etc/mac-filter.sh
rc_exit
Diagnose, Techniken
- Anzeigen aller aktueller Portumleitungen
iptables -t nat -L -v -n
- Bei der DROP Polyci etwas erlauben:
$IPTABLES -A FORWARD -o $DEV_EXT -p ICMP --icmp-type echo-request -j ACCEPT
# DNS
$IPTABLES -A FORWARD -o $DEV_EXT -p tcp --sport 1024:65535 --dport domain -d $DNS_EXT -m state --state NEW -j ACCEPT
# HTTP
$IPTABLES -A FORWARD -o $DEV_EXT -p tcp --sport 1024:65535 --dport http -m state --state NEW -j ACCEPT
# $IPTABLES -A FORWARD -o $DEV_EXT -p tcp --sport 1024:65535 --dport https -m state --state NEW -j ACCEPT
# FTP
# $IPTABLES -A FORWARD -o $DEV_EXT -p tcp --sport 1024:65535 --dport ftp -m state --state NEW -j ACCEPT
# $IPTABLES -A FORWARD -o $DEV_EXT -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state NEW -j ACCEPT
# Alle Pakete, die bis hierher kommen nach nirwana
$IPTABLES -A INPUT -j nirwana
$IPTABLES -A OUTPUT -j nirwana
$IPTABLES -A FORWARD -j nirwana
- Fraglich: IP_FORWARDING, muss das im Kernel extra aktiviert werden? Irgendwie gab es da bei mir schwierigkeiten. Mal sehen was die nächste Server-Installation dazu sagt!
URL Filter zum Schutz vor ungewolltem Content
- http://www.squidguard.org/
- http://www.urlfilter.net/download/ipcop-urlfilter-1.9.3.tar.gz
- http://www.shallalist.de/
auf dem Labortisch
iptables -F INPUT iptables -F OUTPUT iptables -F FORWARD iptables -F -t nat #Default Policys setzen iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP #SSH lokal erlauben iptables -A INPUT -p tcp --destination-port 22 -j ACCEPT iptables -A OUTPUT -p tcp --source-port 22 -j ACCEPT #DNS lokal erlauben iptables -A INPUT -p udp --sport 53 -j ACCEPT iptables -A OUTPUT -p udp --dport 53 -j ACCEPT #HTTP lokal erlauben iptables -A INPUT -p tcp --sport 80 -j ACCEPT iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT #NTP lokal erlauben iptables -A INPUT -p udp --sport 123 -j ACCEPT iptables -A OUTPUT -p udp --dport 123 -j ACCEPT #HTML erlauben iptables -A FORWARD -p tcp --destination-port 80 -j ACCEPT iptables -A FORWARD -p tcp --source-port 80 -j ACCEPT
#DNS erlauben iptables -A FORWARD -p udp --destination-port 53 -j ACCEPT iptables -A FORWARD -p udp --source-port 53 -j ACCEPT #VPN-Konfiguration iptables -A FORWARD -p udp --dport 500 -j ACCEPT iptables -A FORWARD -p udp --sport 500 -j ACCEPT iptables -A FORWARD -p udp --dport 10000 -j ACCEPT iptables -A FORWARD -p udp --sport 10000 -j ACCEPT iptables -A FORWARD -p tcp --dport 10000 -j ACCEPT iptables -A FORWARD -p tcp --sport 10000 -j ACCEPT iptables -A FORWARD -p udp --dport 4500 -j ACCEPT iptables -A FORWARD -p udp --sport 4500 -j ACCEPT iptables -A FORWARD -p 50 -j ACCEPT iptables -A FORWARD -p 51 -j ACCEPT iptables -t nat -A PREROUTING -i dsl0 -p udp --dport 500 -j DNAT --to 192.168.22.1:500 iptables -t nat -A PREROUTING -i dsl0 -p 50 -j DNAT --to 192.168.22.1 iptables -t nat -A PREROUTING -i dsl0 -p 51 -j DNAT --to 192.168.22.1 #Routing aktivieren iptables -t nat -A POSTROUTING -o dsl0 -j MASQUERADE #IP Forwarding aktivieren echo 1 > /proc/sys/net/ipv4/ip_forward #Ausgabe nach erfolgreichem Starten echo "Firewall gestartet";;