Linux.iptables: Unterschied zwischen den Versionen

Aus OrgaMon Wiki
Zur Navigation springen Zur Suche springen
Zeile 192: Zeile 192:
=== Hibakusha ===
=== Hibakusha ===


ist das Gateway inerhalb der DMZ, er ist mit dem Internet verbunden. Ich denke er macht ein ganz normales NAT, hierzu hat er eine zentrale Regel:
* ist das Gateway inerhalb der DMZ, er ist mit dem Internet verbunden. Ich denke er macht ein ganz normales NAT, hierzu hat er eine zentrale Regel:


  #
  #
Zeile 203: Zeile 203:
  #
  #
  $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
* Routing: Hierbei ist wichtig, dass im bekannt ist wohin er "Antworten" ans LAN schicken darf. Dabei ist ja Heiwakoen unser "Router"
Kernel IP routing table
Destination    Gateway        Genmask        Flags Metric Ref    Use Iface
217.5.98.1      *              255.255.255.255 UH    0      0        0 dsl0
192.168.2.0    *              255.255.255.0  U    0      0        0 eth1
192.168.1.0    *              255.255.255.0  U    0      0        0 eth0
192.168.115.0  192.168.1.2    255.255.255.0  UG    0      0        0 eth0
link-local      *              255.255.0.0    U    0      0        0 eth0
loopback        *              255.0.0.0      U    0      0        0 lo
default        *              0.0.0.0        U    0      0        0 dsl0


=== Heiwakoen ===
=== Heiwakoen ===

Version vom 31. März 2010, 16:56 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 von einem beliebigen Punkt im Netzwerk fernzuwarten. In meiner Konfiguration hängt das Modem an einer eigenen Netzwerkkaret des Servers. Dieser verpasse ich natürlich ein anderes Netzwerk. Um dennoch an das Web-Interface des Modems ranzukommen verwende ich folgende Regel:


iptables -t nat -A PREROUTING -i $DEV_LOC -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.1:80
iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE
  • $DEV_LOC ist die Netzwerkkarte deines "normalen" Netzwerkes
  • eth2 ist in diesem Fall die Netzwerkarte, an der das Modem hängt

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

Neues DMZ Konzept

Info zur Verwendung der japanischen Worte: Zur Erhaltung der Erinnerung an den Atombomben Abwurf von Hiroshima und in tiefen Respekt vor allen Opfern verwende ich folgende japanische Ausdrücke für Domänen und Hostnamen des Sicherungskonzeptes:

  • Hibakusha (Explosionsopfer) -> Host der dem Internet ausgesetzt ist
  • Heiwadori (Friedensallee) -> Domäne
  • Heiwakoen (Friedenspark) -> Host der den Router für das interne LAN darstellt

Skizze

DSL-Modem
  |
  |
  |
-eth1--------------------*
*                        *
* Host Hibakusha         * 
*                        * 
-eth0@.100-----------------
  |
  |
  |  192.168.1.0/255.255.255.0  (DMZ-Netz "Heiwadori")
  |
 -eth1@.2------------------
 *                       *
 * Host Heiwakoen        * 
 *                       *
 -eth0@.20-----------------
  |
  |
  | 192.168.115.0/255.255.255.0 (LAN-Netz "Lummerland")
  |
 **** Clients

Hibakusha

  • ist das Gateway inerhalb der DMZ, er ist mit dem Internet verbunden. Ich denke er macht ein ganz normales NAT, hierzu hat er eine zentrale Regel:
#
# anfragen aus dem lokalen Netz verfälschen dass es mit einer IP funktioniert
#
$IPTABLES -t nat -A POSTROUTING -o $DEV_EXT -j MASQUERADE

#
# Pakete neu stückeln, so dass das DSL Netz damit klar kommt
#
$IPTABLES -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu


  • Routing: Hierbei ist wichtig, dass im bekannt ist wohin er "Antworten" ans LAN schicken darf. Dabei ist ja Heiwakoen unser "Router"
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
217.5.98.1      *               255.255.255.255 UH    0      0        0 dsl0
192.168.2.0     *               255.255.255.0   U     0      0        0 eth1
192.168.1.0     *               255.255.255.0   U     0      0        0 eth0
192.168.115.0   192.168.1.2     255.255.255.0   UG    0      0        0 eth0
link-local      *               255.255.0.0     U     0      0        0 eth0
loopback        *               255.0.0.0       U     0      0        0 lo
default         *               0.0.0.0         U     0      0        0 dsl0

Heiwakoen

  • ist das Gateway für das normale LAN, er muss sich anfühlen wie ein normaler Router, dass hinter ihm die DMZ und der wirkliche Router steht soll das LAN natürlich nicht merken! Ich denke Heiwakoen macht den DHCPD für beide Netze.

Status

Problem: auf der Maschine selbst funktioniert das inet. Das LAN sieht Heiwakoen ja als Router an, Pakete mit "fremden" IPs landen bei diesem internen Router. Ich hatte gedacht der merkt das selbst, dass er diese Pakete an "sein" Gateway weiterleiten muss ...

  • erfolgloser Versuch:
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 192.168.1.2
  • erfolgreicher Versuch:

das Routing auf "Hibakasu" war falsch: Er fand keine Route mehr zurück ins LAN. Siehe den Auszug seiner korrekten Routing Tabelle!