D
Hi Leute,
ich habe hier einen Server stehen auf dem Debian eingerichtet ist.
Auf diesem System wurde eine Firewall (via iptables) eingerichtet, die alle ports sperrt außer 22 (SSH) und 1194 OpenVPN.
Auf diesem Rechner würde jetzt ein VNC-Server installiert (Xvnc) der via inetd gestartet wird (entsprechender Eintrag in der inetd.conf sollte eigentlich korrekt sein).
Das Problem ist jetzt nur, dass, wenn die Firewall aktiviert ist und ich mich per OpenVPN eingewählt habe, ich zwar zum VNC-Server verbinden kann, aber der VNC-Server kann sich nicht zum X-Server verbinden.
Es gibt zwei Möglichkeiten, das Ganze zu lösen.
Die Schöne:
Das Hauptproblem das ich sehe, ist, dass Xvnc das eth0-Interface (wie ich darauf komme? s.u.) nimmt anstatt loopback. Kann ich dem nicht irgendwie sagen, welches Interface er verwenden soll, bzw dass er eben über 127.0.0.1 gehen soll?
Die Unschöne:
Wenn ich das richtig verstehe (s.u.) droppt die Firewall das ACK das vom X-Server gesendet wird.
Nur wieso?
Hier noch firewall-settings und ethereal-Mitschnitt mit und ohne Firewall:
Habe das Ganze mal per tethereal mitgeschnitten.
Kommandozeile:
tethereal -i any -f "port 6000 or port 6001 or port 6002 or port 6003 or port 6004"
Ergebnis wenn Firewall deaktiviert ist:
0.000000 <externe IP> -> <externe IP> TCP 40951 > x11-2 [SYN] Seq=0 Ack=0 W$
0.000787 <externe IP> -> <externe IP> TCP x11-2 > 40951 [SYN, ACK] Seq=0 Ac$
0.000838 <externe IP> -> <externe IP> TCP 40951 > x11-2 [ACK] Seq=1 Ack=1 W$
0.000955 <externe IP> -> <externe IP> X11 Initial connection request
0.000971 <externe IP> -> <externe IP> TCP x11-2 > 40951 [ACK] Seq=1 Ack=49 $
0.001112 <externe IP> -> <externe IP> X11 Initial connection reply
0.001121 <externe IP> -> <externe IP> TCP 40951 > x11-2 [ACK] Seq=49 Ack=14$
0.001250 <externe IP> -> <externe IP> X11 Requests: CreateGC, QueryExtensio$
0.001341 <externe IP> -> <externe IP> X11 Reply: QueryExtension, GetProperty
0.001419 <externe IP> -> <externe IP> X11 Requests: BIG-REQUESTS
0.001494 <externe IP> -> <externe IP> X11 Reply: BIG-REQUESTS
0.001569 <externe IP> -> <externe IP> X11 Requests: QueryExtension
0.001639 <externe IP> -> <externe IP> X11 Reply: QueryExtension
0.001919 <externe IP> -> <externe IP> X11 Requests: OpenFont, CreatePixmap,$
0.002027 <externe IP> -> <externe IP> X11 Error: BadValue, BadPixmap, BadVa$
0.002223 <externe IP> -> <externe IP> X11 Requests: CreateGlyphCursor, Chan$
0.038111 <externe IP> -> <externe IP> TCP 40952 > x11-2 [SYN] Seq=0 Ack=0 W$
0.038140 <externe IP> -> <externe IP> TCP x11-2 > 40952 [SYN, ACK] Seq=0 Ac$
0.038154 <externe IP> -> <externe IP> TCP 40952 > x11-2 [ACK] Seq=1 Ack=1 W$
usw...
Und wenn Firewall aktiviert ist:
0.000000 <externe IP> -> <externe IP> TCP 40954 > x11-3 [SYN] Seq=0 Ack=0 Win=32767 Len=0 MSS=16396 TSV=184819188 TSER=0 WS=0
2.999039 <externe IP> -> <externe IP> TCP 40954 > x11-3 [SYN] Seq=0 Ack=0 Win=32767 Len=0 MSS=16396 TSV=184822188 TSER=0 WS=0
8.998826 <externe IP> -> <externe IP> TCP 40954 > x11-3 [SYN] Seq=0 Ack=0 Win=32767 Len=0 MSS=16396 TSV=184828188 TSER=0 WS=0
Meine Firewall-Settings sehen so aus:
# A Sample OpenVPN-aware firewall.
INET_IFACE=eth0
LOCAL_IFACE=tun0
# Change this subnet to correspond to your private
# ethernet subnet. Home will use HOME_NET/24 and
# Office will use OFFICE_NET/24.
LOCAL_NET=10.0.0.0/16
# Loopback address
LOOP=127.0.0.1
# Delete old iptables rules
# and temporarily block all traffic.
iptables -P OUTPUT DROP
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -F
# Set default policies
iptables -P OUTPUT ACCEPT
iptables -P INPUT DROP
iptables -P FORWARD DROP
# Prevent external packets from using loopback addr
iptables -A INPUT -i $INET_IFACE -s $LOOP -j DROP
iptables -A FORWARD -i $INET_IFACE -s $LOOP -j DROP
iptables -A INPUT -i $INET_IFACE -d $LOOP -j DROP
iptables -A FORWARD -i $INET_IFACE -d $LOOP -j DROP
# Anything coming from the Internet should have a real Internet address
iptables -A FORWARD -i $INET_IFACE -s 192.168.0.0/16 -j DROP
iptables -A FORWARD -i $INET_IFACE -s 172.16.0.0/12 -j DROP
iptables -A FORWARD -i $INET_IFACE -s 10.0.0.0/8 -j DROP
iptables -A INPUT -i $INET_IFACE -s 192.168.0.0/16 -j DROP
iptables -A INPUT -i $INET_IFACE -s 172.16.0.0/12 -j DROP
iptables -A INPUT -i $INET_IFACE -s 10.0.0.0/8 -j DROP
# Block outgoing NetBios (if you have windows machines running
# on the private subnet). This will not affect any NetBios
# traffic that flows over the VPN tunnel, but it will stop
# local windows machines from broadcasting themselves to
# the internet.
iptables -A FORWARD -p tcp --sport 137:139 -o $INET_IFACE -j DROP
iptables -A FORWARD -p udp --sport 137:139 -o $INET_IFACE -j DROP
iptables -A OUTPUT -p tcp --sport 137:139 -o $INET_IFACE -j DROP
iptables -A OUTPUT -p udp --sport 137:139 -o $INET_IFACE -j DROP
# Check source address validity on packets going out to internet
iptables -A FORWARD -s ! $LOCAL_NET -i $LOCAL_IFACE -j DROP
# Allow local loopback
iptables -A INPUT -s $LOOP -j ACCEPT
iptables -A INPUT -d $LOOP -j ACCEPT
# Allow incoming pings (can be disabled)
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
# SSH und VPN erlauben
iptables -A INPUT -p udp --dport 1194 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Allow packets from private subnets
iptables -A INPUT -i $LOCAL_IFACE -j ACCEPT
iptables -A FORWARD -i $LOCAL_IFACE -j ACCEPT
# Keep state of connections from local machine and private subnets
iptables -A OUTPUT -m state --state NEW -o $INET_IFACE -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state NEW -o $INET_IFACE -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT