PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Iptables + VPN?



anubis01
06.09.03, 09:05
Hallo,

ich habe vor mein WLAN durch ein VPN abzusichern! Mein Access-Point ist an meinem Server angeschlossen auf dem der VPN-Server (FreeS/Wan Ipsec mit x509 Patch) laeuft. Um genau zu sein, ist mein AP an eth1 angeschlossen und eth0 an einen Switch.

Ziel der Firewall ist es, nur VPN-Connections raus und rein zu lassen (also bei eth1)! Doch so wie ich meine Firewall bis jetzt konfiguriert habe, scheint das nicht zu klappen.

So wie iptables bis jetzt konfiguriert ist, kann man zwar einen VPN-Tunnel herstellen, ich kann dann auch z.b. den Router pingen der in einem anderem Adressbereich ist! Aber bevor ich mich mit dem VPN-Server verbinde kann ich z.b. SSH auf dem Server benutzen oder Samba (Filesharing) - und das soll ja nicht der Fall sein.

Nach intern soll das Gateway alles bereitstellen (etho) und sich pingen lassen, von extern (eth1) sollen nur die VPN ports offen sein.

Hier mal mein Netzplan:

Internet --- Router (192.168.6.1) --- Switch --- Server (eth1 mit 192.168.5.1 an Access-Point und eth0 mit 192.168.6.4 an Switch).

Hier mal mein Iptables-Script:



#!/bin/bash

case "$1" in
start)
echo "Starte IP-Paketfilter"

# iptables-Modul
modprobe ip_tables
# Connection-Tracking-Module
modprobe ip_conntrack
# Das Modul ip_conntrack_irc ist erst bei Kerneln >= 2.4.19 verfuegbar
modprobe ip_conntrack_irc
modprobe ip_conntrack_ftp

# Tabelle flushen
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -t nat -X
iptables -t mangle -X

# Default-Policies setzen
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

# MY_REJECT-Chain
iptables -N MY_REJECT

# MY_REJECT fuellen
iptables -A MY_REJECT -p tcp -m limit --limit 7200/h -j LOG --log-prefix "REJECT TCP "
iptables -A MY_REJECT -p tcp -j REJECT --reject-with tcp-reset
iptables -A MY_REJECT -p udp -m limit --limit 7200/h -j LOG --log-prefix "REJECT UDP "
iptables -A MY_REJECT -p udp -j REJECT --reject-with icmp-port-unreachable
iptables -A MY_REJECT -p icmp -m limit --limit 7200/h -j LOG --log-prefix "DROP ICMP "
iptables -A MY_REJECT -p icmp -j DROP
iptables -A MY_REJECT -m limit --limit 7200/h -j LOG --log-prefix "REJECT OTHER "
iptables -A MY_REJECT -j REJECT --reject-with icmp-proto-unreachable

# MY_DROP-Chain
iptables -N MY_DROP
iptables -A MY_DROP -m limit --limit 7200/h -j LOG --log-prefix "PORTSCAN DROP "
iptables -A MY_DROP -j DROP

# Alle verworfenen Pakete protokollieren
iptables -A INPUT -m state --state INVALID -m limit --limit 7200/h -j LOG --log-prefix "INPUT INVALID "
iptables -A OUTPUT -m state --state INVALID -m limit --limit 7200/h -j LOG --log-prefix "OUTPUT INVALID "

# Korrupte Pakete zurueckweisen
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A OUTPUT -m state --state INVALID -j DROP

# Stealth Scans etc. DROPpen
# Keine Flags gesetzt
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j MY_DROP

# SYN und FIN gesetzt
iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j MY_DROP

# SYN und RST gleichzeitig gesetzt
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j MY_DROP

# FIN und RST gleichzeitig gesetzt
iptables -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j MY_DROP

# FIN ohne ACK
iptables -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j MY_DROP

# PSH ohne ACK
iptables -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j MY_DROP

# URG ohne ACK
iptables -A INPUT -p tcp --tcp-flags ACK,URG URG -j MY_DROP

# Loopback-Netzwerk-Kommunikation zulassen
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# Connection-Tracking aktivieren
iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# IPSEC
iptables -A INPUT -i eth1 -p 50 -j ACCEPT
iptables -A INPUT -i eth1 -p 51 -j ACCEPT
iptables -A INPUT -i eth1 -m state --state NEW -p udp --dport 500 -j ACCEPT

# LAN-Zugriff auf eth0
iptables -A INPUT -m state --state NEW -i eth0 -j ACCEPT

# LAN-Zugriff auf eth1
iptables -A INPUT -m state --state NEW -i eth1 -j ACCEPT

# Traffic rein und rauslassen auf eth1
iptables -A INPUT -s 192.168.5.0/24 -j ACCEPT
iptables -A OUTPUT -d 192.168.5.0/24 -j ACCEPT

# Routing
echo 1 > /proc/sys/net/ipv4/ip_forward 2> /dev/null

# Forward Pakete von IPSEC zu eth0
iptables -A FORWARD -i ipsec+ -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o ipsec+ -j ACCEPT

