iptables - Traffic an einem Interface NICHT filtern

Rund um die Sicherheit des Systems und die Applikationen
Post Reply
Anonymous
 

iptables - Traffic an einem Interface NICHT filtern

Post by Anonymous »

Hallo,
ich habe mir in den letzten Tagen eine Rootserver zusammengeschraubt, auf dem ein VMWare Server, OpenVPN und SSH läuft.
Nach aussen hin hat dieser Server keine offenen Ports. Man muss sich per VPN verbinden, um an SSH oder die VMWare Konsole zu kommen.
Das gaze Konzept klappt einwandfrei und besser, als ich gedacht habe. Jeder andere Traffic wird erstmal rigoros geblockt.

Jetzt hab ich aber das Problem, dass die VMWare Gastsysteme auch noch Traffic bekommen sollen. Und diesen möglichst ungefiltert. Die Gastsysteme sollen selber für ihre Sicherheit verantwortlich sein. Dann muss ich nicht immer an 30 Ecken gleichzeitig was umstellen, falls Änderungen gemacht werden sollen. Jedes Gastsystem ist mit dem Host über ein hostonly Netzwerk verbunden und ich versuche momentan den Traffic, der an bestimmten IPs ankommt an die Gastsysteme weiterzuleiten. Der wird aber immer geblockt.

Ich hab noch nicht so viel mit iptables gemacht. Höchstens mal nen Paketfilter, aber das da geht schon über mein Wissen hinaus. Habt ihr da einen Vorschlag, wie man das realisieren kann?
Mein erster Ansatz war, alles, was von/zu vmnet1 geht einfach an die ACCEPT Chain weiterzuleiten. Das scheint aber auch nicht viel zu bringen...

Hier ist das momentane Script dazu:

Code: Select all

    # 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

    # OPENVPN auf eth0
    iptables -A INPUT -i eth0 -m state --state NEW -p udp --dport 1194 -j ACCEPT

    # SSH von OpenVPN aus
    iptables -A INPUT -i tun+ -p tcp -m state --state NEW -m tcp --dport 222 -j ACCEPT

    # VMWare Console von OpenVPN aus
    iptables -A INPUT -i tun+ -p tcp -m state --state NEW -m tcp --dport 902 -j ACCEPT

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

    # OpenVPN Forwarding
    iptables -A INPUT   -i tun+ -j ACCEPT
    iptables -A FORWARD -i tun+ -j ACCEPT
    iptables -A OUTPUT  -o tun+ -j ACCEPT
    iptables -A FORWARD -o tun+ -j ACCEPT

    # Forwarding für VMWare Clients
    #Windows
    iptables -t nat -I PREROUTING -d 78.xxx.xxx.xxx -j DNAT --to 192.168.243.128
    iptables -t nat -I POSTROUTING -s 192.168.243.128 -j SNAT --to 78.xxx.xxx.xxx
    #Linux
    iptables -t nat -I PREROUTING -d 78.xxx.xxx.xxx -j DNAT --to 192.168.243.129
    iptables -t nat -I POSTROUTING -s 192.168.243.129 -j SNAT --to 78.xxx.xxx.xxx

    # Traffic von/zu vmnet1 erlauben
    iptables -A INPUT -i vmnet1 -j ACCEPT
    iptables -A OUTPUT -o vmnet1 -j ACCEPT
    iptables -A FORWARD -i vmnet1 -j ACCEPT
    iptables -A FORWARD -o vmnet1 -j ACCEPT

    # 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
Ein Ping aus einer der VMs sieht momentan so im Logfile vom Wirtssystem aus:

Code: Select all

Apr 17 21:47:59 virthost DROP ICMP IN=vmnet1 OUT= MAC=00:50:56:c0:00:01:00:0c:29:81:a4:e0:08:00 SRC=192.168.243.128 DST=192.168.243.1 LEN=60 TOS=0x00 PREC=0x00 TTL=128 ID=112 PROTO=ICMP TYPE=8 CODE=0 ID=1 SEQ=2
Apr 17 21:48:03 virthost REJECT UDP IN=vmnet1 OUT= MAC=00:50:56:c0:00:01:00:0c:29:81:a4:e0:08:00 SRC=192.168.243.128 DST=192.168.243.1 LEN=55 TOS=0x00 PREC=0x00 TTL=128 ID=113 PROTO=UDP SPT=61090 DPT=53 LEN=35
Apr 17 21:48:04 virthost REJECT UDP IN=vmnet1 OUT= MAC=00:50:56:c0:00:01:00:0c:29:81:a4:e0:08:00 SRC=192.168.243.128 DST=192.168.243.1 LEN=55 TOS=0x00 PREC=0x00 TTL=128 ID=114 PROTO=UDP SPT=61090 DPT=53 LEN=35
Apr 17 21:48:05 virthost REJECT UDP IN=vmnet1 OUT= MAC=00:50:56:c0:00:01:00:0c:29:81:a4:e0:08:00 SRC=192.168.243.128 DST=192.168.243.1 LEN=55 TOS=0x00 PREC=0x00 TTL=128 ID=115 PROTO=UDP SPT=61090 DPT=53 LEN=35
Apr 17 21:48:07 virthost REJECT UDP IN=vmnet1 OUT= MAC=00:50:56:c0:00:01:00:0c:29:81:a4:e0:08:00 SRC=192.168.243.128 DST=192.168.243.1 LEN=55 TOS=0x00 PREC=0x00 TTL=128 ID=116 PROTO=UDP SPT=61090 DPT=53 LEN=356
Anonymous
 

Re: iptables - Traffic an einem Interface NICHT filtern

Post by Anonymous »

Hast du denn nur eine IP?
Anonymous
 

Re: iptables - Traffic an einem Interface NICHT filtern

Post by Anonymous »

Nein... 7.
Ich habs jetzt anders gemacht... Die Sicherheitsrelevanten Dienste lauschen jetzt nur noch auf der IP vom OpenVPN tun Device.
Und die restlichen Firewallfunktionen hab ich rausgeworfen. Iptables leitet jetzt nur noch Traffic weiter.
Bins endgültig leid gewesen.
Post Reply