Linux.iptables: Unterschied zwischen den Versionen

Aus OrgaMon Wiki
Zur Navigation springen Zur Suche springen
 
(37 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 und whrheitsgemäss die Wirklichkeit abgebildet haben. Ich stelle mir die Sache so vor:
== 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 18: Zeile 45:


== and-firewall ==
== and-firewall ==
<code>
<code>
#!/bin/bash
#!/bin/bash
#
#
#
#
# to-do
# to-do
# =====
# =====
#
#
# 1) umstellen auf /etc/init.d/skeleton
# 1) umstellen auf /etc/init.d/skeleton
# 2) ev. keepcon ein interface ppp0,ippp0 übergeben lassen, wenn
# 2) ev. keepcon ein interface ppp0,ippp0 übergeben lassen, wenn
#    der erste parameter leer ist
#    der erste parameter leer ist
#
#
#
#    
 
IPTABLES=/usr/sbin/iptables
IPTABLES=/usr/sbin/iptables
DEV_LOC=eth0
DEV_LOC=eth0
DEV_EXT=$2
DEV_EXT=$2
# DEV_EXT=dsl0
# DEV_EXT=dsl0
 
# Kernelmodule laden
# Kernelmodule laden
. /etc/rc.status
. /etc/rc.status
rc_reset
rc_reset
echo -n "Wolff firewall Rev. 1.000 device $2"
echo -n "Wolff firewall Rev. 1.000 device $2"
rc_status -v
rc_status -v
 
echo "1" > /proc/sys/net/ipv4/conf/$DEV_LOC/rp_filter
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_redirects
echo "0" > /proc/sys/net/ipv4/conf/$DEV_LOC/accept_source_route
echo "0" > /proc/sys/net/ipv4/conf/$DEV_LOC/accept_source_route
echo "0" > /proc/sys/net/ipv4/conf/$DEV_LOC/bootp_relay
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_LOC/log_martians
 
echo "1" > /proc/sys/net/ipv4/conf/$DEV_EXT/rp_filter
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_redirects
echo "0" > /proc/sys/net/ipv4/conf/$DEV_EXT/accept_source_route
echo "0" > /proc/sys/net/ipv4/conf/$DEV_EXT/accept_source_route
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  
 
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
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/icmp_ignore_bogus_error_responses
echo "1" > /proc/sys/net/ipv4/ip_dynaddr
echo "1" > /proc/sys/net/ipv4/ip_dynaddr
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/ip_forward  
 
 
# Zu Anfang alles verbieten (Default Policy)
# Zu Anfang alles verbieten (Default Policy)
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -P FORWARD ACCEPT
 
# Alle Regelketten, die sich noch im Speicher befinden könnten, löschen
# Alle Regelketten, die sich noch im Speicher befinden könnten, löschen
$IPTABLES -F
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -t nat -F
$IPTABLES -t mangle -F
$IPTABLES -t mangle -F
$IPTABLES -X
$IPTABLES -X
 
# Kernelmodule masq und forwarding aktivieren (dyn. IP vom Provider)
# Kernelmodule masq und forwarding aktivieren (dyn. IP vom Provider)
$IPTABLES -t nat -A POSTROUTING -o $DEV_EXT -j MASQUERADE
$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
$IPTABLES -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
 
# XML RPC
# XML RPC
$IPTABLES -t nat -A PREROUTING -i $DEV_EXT -p tcp --dport 3049 -j DNAT --to 192.168.115.34:3048
$IPTABLES -t nat -A PREROUTING -i $DEV_EXT -p tcp --dport 3049 -j DNAT --to 192.168.115.34:3048
 
# sewa3
# sewa3
$IPTABLES -t nat -A PREROUTING -i $DEV_EXT -p tcp --dport 8082 -j DNAT --to 192.168.115.34:5900
$IPTABLES -t nat -A PREROUTING -i $DEV_EXT -p tcp --dport 8082 -j DNAT --to 192.168.115.34:5900
 
# sewa4
# 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 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
$IPTABLES -t nat -A PREROUTING -i $DEV_EXT -p tcp --dport 8084 -j DNAT --to 192.168.115.35:5900
 
/etc/tcshape
/etc/tcshape
/etc/mac-filter.sh
/etc/mac-filter.sh
 
 
rc_exit
rc_exit
</code>
</code>


== Diagnose, Techniken ==
== Diagnose, Techniken ==
* Anzeigen aller aktueller Portumleitungen


  iptables -t nat -L -v -n
  iptables -t nat -L -v -n


* Bei der DROP Polyci etwas erlauben:


      Alle Arbeitsplatz-Rechner sicher und einfach ins InterNet zu bringen
<code>
      ist hierbei vorrangiges Ziel.
 
    a) Skript "myfirewall.sh" (in der Anlage sicherlich aktueller als dieser Snapshot)
      nach /root kopieren.
 
    --- snip
        # !/bin/bash
        IPTABLES=/usr/sbin/iptables
        DEV_LOC=eth0
        DEV_EXT=ppp0
        DNS_EXT=194.25.2.129
        # for IF in $DEV_LOC $DEV_EXT do
        # Kernelmodule laden
 
        echo "1" > /proc/sys/net/ipv4/conf/eth0/rp_filter
        echo "0" > /proc/sys/net/ipv4/conf/eth0/accept_redirects
        echo "0" > /proc/sys/net/ipv4/conf/eth0/accept_source_route
        echo "0" > /proc/sys/net/ipv4/conf/eth0/bootp_relay
        echo "1" > /proc/sys/net/ipv4/conf/eth0/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 "5" > /proc/sys/net/ipv4/icmp_destunreach_rate
        echo "5" > /proc/sys/net/ipv4/icmp_echoreply_rate
        echo "5" > /proc/sys/net/ipv4/icmp_paramprob_rate
        echo "10" > /proc/sys/net/ipv4/icmp_timeexceed_rate
 
        # 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 -X
 
        # Verbindungen f?r Testzwecke am eigenen Rechner ?ber das Loopback. Einige
        # lokale Prozesse wie BIND verwenden das Loopback f?r die interne Kommunikation
        $IPTABLES -A OUTPUT -o lo -j ACCEPT
        $IPTABLES -A INPUT -i lo -j ACCEPT
 
        # Alle externen Verbindungsversuche und ander Merkw?rdigkeiten werden hier
        # aufgefangen, im SYSLOG vermerkt und dann unsch?dlich gemacht
        $IPTABLES -N nirwana
        # $IPTABLES -A nirwana -p TCP -j LOG --log-prefix "NIRWANA: TCP "
        # $IPTABLES -A nirwana -p UDP -j LOG --log-prefix "NIRWANA: UDP "
        # $IPTABLES -A nirwana -p ICMP -j LOG --log-prefix "NIRWANA: ICMP "
        # $IPTABLES -A nirwana -p TCP -j DROP
 
        # Kernelmodule masq und forwarding aktivieren (dyn. IP vom Provider)
        echo "1" > /proc/sys/net/ipv4/ip_dynaddr
        echo "1" > /proc/sys/net/ipv4/ip_forward
        $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
 
        # F?e bestehenden ein- und ausgehenden Verbindungen. Dritte Regel
        # verhindert alle Verbindungen die Au᥮ kommen
        $IPTABLES -A FORWARD -i $DEV_LOC -o $DEV_EXT -m state --state ESTABLISHED,RELATED -j ACCEPT
        $IPTABLES -A FORWARD -i $DEV_EXT -o $DEV_LOC -m state --state ESTABLISHED,RELATED -j ACCEPT
        # $IPTABLES -A FORWARD -i $DEV_EXT -o $DEV_LOC -m state --state NEW,INVALID -j nirwana
 
        # Zugriff auf internen WEB-Server
        # $IPTABLES -A PREROUTING -t nat -p tcp -i $DEV_EXT --dport 80 -j DNAT --to 192.168.115.8:80
        $IPTABLES -t nat -A PREROUTING -i $DEV_EXT -p tcp --dport 80 -j DNAT --to 192.168.115.8:80
        $IPTABLES -t nat -A PREROUTING -i $DEV_EXT -p tcp --dport 5900 -j DNAT --to 192.168.115.1:5900
 
        # WinMx auf fred!
        $IPTABLES -t nat -A PREROUTING -i $DEV_EXT -p tcp --dport 6699 -j DNAT --to 192.168.115.3:6699
        $IPTABLES -t nat -A PREROUTING -i $DEV_EXT -p udp --dport 6257 -j DNAT --to 192.168.115.3:6257
 
        # Ping ins Internet erlauben, eingehende werden von der NIRWANA-Rule abgefangen
         $IPTABLES -A FORWARD -o $DEV_EXT -p ICMP --icmp-type echo-request -j ACCEPT
         $IPTABLES -A FORWARD -o $DEV_EXT -p ICMP --icmp-type echo-request -j ACCEPT


         # DNS
         # DNS
         $IPTABLES -A FORWARD -o $DEV_EXT -p tcp --sport 1024:65535 --dport domain -d $DNS_EXT -m state --state NEW -j ACCEPT
         $IPTABLES -A FORWARD -o $DEV_EXT -p tcp --sport 1024:65535 --dport domain -d $DNS_EXT -m state --state NEW -j ACCEPT
 
         # HTTP
         # 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 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
         # $IPTABLES -A FORWARD -o $DEV_EXT -p tcp --sport 1024:65535 --dport https -m state --state NEW -j ACCEPT
 
         # FTP
         # 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 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
         # $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
         # Alle Pakete, die bis hierher kommen nach nirwana
         $IPTABLES -A INPUT -j nirwana
         $IPTABLES -A INPUT -j nirwana
         $IPTABLES -A OUTPUT -j nirwana
         $IPTABLES -A OUTPUT -j nirwana
         $IPTABLES -A FORWARD -j nirwana
         $IPTABLES -A FORWARD -j nirwana
    --- snap
</code>
 
 
__zuk?s thema: lokales umlenken lokaler Port traffics. Z.b. aller verkehr aus dem Internet
    soll umgeleitet werden von "80" auf "8080".
 
        iptables -t nat -A PREROUTING -p tcp --dport 80 -i eth0 -j REDIRECT \
        --to-ports 8080
        iptables -t nat -A OUTPUT -p tcp --dport 80 -m owner \! --uid-owner 13 \
        -j REDIRECT --to-ports 8080
 
        Should work. I tested it on my own firewall, although I just tested it
        with netcat, not a real proxy.
 
        Locally generated packets don't go through the PREROUTING chain, so you
        have to manipulate them in OUTPUT, and you also have to differentiate
        them from the proxy's outgoing packets, hence the match against uid 13
        (proxy), taken from /etc/passwd.
 
        Unfortunately, you'll have to enable owner match support in your kernel
        for the second line to work, so you might have to recompile (it's one of
        the features labelled experimental).
 
          Jason
 
__zuk?s thema: Bandbreiten verteilung: siehe artikel in c't 01/03. Kommt aber
    sicher stablier ab "suse 8.2", das es kernel >2.4.19 erfordert.
 
    b) mit
 
      chmod 755 /root/myfirewall.sh
 
      macht man dieses Script ausf?. Nun starten ...
 
      /root/myfirewall.sh


    c) Automatischer Start der Firewall beim booten ...
* 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!


      Als root einloggen und folgende Zeilen eingeben:
== URL Filter zum Schutz vor ungewolltem Content ==


      ln -s /root/myfirewall.sh /etc/init.d/rc2.d/S30myfirewall <RETURN>
* http://www.squidguard.org/
      ln -s /root/myfirewall.sh /etc/init.d/rc3.d/S30myfirewall <RETURN>
* http://www.urlfilter.net/download/ipcop-urlfilter-1.9.3.tar.gz
      ln -s /root/myfirewall.sh /etc/init.d/rc5.d/S30myfirewall <RETURN>
* http://www.shallalist.de/


      fehlt noch: "K" links, myfirewall sollte echtes Script werden, das
== auf dem Labortisch ==
                  "start" und "stop" auswerten kann.


    d) Eintrag in /etc/rc.config 䮤ern: IP_FORWARD="no" auf "yes"
iptables -F INPUT
      Eintrag wirksam machen mit SuSEconfig
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

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";;