Wurstpelle
07.05.10, 19:44
Hallo,
ich habe für unser Firmennetzwerk einen transparenten Proxy für unseren Web-Zugang eingerichtet, der mit einem Squid3 den Web-Traffic reglementiert (Black- und Whitelists) und somit "verbotene" Websites aussperrt. Die iptables lenken Port 80 auf Squid und schaltet ansonsten auf Durchzug (unten mein Boot-Skript).
Mittlerweile haben die ersten Schlaumeier sich bereits eigene root-Server als Proxy eingerichtet und surfen nun wieder von ihrem Arbeitsplatz nach belieben in der Weltgeschichte rum. (bitte nun aber keine juristischen Tipps. Ich weiss selbst dass man derartige Sabotage abmahnen kann - in dieser Anfrage geht es mir jedoch rein um die technischen Möglichkeiten)
Mein Problem: zwar kann ich derartige Surf-Proxies per iptables kappen, aber hierzu muss ich ja erst mal erkennen dass so ein Proxy genutzt wird. Da wir auch beruflich auf zahlreichen externen Servern per SSH drauf müssen, ist es schwer herauszufinden, ob ein Mitarbeiter einen Kundenserver betreut oder z.B. 443 als Surf-Proxy nutzt. Daher zwei Fragen:
a) wie kann ich effizient solche Surf-Proxies erkennen?
und
b) wenn ich einen solchen Host per "iptables –I OUTPUT –s 1.2.3.4 –j DROP" aussperre, so habe ich beobachtet dass ich trotzdem diesen Rechner noch pingen oder mich per SCP einloggen kann. Ich würde gerne die Kommunikation komplett(!) unterbinden. Mache ich bei den iptables was falsch?
Für Hinweise bin ich dankbar.
#!/bin/sh
# squid server IP
SQUID_SERVER="192.168.0.250"
# Interface connected to Internet
INTERNET="eth1"
# Interface connected to LAN
LAN_IN="eth0"
# Squid port
SQUID_PORT="3128"
# DO NOT MODIFY BELOW
# Clean old firewall
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
# Load IPTABLES modules for NAT and IP conntrack support
modprobe ip_conntrack
modprobe ip_conntrack_ftp
# For win xp ftp client
modprobe ip_nat_ftp
echo 1 > /proc/sys/net/ipv4/ip_forward
# Setting default filter policy
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
# Unlimited access to loop back
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# einzelne, externe IP-Adressen sperren.
# Beispiel: Kommunikation zu 1.2.3.4 soll komplett unterbunden werden
iptables –I OUTPUT –s 1.2.3.4 –j DROP
iptables –I INPUT –s 1.2.3.4 –j DROP
# Allow UDP, DNS and Passive FTP
iptables -A INPUT -i $INTERNET -m state --state ESTABLISHED,RELATED -j ACCEPT
# set this system as a router for Rest of LAN
iptables --table nat --append POSTROUTING --out-interface $INTERNET -j MASQUERADE
iptables --append FORWARD --in-interface $LAN_IN -j ACCEPT
# unlimited access to LAN
iptables -A INPUT -i $LAN_IN -j ACCEPT
iptables -A OUTPUT -o $LAN_IN -j ACCEPT
# DNAT port 80 request comming from LAN systems to squid 3128 ($SQUID_PORT) aka transparent proxy
iptables -t nat -A PREROUTING -i $LAN_IN -p tcp --dport 80 -j DNAT --to $SQUID_SERVER:$SQUID_PORT
# if it is same system
iptables -t nat -A PREROUTING -i $INTERNET -p tcp --dport 80 -j REDIRECT --to-port $SQUID_PORT
# DROP everything and Log it
iptables -A INPUT -j LOG
iptables -A INPUT -j DROP
ich habe für unser Firmennetzwerk einen transparenten Proxy für unseren Web-Zugang eingerichtet, der mit einem Squid3 den Web-Traffic reglementiert (Black- und Whitelists) und somit "verbotene" Websites aussperrt. Die iptables lenken Port 80 auf Squid und schaltet ansonsten auf Durchzug (unten mein Boot-Skript).
Mittlerweile haben die ersten Schlaumeier sich bereits eigene root-Server als Proxy eingerichtet und surfen nun wieder von ihrem Arbeitsplatz nach belieben in der Weltgeschichte rum. (bitte nun aber keine juristischen Tipps. Ich weiss selbst dass man derartige Sabotage abmahnen kann - in dieser Anfrage geht es mir jedoch rein um die technischen Möglichkeiten)
Mein Problem: zwar kann ich derartige Surf-Proxies per iptables kappen, aber hierzu muss ich ja erst mal erkennen dass so ein Proxy genutzt wird. Da wir auch beruflich auf zahlreichen externen Servern per SSH drauf müssen, ist es schwer herauszufinden, ob ein Mitarbeiter einen Kundenserver betreut oder z.B. 443 als Surf-Proxy nutzt. Daher zwei Fragen:
a) wie kann ich effizient solche Surf-Proxies erkennen?
und
b) wenn ich einen solchen Host per "iptables –I OUTPUT –s 1.2.3.4 –j DROP" aussperre, so habe ich beobachtet dass ich trotzdem diesen Rechner noch pingen oder mich per SCP einloggen kann. Ich würde gerne die Kommunikation komplett(!) unterbinden. Mache ich bei den iptables was falsch?
Für Hinweise bin ich dankbar.
#!/bin/sh
# squid server IP
SQUID_SERVER="192.168.0.250"
# Interface connected to Internet
INTERNET="eth1"
# Interface connected to LAN
LAN_IN="eth0"
# Squid port
SQUID_PORT="3128"
# DO NOT MODIFY BELOW
# Clean old firewall
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
# Load IPTABLES modules for NAT and IP conntrack support
modprobe ip_conntrack
modprobe ip_conntrack_ftp
# For win xp ftp client
modprobe ip_nat_ftp
echo 1 > /proc/sys/net/ipv4/ip_forward
# Setting default filter policy
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
# Unlimited access to loop back
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# einzelne, externe IP-Adressen sperren.
# Beispiel: Kommunikation zu 1.2.3.4 soll komplett unterbunden werden
iptables –I OUTPUT –s 1.2.3.4 –j DROP
iptables –I INPUT –s 1.2.3.4 –j DROP
# Allow UDP, DNS and Passive FTP
iptables -A INPUT -i $INTERNET -m state --state ESTABLISHED,RELATED -j ACCEPT
# set this system as a router for Rest of LAN
iptables --table nat --append POSTROUTING --out-interface $INTERNET -j MASQUERADE
iptables --append FORWARD --in-interface $LAN_IN -j ACCEPT
# unlimited access to LAN
iptables -A INPUT -i $LAN_IN -j ACCEPT
iptables -A OUTPUT -o $LAN_IN -j ACCEPT
# DNAT port 80 request comming from LAN systems to squid 3128 ($SQUID_PORT) aka transparent proxy
iptables -t nat -A PREROUTING -i $LAN_IN -p tcp --dport 80 -j DNAT --to $SQUID_SERVER:$SQUID_PORT
# if it is same system
iptables -t nat -A PREROUTING -i $INTERNET -p tcp --dport 80 -j REDIRECT --to-port $SQUID_PORT
# DROP everything and Log it
iptables -A INPUT -j LOG
iptables -A INPUT -j DROP