Warning: Memcache::addserver() expects parameter 2 to be long, string given in /usr/home/rpc/domains/rpc.one.pl/public_html/libraries/joomla/cache/storage/memcache.php on line 84 Zapobieganie przed zmianą ip przez użytkownika w OpenWrt
 
 
Zapobieganie przed zmianą ip przez użytkownika w OpenWrt Drukuj Email
Wpisany przez rpc   
czwartek, 24 czerwca 2010 20:06

Zapobieganie przed zmianą ip przez użytkownika w OpenWrt

 

Przedstawię prostą metodę zapobiegania zmiany przyznanego adresu IP przez użytkownika. Cała konfiguracja wykonana i testowana pod OpenWrt Backfire 10.03.x pod WR1043ND oraz WRT54GL. W aplikacji wykorzystano opcje programu dnsmasq, która powoduje wywołanie zewnętrznego skryptu (opcja dhcp-script). Po więcej odsyłam do dokumentacji dnsmasq. Skrypt odpowiednio przekonfigurowuje firewall. Aby nie mieszać w domyślnych łańcuchach openwrt tworzony jest nowy łańcuch "forwarding_dnsmasq" i to tam zachodzą wszelkie zmiany. Domyślnie skrypt tak naprawdę blokuje forward na routerze, jednakże nic nie stoi na przeszkodzie aby sobie odpowiednio dostosować skrypt. Domyślnie skrypt tak naprawdę blokuje forward na routerze, jednakże nic nie stoi na przeszkodzie aby sobie odpowiednio dostosować skrypt.

 

Instalacja:

Podmieniamy zmodyfikowany przeze mnie plik /etc/init.d/dnsmasq:

cp /etc/init.d/dnsmasq /root
rm /etc/init.d/dnsmasq
wget http://rpc.one.pl/pliki/openwrt/backfire/10.03.x/dnsmasq/dnsmasq -O /etc/init.d/dnsmasq

 

Musimy dodać trzy poniższe linie na początku pliku /etc/firewall.user:

iptables -N forwarding_dnsmasq
iptables -I zone_lan_forward -j forwarding_dnsmasq
iptables -A forwarding_dnsmasq -j REJECT

 

Należy utworzyć plik w katalogu /etc:

wget http://rpc.one.pl/pliki/openwrt/backfire/10.03.x/dnsmasq/dnsmasq.script -O /etc/dnsmasq.script
chmod +x /etc/dnsmasq.script

 

Należy włączyć naszą funkcjonalność w dnsmasq:

uci set dhcp.@dnsmasq[0].dhcpscript=/etc/dnsmasq.script
uci commit dhcp

 

Na koniec należy naszym hostom zdefiniować adresy IP przez przypisanie ich poprzez adres MAC karty sieciowej

echo "00:11:22:33:44:57 192.168.1.100" >> /etc/ethers

 

I to w zasadzie wszystko. Wykonujemy tylko restart dns/dhcp

/etc/init.d/dnsmasq restart

 

Co zostało zrobione:

Został utworzony nowy plik wykonywalny (chmod +x) /etc/dnsmasq.script o zawartości:

#!/bin/sh

#Zabezpieczenie przed zmiana adresu IP w OpenWrt
#Nalezy dopisac na poczatku pliku /etc/firewall.user trzy ponizsze wiersze
#iptables -N forwarding_dnsmasq
#iptables -I zone_lan_forward -j forwarding_dnsmasq
#iptables -A forwarding_dnsmasq -j REJECT
#
#zalozenie to takie, iz siec wewnetrzna nazywa sie "lan"
#Jezeli nie to nalezy zwrocic uwage czy istnieje lancuch "zone_lan_forward" w iptables -L -v
#created Rafal Cichosz < rpc[at]rpc.one.pl >

zm=`iptables -L forwarding_dnsmasq -n | awk /ACCEPT/'{print $4":"$7}' | tr "[A-F]" "[a-f]"`

case $1 in
"add"|"old") [ "$3:$2" != "$zm" ] && iptables -I forwarding_dnsmasq --src $3 -m mac --mac-source $2 -j ACCEPT ;;
"del") [ "$3:$2"  = "$zm" ] && iptables -D forwarding_dnsmasq --src $3 -m mac --mac-source $2 -j ACCEPT ;;
esac

Blokada polega na utworzeniu nowego łańcucha forwarding_dnsmasq i odpowiednie dodanie adresów ip i adresów MAC logujących się klientów. Jeżeli ktoś ustawi sobie statycznie adres ip to nie uzyska połączenia z internetem. Jeżeli jednak chcemy aby mógł pracować to należy go dodać ręcznie w openwrt np.:

iptables -A forwarding_rule --src 192.168.1.10 -j ACCEPT

Ważne w tym wszystkim jest to gdzie umieści się nasz łańcuch forwarding_dnsmasq. Ja umieściłem go w łańcuchu zone_lan_forward. Można go umieścić w innej regule nawet głównej FORWARD.

 

Do pliku /etc/init.d/dnsmasq dodano poniższe wiersze:

Index: package/dnsmasq/files/dnsmasq.init
===================================================================
--- package/dnsmasq/files/dnsmasq.init    (wersja 21896)
+++ package/dnsmasq/files/dnsmasq.init    (kopia robocza)
@@ -99,6 +99,10 @@

config_get hostsfile "$cfg" dhcphostsfile
[ -e "$hostsfile" ] && append args "--dhcp-hostsfile=$hostsfile"
+
+        config_get dhcpscript "$cfg" dhcpscript
+        [ -n "$dhcpscript" ] && append args "-6 $dhcpscript"
+
}

czyli dodano nową opcję dhcpscript, która to jest odpowiednikiem opcji dhcp-script (-6) programu dnamasq. Dzięki temu uzyskujemy obsługę poprzez UCI w openwrt.

dhcp.@dnsmasq[0].dhcpscript=/etc/dnsmasq.script



Podziel się tą informacja z innymi:
Poprawiony: piątek, 25 czerwca 2010 06:49