Hallo zusammen,
ich könnte etwas Unterstützung gebrauchen, bei meinem Versuch über 4 Netzwerkinterfaces mit iptables zu filtern.
Ich habe folgenden Aufbau Server:
eth0 <-- LAN
|----br0 192.168.12.0/24
tap0 <-- VPN
ath0 <-- WLAN
|----br1 192.168.11.0/24
eth1 <-- WLAN über AP direkt per Kabel angeschlossen
Ich wollte erreichen, dass man sich per WLAN anmelden kann und durch den Server ins Internet geroutet wird. Das läuft auch, der Server maskiert
die Anfragen aus dem WLAN und routet die WLAN-Klienten über meinen eigentlichen Router ins Internet. Da für die WLAN Teilnehmer die selben Richtlinien gelten wie für den Server, ist das weites gehend OK.
Um jetzt als WLAN Klient ins lokale Netz zu kommen kann man sich per VPN mit dem Server verbinden und wird dann getunnelt.
Für mich die einzige Lösung um das WLAN vom LAN zu lösen, jedenfalls halbwegs.
Da ich dem MAC Filter nicht an zwei Stellen pflegen will, also auf dem AP und unter hostap, dachte ich mir das kann ja auch iptables für mich machen und wo wir gerade dabei sind auch noch etwas mehr filtern ;-)
Aber was ich auch angestellt habe, mein Regelwerk funzt überhaupt nicht.
Vielleicht hat ja jemand mehr Erfahrung damit und kann mir sagen wo der Fehler liegt oder ob es überhaupt geht.
Danke!
Grüße Beppo
ich könnte etwas Unterstützung gebrauchen, bei meinem Versuch über 4 Netzwerkinterfaces mit iptables zu filtern.
Ich habe folgenden Aufbau Server:
eth0 <-- LAN
|----br0 192.168.12.0/24
tap0 <-- VPN
ath0 <-- WLAN
|----br1 192.168.11.0/24
eth1 <-- WLAN über AP direkt per Kabel angeschlossen
Ich wollte erreichen, dass man sich per WLAN anmelden kann und durch den Server ins Internet geroutet wird. Das läuft auch, der Server maskiert
die Anfragen aus dem WLAN und routet die WLAN-Klienten über meinen eigentlichen Router ins Internet. Da für die WLAN Teilnehmer die selben Richtlinien gelten wie für den Server, ist das weites gehend OK.
Um jetzt als WLAN Klient ins lokale Netz zu kommen kann man sich per VPN mit dem Server verbinden und wird dann getunnelt.
Für mich die einzige Lösung um das WLAN vom LAN zu lösen, jedenfalls halbwegs.
Da ich dem MAC Filter nicht an zwei Stellen pflegen will, also auf dem AP und unter hostap, dachte ich mir das kann ja auch iptables für mich machen und wo wir gerade dabei sind auch noch etwas mehr filtern ;-)
Aber was ich auch angestellt habe, mein Regelwerk funzt überhaupt nicht.
Code:
#!/bin/bash
TAP=tap0
I2_IF=eth0 # Tap Device
I_IF=br0 # internes interface (lokales/privates Netz)
E_IF=br1 # externes interface (WLAN Netz)
E_WLAN_3OG_IF=eth1 # externes interface (WLAN Netz 3 OG)
I_IP=192.168.12.200 # IP-Adresse an I_IF
E_IP=192.168.11.1 # IP-Adresse an E_IF
LOC_IP=192.168.12.0/24 # lokale Subnetz
WLAN_IP=192.168.11.0/24 # wlan Subnetz
E_WLAN_IF=ath0 # externes interface (WLAN Netz)
VPN_SERVER_IP=192.168.12.200 # IP-Adresse VPN_SERVER_IP
route del -net $WLAN_IP gw $E_IP # Route löschen falls vorhanden
route add -net $WLAN_IP gw $E_IP # Route hinzufügen
IPTABLES=/usr/sbin/iptables
# Module laden
/sbin/modprobe ip_tables
/sbin/modprobe iptable_filter
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ipt_state
/sbin/modprobe ipt_LOG
/sbin/modprobe iptable_mangle
/sbin/modprobe iptable_nat
/sbin/modprobe ip_nat_ftp
/sbin/modprobe ipt_MASQUERADE
/sbin/modprobe ipt_mac
# alle chains entleeren
# filter
$IPTABLES -F
# nat
$IPTABLES -t nat -F
# mangle
$IPTABLES -t mangle -F
# Drop Chain "KICKIT" loeschen und neu aufbauen
$IPTABLES -X KICKIT
$IPTABLES -N KICKIT
# Drop Chain loeschen und neu aufbauen
$IPTABLES -X WLAN
$IPTABLES -X MACFILTER
$IPTABLES -X MACFILTER_3OG
$IPTABLES -X WLANVPNROUTING
$IPTABLES -N WLAN
$IPTABLES -N MACFILTER
$IPTABLES -N MACFILTER_3OG
#$IPTABLES -N WLANVPNROUTING
$IPTABLES -F WLAN
$IPTABLES -F MACFILTER
$IPTABLES -F MACFILTER_3OG
#$IPTABLES -F WLANVPNROUTING
# Richtlinien (policies) setzen
# filter
$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -P OUTPUT ACCEPT
# nat
$IPTABLES -t nat -P PREROUTING ACCEPT
$IPTABLES -t nat -P POSTROUTING ACCEPT
$IPTABLES -t nat -P OUTPUT ACCEPT
# mangle
$IPTABLES -t mangle -P PREROUTING ACCEPT
$IPTABLES -t mangle -P INPUT ACCEPT
$IPTABLES -t mangle -P FORWARD ACCEPT
$IPTABLES -t mangle -P OUTPUT ACCEPT
$IPTABLES -t mangle -P POSTROUTING ACCEPT
#Forwarding aktivieren
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "0" > /proc/sys/net/ipv4/ip_dynaddr
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
#DHCP an eth1 und ath0
$IPTABLES -A INPUT -m physdev --physdev-in $E_WLAN_IF -p UDP --destination-port 67:68 --source-port 67:68 -j ACCEPT
$IPTABLES -A INPUT -m physdev --physdev-in $E_WLAN_3OG_IF -p UDP --destination-port 67:68 --source-port 67:68 -j ACCEPT
#Umleiten EG
$IPTABLES -A FORWARD -m physdev --physdev-in $E_WLAN_IF -j MACFILTER
$IPTABLES -A INPUT -m physdev --physdev-in $E_WLAN_IF -j MACFILTER
#Umleiten 3 OG
$IPTABLES -A FORWARD -m physdev --physdev-in $E_WLAN_3OG_IF -j MACFILTER_3OG
$IPTABLES -A INPUT -m physdev --physdev-in $E_WLAN_3OG_IF -j MACFILTER_3OG
#Openvpn
$IPTABLES -A INPUT -m physdev --physdev-in $E_WLAN_3OG_IF -p udp -m udp --dport 1194 -m state --state NEW -j ACCEPT
$IPTABLES -A FORWARD -m physdev --physdev-in $E_WLAN_3OG_IF -d $VPN_SERVER_IP -p udp -m udp --dport 1194 -j ACCEPT
$IPTABLES -A INPUT -m physdev --physdev-in $E_WLAN_IF -p udp -m udp --dport 1194 -m state --state NEW -j ACCEPT
$IPTABLES -A FORWARD -m physdev --physdev-in $E_WLAN_IF -d $VPN_SERVER_IP -p udp -m udp --dport 1194 -j ACCEPT
# LAN und VPN erlauben
$IPTABLES -A INPUT -m physdev --physdev-in $I2_IF -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -m physdev --physdev-in $I2_IF -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -m physdev --physdev-in $TAP -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -m physdev --physdev-in $TAP -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
#Loggen von
$IPTABLES -A INPUT -i $E_IF -j LOG
$IPTABLES -A OUTPUT -o $E_IF -j LOG
$IPTABLES -A FORWARD -i $E_IF -j LOG
# Loopback-Device aktivieren
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A OUTPUT -o lo -j ACCEPT
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
# NAT/Masquerading aktivieren
$IPTABLES -t nat -A POSTROUTING -o $I_IF -j MASQUERADE
# MAC-Filter an ath0 für WPA WLAN
let ANZAHL_mac=$(grep ^mac /etc/firewall/mac_wlan | wc -l | tr -d " ")
echo $ANZAHL_mac
# Schleife x mal Durchlaufen, fuer alle moegliche IP's in /etc/firewall/ips_wlan
for ((I_mac=1; $I_mac <= $ANZAHL_mac; I_mac++)) ; do
# DNS-IP's ermitteln
WLANMAC=$(grep ^mac /etc/firewall/mac_wlan | head -n $I_mac | tail -n 1 | cut -d " " -f 2)
# IP's fürs WLAN in die chains schreiben
$IPTABLES -A MACFILTER -m mac --mac-source $WLANMAC -j WLAN
echo "MAC $WLANMAC von EG erlaubt!"
# Schleifenabbruch
if [ $I_mac -eq $ANZAHL_mac ] ; then
break
fi
done
$IPTABLES -A MACFILTER -j LOG --log-prefix "MAC gefiltert EG"
$IPTABLES -A MACFILTER -j KICKIT
# MAC-Filter an eth1 für WPA WLAN
let ANZAHL_mac_3OG=$(grep ^mac /etc/firewall/mac_wlan | wc -l | tr -d " ")
echo $ANZAHL_mac_3OG
# Schleife x mal Durchlaufen, fuer alle moegliche IP's in /etc/firewall/ips_wlan
for ((I_mac_3OG=1; $I_mac_3OG <= $ANZAHL_mac_3OG; I_mac_3OG++)) ; do
# DNS-IP's ermitteln
WLANMAC_3OG=$(grep ^mac /etc/firewall/mac_wlan | head -n $I_mac_3OG | tail -n 1 | cut -d " " -f 2)
# IP's fürs WLAN in die chains schreiben
$IPTABLES -A MACFILTER_3OG -m mac --mac-source $WLANMAC_3OG -j WLAN
echo "MAC $WLANMAC_3OG von 3.OG erlaubt!"
# Schleifenabbruch
if [ $I_mac_3OG -eq $ANZAHL_mac_3OG ] ; then
break
fi
done
$IPTABLES -A MACFILTER_3OG -j LOG --log-prefix "MAC gefiltert 3. OG"
$IPTABLES -A MACFILTER_3OG -j KICKIT
#Platz für weitere Filterregeln
$IPTABLES -A WLAN -j ACCEPT
$IPTABLES -A INPUT -m physdev --physdev-in $E_IF --physdev-out $I2_IF -s $WLAN_IP -d ! $LOC_IP -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -m physdev --physdev-in $E_IF --physdev-out $I2_IF -s $WLAN_IP -d ! $LOC_IP -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -m physdev --physdev-in $E_WLAN_3OG_IF --physdev-out $I2_IF -s $WLAN_IP -d ! $LOC_IP -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -m physdev --physdev-in $E_WLAN_3OG_IF --physdev-out $I2_IF -s $WLAN_IP -d ! $LOC_IP -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -m physdev --physdev-in $E_WLAN_IF --physdev-out $I2_IF -s $WLAN_IP -d ! $LOC_IP -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -m physdev --physdev-in $E_WLAN_IF --physdev-out $I2_IF -s $WLAN_IP -d ! $LOC_IP -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
# Openvpn-Routing
$IPTABLES -t nat -A PREROUTING -m physdev --physdev-in $E_WLAN_IF -d $E_IP -p udp -m udp --dport 1194 -j DNAT --to-destination 192.168.12.200
$IPTABLES -t nat -A PREROUTING -m physdev --physdev-in $E_WLAN_3OG_IF -d $E_IP -p udp -m udp --dport 1194 -j DNAT --to-destination 192.168.12.200
$IPTABLES -A KICKIT -j DROP
Vielleicht hat ja jemand mehr Erfahrung damit und kann mir sagen wo der Fehler liegt oder ob es überhaupt geht.
Danke!
Grüße Beppo