La Fonera come repeater
a cura di Emix
Ultimo aggiornamento: 02/03/2007 01:15
Per utilizzare la fonera come repeater è necessario accederci via ssh per modificare alcuni file, perciò bisogna avviare il demone DropBear seguendo il tutorial La Fonera: dalla scatola a OpenWrt - Tutorial fino al punto 4.
I file necessari al nostro scopo sono: lo script ponte2 e il suo relativo file di configurazione ponte2.conf editati da Antonio Anselmi. http://www.blogin.it/fonera4.php
Attraverso i comandi
scp /tmp/ponte2 root@IP-FONERA:/etc/ponte2 scp /tmp/ponte2.conf root@IP-FONERA:/etc/ponte2.conf
copiamo i due file dal nostro pc nella cartella /etc della Fonera, a questo punto editiamo il file di configurazione con le informazioni che ci interessano e diamo un
chmod 755 /etc/ponte2
per renderlo eseguibile.
Eseguiamo lo script con
sh ponte2
e controlliamo che non ci siano errori.
Teniamo presente che La fonera dispone di tre interfacce una ethernet e due wireless
- ath0 - che farà da hot spot del segnale ricevuto
- ath1 - che farà da link all'access point che vogliamo agganciare
- eth0 - disabilitata nel file di configurazione ma se attiva in routing con ath0
Per utilizzare il supporto alla autenticazione WPA-PSK occorre scaricare wpa_supplicant e libopenssl reperibili nel repository ed installarli tramite
ipkg <nome file>
Se tutto è andato nel verso giusto la fonera dovrebbe avere un SSID <relay_APCOLLEGATO> che ci permetterà di collegarci alla rete dell'AP al quale ci siamo linkati.
Per avviare in automatico lo script creiamo con vi il file S70ponte in /etc/init.d
vi /etc/init.d/S70ponte
ci scriviamo dentro
/etc/ponte2 # the end
e diamo un
chmod 755 /etc/init.d/S70ponte
per renderlo eseguibile, ora ad ogni riavvio avermo il nostro repeater attivo.
file ponte2
# /etc/ponte2 - 20072802
#****************************************************************************
# beta-1 realease
# more about this script cab be found at: http://www.blogin.it/fonera4.php
# ansanto@interfree.it
#****************************************************************************
#----------------------------------------------------------------------------
# setup_env. Function that setups environment
setup_env () {
# Set the default values of all environment variables here
logDir=/var/log
tmpDir=/tmp
white_list=/etc/white_list.conf
myself=`basename $0`
logFile=$logDir/$myself.log
oggi=$(date)
IWCONFIG=/usr/sbin/iwconfig
IFCONFIG=/sbin/ifconfig
WLANCONFIG=/usr/sbin/wlanconfig
IWPRIV=/usr/sbin/iwpriv
NETFILTER=/usr/sbin/iptables
ROUTE=/sbin/route
rm -f /tmp/results
#
echo "$oggi: start" >> $logFile
if [ -f /etc/ponte2.conf ]; then
. /etc/ponte2.conf
else
echo "/etc/ponte2.conf not found"
echo "/etc/ponte2.conf not found" >> $logFile
echo "stop and exit" >> $logFile
exit 1
fi
# ip_forward is set to 1 by default in fonera configuration
# echo 1 > /proc/sys/net/ipv4/ip_forward
# stop daemons
local web=httpd
local cron=crond
local dns=dnsmasq
#if [ ! -z "$( pidof $web )" ]; then
# kill $(pidof $web) > /dev/null
#fi
if [ ! -z "$( pidof $cron )" ]; then
kill $(pidof $cron) > /dev/null
fi
if [ ! -z "$( pidof $dns )" ]; then
kill $(pidof $dns) >> /dev/null
fi
killall -9 udhcpc > /dev/null
# flush_netfilter tables
$NETFILTER -F
$NETFILTER -P INPUT ACCEPT
$NETFILTER -P OUTPUT ACCEPT
$NETFILTER -P FORWARD ACCEPT
$NETFILTER -t nat -F
echo "netfilter tables flushed" >> $logFile
} # setup_env
#-------------------------------------------------------------------------------
# hardening Function that sets some TCP/IP parameters
hardening () {
if [ $khard == 1 ]; then
# Disable tcp_sack support
echo "0" > /proc/sys/net/ipv4/tcp_sack
# Disable TCP window_scaling
echo "0" > /proc/sys/net/ipv4/tcp_window_scaling
# Disable source routing
echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route
echo "0" > /proc/sys/net/ipv4/conf/lo/accept_source_route
echo "0" > /proc/sys/net/ipv4/conf/eth0/accept_source_route
echo "0" > /proc/sys/net/ipv4/conf/ath0/accept_source_route
echo "0" > /proc/sys/net/ipv4/conf/ath1/accept_source_route
echo "0" > /proc/sys/net/ipv4/conf/default/accept_source_route
# Enable TCP SYN Cookie potection
echo "1" > /proc/sys/net/ipv4/tcp_syncookies
# No ICMP Redirect
echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects
echo "0" > /proc/sys/net/ipv4/conf/lo/accept_redirects
echo "0" > /proc/sys/net/ipv4/conf/eth0/accept_redirects
echo "0" > /proc/sys/net/ipv4/conf/ath0/accept_redirects
echo "0" > /proc/sys/net/ipv4/conf/ath1/accept_redirects
echo "0" > /proc/sys/net/ipv4/conf/default/accept_redirects
# Enable IP spoofing protection
echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter
echo "1" > /proc/sys/net/ipv4/conf/lo/rp_filter
echo "1" > /proc/sys/net/ipv4/conf/eth0/rp_filter
echo "1" > /proc/sys/net/ipv4/conf/ath0/rp_filter
echo "1" > /proc/sys/net/ipv4/conf/ath1/rp_filter
echo "1" > /proc/sys/net/ipv4/conf/default/rp_filter
echo "fonera hardened" >> $logFile
fi
} # hardening
#-------------------------------------------------------------------------------
# logging. Function that logs Spoofed, Source Routed and Redirect packets
logging () {
if [ $klog == 1 ]; then
echo "1" > /proc/sys/net/ipv4/conf/all/log_martians = 1
echo "1" > /proc/sys/net/ipv4/conf/lo/log_martians = 1
echo "1" > /proc/sys/net/ipv4/conf/eth0/log_martians = 1
echo "1" > /proc/sys/net/ipv4/conf/ath0/log_martians = 1
echo "1" > /proc/sys/net/ipv4/conf/ath1/log_martians = 1
echo "1" > /proc/sys/net/ipv4/conf/default/log_martians = 1
echo "logging malicyous packests activated" >> $logFile
fi
} # logging
#-------------------------------------------------------------------------------
# setup_ath0. Function that setup ath0 as an Access Point
setup_ath0 () {
if [ $whiteList == 1 ]; then
$IWPRIV ath0 maccmd 3
$IWPRIV ath0 maccmd 1
for i in $(cat $white_list); do
$IWPRIV ath0 addmac $i
done
fi
# catch external AP ESSID
$IWCONFIG ath1 | grep ESSID > /tmp/ponte_per
INI=32
FIN=$(cat /tmp/ponte_per | wc -c)
: $((FIN = $FIN - 4))
AP=$(cut /tmp/ponte_per -c $INI-$FIN)
$IWCONFIG ath0 essid "relay_$AP"
echo "ath0 is relay for "$AP >> $logFile
#
if [ $WepKeyAscii_ath0 ]; then
$IWCONFIG ath0 key s:$WepKeyAscii_ath0
echo "ath0 WEP key: "$WepKeyAscii_ath0 >> $logFile
fi
$IFCONFIG ath0 $IP_ath0 netmask $MASK_ath0 up
} # setup_ath0
#-------------------------------------------------------------------------------
# setup_ath1. Function that setup ath1 as repeater
setup_ath1 () {
case $ath1_mode in
2) #targeted external AP by SSID
$IWCONFIG ath1 mode managed essid $TargetSsid
echo "ath1 via SSID: "$TargetSsid >> $logFile
;;
3) #targeted external AP by MAC
$IWCONFIG ath1 mode managed ap $TargetMac
echo "ath1 via MAC: "$TargetMac >> $logFile
;;
4) #targeted external AP via WPA-PSK
$IWCONFIG ath1 mode managed essid $TargetWpa
$IFCONFIG ath1 $IP_ath1 netmask $MASK_ath1 up
wpa_supplicant -iath1 -c/etc/wpa_supplicant.conf -d
echo "ath1 interface via WPA PSK" >> $logFile
;;
5) #targeted external AP via WEP
# what kind of key
if [ $WepKeyHex_ath1 ]; then
$IWCONFIG ath1 key $WepKeyHex_ath1
else
if [ $WepKeyAscii_ath1 ]; then
$IWCONFIG ath1 key "s:$WepKeyAscii_ath1"
else
echo "error: WEP key not configured" >> $logFile
exit 1
fi
fi
# target we look for
if [ $TargetWepSsid ]; then
$IWCONFIG ath1 mode managed essid $TargetWepSsid
else
if [ $TargetWepMac ]; then
$IWCONFIG ath1 mode managed ap $TargetWepMac
else
echo "error: no target AP for WEP" >> $logFile
exit 1
fi
fi
echo "ath1 interface via WEP" >> $logFile
;;
esac
# IP config for ath1
if [ $ath1_mode == 1 ]; then
#simply discover strongest external AP + dyanamic IP configuration
/sbin/udhcpc -i ath1 >> $logFile
$IWCONFIG ath1 | grep ESSID | awk '"external AP " {print $4}' >> $logFile
echo "ath1 interface via external dhcp" >> $logFile
else
# satic IP configuration
$IFCONFIG ath1 $IP_ath1 netmask $MASK_ath1 up
$ROUTE del default
$ROUTE add default gw $DFGW
echo "nameserver " $NAMESERVER1 > /etc/resolv.conf
echo "nameserver " $NAMESERVER2 >> /etc/resolv.conf
fi
} # setup_ath1
#-------------------------------------------------------------------------------
# setup_eth0. Function that setup eth0 (wired lan)
setup_eth0 () {
if [ $keth0 == 1 ]; then
$IFCONFIG eth0 $IP_eth0 netmask $MASK_eth0 up
$NETFILTER -t nat -A POSTROUTING -o eth0 -j MASQUERADE
echo "eth0 interface: "$IP_eth0/$MASK_eth0 >> $logFile
fi
} # setup_eth0
#-------------------------------------------------------------------------------
# std_routing. Standard routing
std_routing () {
# forwarding between the subnets
if [ $btorrent == 1 ]; then
BTports="6890 6891 6892 6893 6894 6895 6896 6897 6898 6899"
for pt in $BTports; do
$NETFILTER -t nat -A PREROUTING -i ath1 -p tcp --dport $pt -j DNAT --to $IP_client_btorrent:$pt
done
fi
if [ $xmule == 1 ]; then
echo "32752" > /proc/sys/net/ipv4/netfilter/ip_conntrack_max
$NETFILTER -t nat -A PREROUTING -i ath1 -p tcp --dport 4662 -j DNAT --to $IP_client_xmule:4662
$NETFILTER -t nat -A PREROUTING -i ath1 -p udp --dport 4672 -j DNAT --to $IP_client_xmule:4672
fi
$NETFILTER -t nat -A POSTROUTING -o ath1 -j MASQUERADE
} # std_routing
# main
#-------------------------------------------------------------------------------
clear
setup_env
hardening
logging
# destroy VAPs devices
$WLANCONFIG ath0 destroy
$WLANCONFIG ath1 destroy
# bring up first (!) VAP ath0 as Access Point
$WLANCONFIG ath0 create wlandev wifi0 wlanmode ap
# bring up VAP ath1 as station managed (no hardware beacon timers)
$WLANCONFIG ath1 create wlandev wifi0 wlanmode sta nosbeacon
# setup Wireless Lans
setup_ath1
setup_ath0
# basic netfilter rules
std_routing
# setup Ethernet Lan
setup_eth0
# bring up DHCP
if [ $kdhcp == 1 ]; then
/usr/sbin/dnsmasq
fi
# show results
clear
$IWCONFIG > /tmp/results
$IFCONFIG >> /tmp/results
clear
more /tmp/results
exit 0
# have fun!file pont2.conf
# /etc/ponte2.conf 20072802 # NO SPACE BETWEEN = AND VALUE # parameter = value <---- WRONG way # parameter=value <---- RIGHT way # #--------------------------------- # hardening some TCP/IP parameters #--------------------------------- #khard=1 khard=0 # #---------------------------------- # logging malicyous TCP/IP packests #---------------------------------- #klog=1 klog=0 # # ------------ # DHCP service # ------------ # If you want a dynamic IP configuration for WiFi/wired # ifaces of your pc, use dnsmasq as DHCPD on ath0 and/or eth0 # Remember: you must edit /etc/dnsmasq.conf #kdhcp=1 kdhcp=0 # #-------------------------------- # configuring ath0 interface (AP) #-------------------------------- # white_list # you must create the file /etc/white_list.conf with # ONLY one mac address allowed per line #whiteList=1 whiteList=0 # # if you want WEP auth on ath0 insert ASCII key #WepKeyAscii_ath0= # # IP configuration for ath0 # wifi iface of your pc must be in this subnet IP_ath0=192.168.10.1 MASK_ath0=255.255.255.0 # #------------------------------------- # configuring ath1 interface (station) #------------------------------------- # discovering stronger external AP and his dhcpd #ath1_mode=1 # # targeted external AP by SSID ath1_mode=2 #TargetSsid=outdoor-net TargetSsid=Cinigiano-wireless-network # # targeted external AP by MAC #ath1_mode=3 #TargetMac=aa:bb:cc:dd:ee:ff # # targeted external AP via WPA-PSK (WPA personal) # need /etc/wpa_supplicant.conf ! #ath1_mode=4 #TargetWpa=reteprotetta # # targeted external AP via WEP #ath1_mode=5 # key hex or ASCII #WepKeyHex_ath1= #WepKeyAscii_ath1= # target SSID or MAC #TargetWepSsid= #TargetWepMac= # #-------------------------- # static IP config for ath1 #-------------------------- IP_ath1=192.168.1.10 MASK_ath1=255.255.255.0 # default gateway DFGW=192.168.1.1 # name servers NAMESERVER1=151.99.125.2 NAMESERVER2=159.213.32.232 # #--------------------------------------- # configuring eth0 interface (wired lan) #--------------------------------------- #keth0=0 keth0=1 IP_eth0=192.168.10.2 MASK_eth0=255.255.255.0 # #-------------------------- # port forwarding for xMule #-------------------------- #xmule=1 #IP_client_xmule=192.168.10.20 xmule=0 # #btorrent=1 #IP_client_btorrent=192.168.10.20 btorrent=0 # # the end






