ASUS
Obsah
Skriptiky/Watchdogy
Watchdog pro klienta
#!/bin/sh if ! $(wl bssid > /dev/null 2>&1); then wl ssid $(nvram get wl0_ssid) fi
Je potřeba ho pravidelně spouštět. Kontroluje jestli je ASUS jako klient správně asociován na AP.
Maškaráda
Pár skriptů, které usnadní maškarádování některých IP do internetu - správce může snadno dočasně povolit internet některému připojenci.
- /usr/local/sbin/acc_enable
#!/bin/sh if [ "$1" != "" ]; then iptables -t nat -A POSTROUTING -o eth2 -d 10.107.4.100 -s $1 -j MASQUERADE iptables -t nat -A POSTROUTING -o eth2 -d ! 10.107.0.0/16 -s $1 -j MASQUERADE echo $1 byl povolen přístup do internetu. else echo "Použití: enable IP.AD.RE.SA" fi
- /usr/local/sbin/acc_disable
#!/bin/sh if [ "$1" != "" ]; then iptables -t nat -D POSTROUTING -o eth2 -d ! 10.107.0.0/16 -s $1 -j MASQUERADE iptables -t nat -D POSTROUTING -o eth2 -d 10.107.4.100 -s $1 -j MASQUERADE echo $1 byl zakázán přístup do internetu. else echo "Použití: disable IP.AD.RE.SA" fi
- /usr/local/sbin/acc_list
#!/bin/sh iptables -t nat -L POSTROUTING
Databáze
Možná je tento nadpis trochu nadnesený, ale v podstatě jde o jede soubor, ve kterém je shromaždiště všech potřebných údajů pro generování konfiguráků. Vychází z ní několik mých skriptů.
databáze je soubor uložený v /usr/local/root/db má následující formát:
xx:xx:xx:xx:xx:xx 10.107.3.66 0 013 Lada Pecho \ xx:xx:xx:xx:xx:xx 10.107.3.67 0 013 TOM Pecho \ atd...
MAC adresa, IP adresa, maškarádovat, ID, DNS, pravé jméno, lomítko
můžeme vytvořit konfiguráky pro DHCP server, DNS server, rychlé dočasné puštění internetu trubkou správce, změna MAC adres...
dbparse
#!/bin/sh
db=/usr/local/root/db
tmp=/tmp/tmp
accscript=/usr/local/sbin/acc_script
hosts=/etc/hosts
ethers=/etc/ethers
# OpenWRT
hostsprev=/etc/hosts_tmp
ethersprev=/etc/ethers_tmp
# Oleguv
#hostsprev=/usr/local/etc/hosts_tmp
#ethersprev=/usr/local/etc/ethers_tmp
#hosts2=/usr/local/etc/hosts
#ethers2=/usr/local/etc/ethers
#
echo "#!/bin/sh" > $accscript
echo "iptables -t nat -F POSTROUTING" >> $accscript
chmod +x $accscript
rm $hosts > /dev/null
rm $ethers > /dev/null
cp $hostsprev $hosts > /dev/null
cp $ethersprev $ethers > /dev/null
read db < $db
echo $db > $tmp
while read MAC IP ACC ID DNS NAME rest < $tmp && [ "$MAC" != "" ]; do
echo $MAC $IP >> $ethers
echo $IP $DNS.JNet.hkfree.org >> $hosts
if [ "$ACC" -eq "1" ]; then
echo "/usr/local/sbin/acc_enable $IP" >> $accscript
fi
echo $rest > $tmp;
done
rm $tmp
# Oleguv
# cp $ethers $ethers2
# cp $hosts $hosts2
/usr/local/sbin/acc_script
killall -HUP dnsmasq
Vygeneruje konfiguráky pro dnsmasq. Pro Olegův firmware odstraňte komentáře. Aby se v Olegově firmwaru změny projevily i po rebootu, je potřeba do post-boot přidat:
# backup the original content of /etc mkdir /etc/bak cp /etc/* /etc/bak # copy customized /etc and parse db cp /usr/local/etc/* /etc # /usr/local/sbin/dbparse boot # restart DHCP & DNS killall dnsmasq /usr/sbin/dnsmasq -l /etc/linuxigd/dnsmasq.log
V OpenWRT není třeba dělat nic!
Aby se zaplo i maškarádování, tak dejte do post-firewall pro Oleguv firmware, nebo
/etc/init.d/S44post-firewall
# process masquerading script /usr/local/sbin/acc_script
cgi-bin/mac
Tento skript umožní uživatelům si změnit svou MAC adresu. Je důležité, aby s cizí MAC dostali IP, ze které mohou kontaktovat web server a spustit skript. Ten zkontroluje, jestli je jejich MAC neznámá a jestli mají název počítače nastaven tak, jak mají - to je hlavní identifikátor. tenhle skript neřeší moc bezpečnost, ale spíše pohodlí uživatelů.
Uložte ho do složky cgi-bin, kde máte web server. V ASUSu ho nahodíte příkazem httpd nebo busybox_httpd.
#!/bin/sh
maclog=/tmp/mac.log
tmp=/tmp/tmpmac
# OpenWRT
log=/tmp/dnsmasq.leases
# Oleg
#log=/etc/linuxigd/dnsmasq.log
db=/usr/local/root/db
ethers=/etc/ethers
dbbak=/tmp/dbbak
echo "Content-type: text/plain"
echo ""
if [ "$REMOTE_ADDR" = "" ]; then
echo Spoustej POUZE pres www rozhrani !!!!
exit
fi
grep $REMOTE_ADDR $log > $tmp
read TIME MAC IP DNS BADMAC < $tmp
rm $tmp
if [ "$MAC" = "" ]; then
echo "Vasi aktualni MAC se nepodarilo zjistit, pouzijte DHCP server!"
echo $(date "+%d.%m.%y %H:%M:%S") $REMOTE_ADDR unknown MAC >> $maclog
exit
fi
if [ "$DNS" = "*" ]; then
SEARCH=$MAC
else
SEARCH=$DNS
fi
grep -i $SEARCH $db > $tmp
read DBMAC DBIP ACC ID DBDNS DBNAME < $tmp
rm $tmp
if [ "$MAC" = "$DBMAC" ]; then
echo "Vase MAC adresa $DBMAC je jiz v systemu zanesena."
echo $(date "+%d.%m.%y %H:%M:%S") $REMOTE_ADDR $MAC $DNS already in db >> $maclog
exit
else
# echo "Vase MAC byla zjistena..."
NOMAC=1
fi
if [ "$DNS" = "$DBDNS" ]; then
# echo "Vase PC bylo identifikovano podle jmena."
IDOK=1
else
echo "Vas pocitac nelze identifikovat! (Mate spravne nastaveny nazev pocitace?)"
echo "Nastaveni najdete v sekci \"Pro nove uzivatele\" -> \"Nastaveni pocitace\""
echo $(date "+%d.%m.%y %H:%M:%S") $REMOTE_ADDR $MAC $DNS name unknown >> $maclog
fi
if [ "$NOMAC" = "1" ] && [ "$IDOK" = "1" ]; then
sed "s/$DBMAC $DBIP/$MAC $DBIP/" $db > $tmp
mkdir -p $dbbak
cp $db $dbbak/$(date +%y.%m.%d_%H:%M:%S)
cp $tmp $db
rm $tmp
sed "s/$DBMAC $DBIP/$MAC $DBIP/" $ethers > $tmp
cp $tmp $ethers
rm $tmp
killall -HUP dnsmasq
echo "Vase MAC adresa sitove karty byla uspesne zanesena do databaze."
echo "$DBMAC -> $MAC"
echo "Zmena se projevi do 20 minut."
echo $(date "+%d.%m.%y %H:%M:%S") $REMOTE_ADDR $MAC $DNS success, old mac was $DBMAC >> $maclog
fi
Oleguv firmware
Pro základní nastavení použít web rozhraní.
Kam přidat vlastní nastavení:
/usr/local/sbin/post-boot /usr/local/sbin/post-firewall (inicializace iptables)
(u FW starších než 1.8.x.x je místo sbin init)
Pro pravidelné provádění skriptů, stačí do post-boot přidat
watch -n 60 /usr/local/sbin/skript
kde 60 je 60 sekund
OpenWrt
Pro základní nastavení použít telnet a příkaz setup. Heslo se mění příkazem passwd.
Kam přidat vlastní nastavení:
/etc/init.d/ vlastní skripty pojmenovat jako SXXNazev kde XX je cislo
Pro pravidelné spouštění skriptů slouží crontab
crontab -e
spustí vi editor, řadky mají tento formát:
* * * * * příkaz
kde místo hvězdiček mohou být i čísla oddělené čarkami, nebo rozsah čísel v pomlčkách. Pořadí čísel je minuta (0-59), hodina (0-23), den v měsíci (1-31), měsíc (1-12), den v týdnu (1-7)
Pozor! Čas je v OpenWRT posunutý o hodinu dozadu.
Samba
K čemu? Bude se chovat jako browse master a obsluhovat procházení sítí. Nikdy se pak nestane, že člověk s nahozeným firewallem shodí síť Microsoft.
V Olegově firmwaru stačí nadefinovat hostname, upravit správně konfigurační soubor /etc/smb.conf
Já používám tento:
[global]
netbios name = nameserver
workgroup = JNET
guest account = nobody
security = share
browseable = yes
guest ok = yes
guest only = yes
#log level = 1
max log size = 100
encrypt passwords = no
dns proxy = no
#wins support = yes
#wins proxy = yes
domain master = yes
os level = 99
preferred master = yes
hodnotu "netbios name" a pracovní skupinu si nastavte podle své situace. Dále je důležité mít nadefinovaný hostname v routru a mít pro něj správný záznam v /etc/hosts.
V /etc/hosts musíte mít řádek
IP.AD.RE.SA hostname
Oleguv FW by to měl mít automaticky, ale raději to omrkněte. (pokud máte mojí databázi, tak to už neplatí ;))
A pak spustit nmbd a smbd (obojí je kupodivu potřeba pro správné procházaení sítě)
nmbd -D -d 3 smbd -D
parametr -d 3 zapne vypisování logů do
/var/log/
Pozorovali jsme jev, kdy některé XP počítače ze seznamu okolních PC zmizely za 4 hodiny provozu. Po znovuspuštění samby se opět oběvují, proto jsem napsal skript:
/usr/local/sbin/sambakill
#!/bin/sh killall nmbd killall smbd /tmp/nmbd -D -d 3 /tmp/smbd -D -d 3
Ten spouštějte každou půlhodinu tak, že do post-boot přidáte řádku
watch -n 3600 /usr/local/sbin/sambakill
pro OpenWRT otevřít crontab -e a přidat řádek
0,30 * * * * /usr/local/sbin/sambakill
Pro OpenWRT je nastavení obdobné, ale je potřeba sambu zkompilovat. Díky za to zaslouží martink, protože mi sambu pro OpenWRT zkompiloval on, wiki návod snad bude brzy ;) Binárky mám na charonu. Jak jsem předpokládal, tak se binárky do OpenWRT nevejdou, takže zbývá je po bootu stáhnout do RAM, nebo přechovávat na flashdisku.
vytvořte skript /usr/local/sbin/sambadl
#!/bin/sh wget -P /tmp http://charon.hkfree.org/~okoun/smb/smbd && \ wget -P /tmp http://charon.hkfree.org/~okoun/smb/nmbd && \ chmod +x /tmp/smbd /tmp/nmbd && \ touch /tmp/samba if [ ! -e /tmp/samba ]; then sleep 60 . $0& else mkdir /tmp/lock /usr/local/sbin/sambakill fi
A třeba do /etc/init.d/S60post-boot přidejte řádku
/usr/local/sbin/sambadl&
takže se skript spustí po bootu a pokusí se stáhnout binárky každou minutu dokuč se to nepovede. Pak vytvoří složku /tmp/lock a sambu spustí.
Poznámka na konec - všechny skripty musejí mít právo se spustit - to se dělá příkazem chmod +x skript.