# Default-Policies mit REJECT
iptables -A INPUT -j MY_REJECT
iptables -A OUTPUT -j MY_REJECT

# SYN-Cookies
echo 1 > /proc/sys/net/ipv4/tcp_syncookies 2> /dev/null

# Stop Source-Routing
for i in /proc/sys/net/ipv4/conf/*; do echo 0 > $i/accept_source_route 2> /dev/null; done

# Stop Redirecting
for i in /proc/sys/net/ipv4/conf/*; do echo 0 > $i/accept_redirects 2> /dev/null; done

# Reverse-Path-Filter
# Auskommentiert, da IPSEC mit RP_Filter nicht funktioniert!
# for i in /proc/sys/net/ipv4/conf/*; do echo 2 > $i/rp_filter 2> /dev/null; done

# Log Martians
for i in /proc/sys/net/ipv4/conf/*; do echo 1 > $i/log_martians 2> /dev/null; done

# BOOTP-Relaying ausschalten
for i in /proc/sys/net/ipv4/conf/*; do echo 0 > $i/bootp_relay 2> /dev/null; done

# Proxy-ARP ausschalten
for i in /proc/sys/net/ipv4/conf/*; do echo 0 > $i/proxy_arp 2> /dev/null; done

# Ungültige ICMP-Antworten ignorieren
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses 2> /dev/null

# ICMP Echo-Broadcasts ignorieren
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts 2> /dev/null

# Max. 500/Sekunde (5/Jiffie) senden
echo 5 > /proc/sys/net/ipv4/icmp_ratelimit

# Speicherallozierung und -timing für IP-De/-Fragmentierung
echo 262144 > /proc/sys/net/ipv4/ipfrag_high_thresh
echo 196608 > /proc/sys/net/ipv4/ipfrag_low_thresh
echo 30 > /proc/sys/net/ipv4/ipfrag_time

# TCP-FIN-Timeout zum Schutz vor DoS-Attacken setzen
echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout

# Maximal 3 Antworten auf ein TCP-SYN
echo 3 > /proc/sys/net/ipv4/tcp_retries1

# TCP-Pakete maximal 15x wiederholen
echo 15 > /proc/sys/net/ipv4/tcp_retries2

;;

stop)
echo "Stoppe IP-Paketfilter"
# Tabelle flushen
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -t nat -X
iptables -t mangle -X
echo "Deaktiviere IP-Routing"
echo 0 > /proc/sys/net/ipv4/ip_forward

# Default-Policies setzen
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
;;

status)
echo "Tabelle filter"
iptables -L -vn
echo "Tabelle nat"
iptables -t nat -L -vn
echo "Tabelle mangle"
iptables -t mangle -L -vn
;;

*)
echo "Fehlerhafter Aufruf"
echo "Syntax: $0 {start|stop|status}"
exit 1
;;

esac


Vielleicht koennt ihr was entdecken...ich zumindest mit ratlos...

Gruss,

- Anubis

anubis01
07.09.03, 09:19
Findet keiner was? :confused: :(

Gruss,

- Anubis

klemens
07.09.03, 09:54
# LAN-Zugriff auf eth1
iptables -A INPUT -m state --state NEW -i eth1 -j ACCEPT

ich würd meinen, das erlaubt zu viel. -
in zusammenhang mit

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT (weiter oben)

müsste da alles durchkommen.

anubis01
07.09.03, 10:20
Original geschrieben von klemens
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT (weiter oben)

müsste da alles durchkommen.

Wie meinst du das?

Ich moechte ja gerade das da nichts durchkommt ausser eine VPN-Connection! eth0 soll total offen sein hin zum LAN...

EDIT:

Ich sollte vielleicht dazu sagen, dass wenn die WLAN-Clients eine Verbindung aufgebaut haben, sollten sie in der Lage sein, alles nutzen zu koennen + das Internet...

Gruss,

- Anubis

klemens
07.09.03, 10:24
Mit

iptables -A INPUT -m state --state NEW -i eth1 -j ACCEPT

lässt Du alle gültigen Verbindunden auf eth1 eröffnen
Die Verbindung ist dann established und wird mit

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

durchgelassen.

anubis01
07.09.03, 10:48
Und was empfiehlst du mir zu machen?

Im Moment ist es ja so, das so ziemlich alles durchgelassen wird...ich will aber das nur IPSEC Verbindungen durchgelassen werden!

Gruss,

- Anubis

klemens
07.09.03, 12:56
Möcht jetzt ehrlich gesagt nicht die ganze Firewall durch gehen ... Mir ist die eine Lücke aufgefallen - die würde ich einmal schliessen!

z.b.
iptables -A INPUT -m state --state NEW -i eth1 -j ACCEPT
einfach raustun.

Die ipsec-Verbindung ist ja schon erlaubt. (btw. verwendet ipsec nicht -p gre oder ist das nur mit pptp so? )

# Traffic rein und rauslassen auf eth1
iptables -A INPUT -s 192.168.5.0/24 -j ACCEPT
iptables -A OUTPUT -d 192.168.5.0/24 -j ACCEPT

Das 192.168.5.0 Netz darf offensichtlich auch recht viel ;)

anubis01
07.09.03, 13:19
# Traffic rein und rauslassen auf eth1
iptables -A INPUT -s 192.168.5.0/24 -j ACCEPT
iptables -A OUTPUT -d 192.168.5.0/24 -j ACCEPT

Das 192.168.5.0 Netz darf offensichtlich auch recht viel

Wie muesste das heissen, dass in diesem Netz nur ueber den VPN - Port Leute reinkommen? Ausserdem, welche Einstellung muss ich machen, dass nur Pakete vom VPN-Port an eth0 weitergeleitet wird?

eth1 (192.168.5.1) = mit dem Access-Point verbunden
eth0 (192.168.6.4) = mit dem Switch verbunden


btw. verwendet ipsec nicht -p gre oder ist das nur mit pptp so?

Ich denke das ist nur bei pptp so...zumindest hoffe ich es! :rolleyes:

Gruss,

- Anubis

klemens
07.09.03, 13:43
Mach einmal einen Schritt zur Seite - ich glaub, du stehst auf der Leitung ;)

Du schliesst eth1 ja mit -P DROP in den INPUT, OUTPUT u. FORWARD -Ketten

Dann öffnest Du eth1 für alle, und für das 192.168.5 Netz gleich nochmals ;)

Tu die Dinger weg, dann ist die Tür zu.

Die IPSEC-Regeln sollten ja IPSEC durchlassen ;) - ob, die so stimmen - da muss ich leider passen - weiss ich nicht.

anubis01
07.09.03, 13:49
Sorry...steh gerade wirklich voll auf der Leitung! :(

Zudem bin ich ein totaler Neuanfaenger was iptables angeht...

Nochmal fuer mich:

# Traffic rein und rauslassen auf eth1
iptables -A INPUT -s 192.168.5.0/24 -j ACCEPT
iptables -A OUTPUT -d 192.168.5.0/24 -j ACCEPT

--> loeschen

"Du schliesst eth1 ja mit -P DROP in den INPUT, OUTPUT u. FORWARD -Ketten "

Soll ich das auch loeschen und was genau??

Gruss,

- Anubis

klemens
07.09.03, 13:56
# Traffic rein und rauslassen auf eth1 iptables -A INPUT -s 192.168.5.0/24 -j ACCEPT iptables -A OUTPUT -d 192.168.5.0/24 -j ACCEPT --> loeschen

ja

Das mit DROP gehört so - da brauchst nichts ändern.


Ich bin jetzt weg -> Hinterlasse Dir einmal eine URL - da ist iptables recht gut erklärt.
http://www.pl-forum.de/t_netzwerk/iptables.html

anubis01
07.09.03, 15:20
OK...hab das jetzt mal gemacht...hat aber nicht geholfen!

Ich schau mir mal die Seite an...

Gruss,

- Anubis

klemens
07.09.03, 21:08
Original geschrieben von anubis01
OK...hab das jetzt mal gemacht...hat aber nicht geholfen!

Wie hats nicht geholfen? -- kannst jetzt noch immer per ssh usw. verbinden oder geht jetzt gar nichts?

anubis01
08.09.03, 17:10
Hallo,

habe diese Zeilen jetzt mal so veraendert (sonst alles gleich):

# IPSEC
iptables -A INPUT -i eth1 -p 50 -j ACCEPT
iptables -A INPUT -i eth1 -p 51 -j ACCEPT
iptables -A INPUT -i eth1 -p udp --sport 500 --dport 500 -j ACCEPT

# LAN-Zugriff auf eth0
iptables -A INPUT -m state --state NEW -i eth0 -j ACCEPT

# Forward Pakete vom LAN zu IPSEC
iptables -A FORWARD -i ipsec+ -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o ipsec+ -j ACCEPT

# Routing
echo 1 > /proc/sys/net/ipv4/ip_forward 2> /dev/null

Mit dieser Config komme ich jetzt per Tunnel auf das Internet. Pingen/Files/SSH geht aber jetzt nicht mehr auf dem Server ueber eth1! Hauptsache das Internet funktioniert jetzt mal sicher mit dem Tunnel...

Welche Ports (?) muesste ich freigeben, dass man nachdem ein Tunnel ueber die Ports 50, 51, 500 hergestellt wurde, dass ich Files auf meinem Server abrufen kann + ssh (natuerlich ueber den VPN-Tunnel das alles sicher ist!

Gruss,

Anubis

klemens
08.09.03, 17:29
Wenn der Tunnel einmal erstellt ist - und wie du sagst ipsec+ funktioniert, dann gib das auch über ipsec+ frei:

iptables -A INPUT -p tcp --dport 22 -d ipsec+ -j ACCEPT
(vielleicht auch noch iptables -A OUTPUT -s ipsec+ -j ACCEPT - sollte dann aber als established gelten)

anubis01
09.09.03, 19:26
Hab jetzt eine andere Loesung gefunden und diese funktioniert nun super...

Habe einfach noch eine Rule eingefuehrt die zulaesst, das am Ende des Tunnels alles erlaubt ist!

Gruss,

Anubis