Hallo @ all,
Folgende Ausgangssitation:
Server mit Ubuntu 7.10
SSH, squid und ppoe
Das Gerät stellt den Internetzugang für mehrere Benutzer über DSL zur Verfügung.
eth1 - 192.168.50.1 \–– proxy squid + firewall mittels IP Tables –- eth0 192.168.20.1-– adsl Modem
Ich möchte nun die Nutzung des squid proxy erzwingen indem ich in der Firewallregel alle IP Pakete welche je normalerweise an port 80 bzw. 443 gehen
an port 3128 umleite. Meiner Meinung nach passiert dies für die Datenpakete vor allen anderen Routingeinstellung und wäre somit mit einer Preroutingregel einzustellen.
Folgende Regel habe ich also in meine firewall.rc eingesetzt:
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128
Hiermit habe ich nun zwar alle Datenpakete auf den port 3128 (und somit auf den proxy) "umgebogen" - nun komme ich aber mit meinen clients nicht mehr raus.
Eingetragen auf den clients ist 192.168.50.1:3128 im IE Browser.
Setze ich meine INPUT und OUTPUT policy der firewall.rc auf ACCEPT geht alles. Somit ist meine squid.conf ok. und es fehlt mir ein weiterer Routingeintrag - Pakete von eth1 source port 3128 müßten nun doch mittels Forward an das DSL Modem geleitet werden und Antworten entsprechend zurück. Egal welche Forward Regel ich eintrag es haut einfach nicht hin. ☹
Anbei meine firewall.rc
#!/bin/sh
/sbin/modprobe ip_tables
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_conntrack_irc
/sbin/modprobe iptable_nat
/sbin/modprobe ip_nat_ftp
echo "1"> /proc/sys/net/ipv4/ip_forward
echo "1"> /proc/sys/net/ipv4/ip_dynaddr
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
### Umleitung zu proxy
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 443 -j REDIRECT --to-port 3128
iptables -A OUTPUT -p udp --sport 1024: --dport 53 -j ACCEPT
iptables -A INPUT -p udp -s 217.237.150.205 --sport 53 --dport 1024: -j ACCEPT
iptables -A OUTPUT -p tcp --sport 1024: --dport 53 -j ACCEPT
iptables -A INPUT -p tcp -s 217.237.150.205 --sport 53 --dport 1024: ! --syn -j ACCEPT
iptables -A OUTPUT -p tcp --sport 1024: --dport 3128 -j ACCEPT
iptables -A INPUT -p tcp --sport 3128 --dport 1024: ! --syn -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -p tcp --sport 1024: --dport 25 -j ACCEPT
iptables -A INPUT -p tcp --sport 25 --dport 1024: ! --syn -j ACCEPT
iptables -A OUTPUT -p tcp --sport 1024: --dport 110 -j ACCEPT
iptables -A INPUT -p tcp --sport 110 --dport 1024: ! --syn -j ACCEPT
iptables -A INPUT -i eth1 -p tcp -s 192.168.50.0/24 -d 192.168.50.1 --sport 32000: --dport 22 -j ACCEPT
iptables -A OUTPUT -o eth1 -p tcp -s 192.168.50.1 -d 192.168.50.0/24 --sport 22 --dport 32000: ! --syn -j ACCEPT
iptables -A OUTPUT -o eth1 -p tcp -s 192.168.50.1 -d 192.168.50.0/24 --sport 32000: --dport 22 -j ACCEPT
iptables -A INPUT -i eth1 -p tcp -s 192.168.50.0/24 -d 192.168.50.1 --sport 22 --dport 32000: ! --syn -j ACCEPT
# iptables -A INPUT -p icmp -s 192.168.0.0/16 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
iptables -A FORWARD -o ppp0 -p icmp --icmp-type echo-request -j ACCEPT
iptables -A FORWARD -i ppp0 -p icmp --icmp-type echo-reply -j ACCEPT
iptables -A FORWARD -o ppp0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i ppp0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
# restliche eintreffende Pakete verwerfen
iptables -A INPUT -j DROP
Hat jemand einen Tipp??
Grüße Thomas