Mactab
Obsah
/usr/local/bin/mactab
Kde to stáhnu?
http://charon.hkfree.org/~vojta/mactab/
K čemu to je?
Mám router s linuxem a na některém jeho rozhraní je větší množství připojenců. Může to být přímo na WiFi (wlan0, ath0) nebo prostřednictvím ethernetu a krabičkového AP (eth0). Každý připojenec má jednu nebo více IP adres. Obvykle dvě - jednu pro svůj "krabičkový" přijímač (AP v režimu klient - ovislink apod), druhou pro svoje PC. Občas se stane, že některý připojenec svoji IP adresu změní a použije adresu někoho jiného. Juraj potom složitě řeší vzniklý konflikt a domlouvá připojencům aby to nedělali. Vojta na to jde od lesa a nainstaluje si mactab.
Instalace - zkušební provoz
V uvedených příkladech počítejme s rozhraním wlan0.
1. Budeme potřebovat shell script "mactab":
# cd /usr/local/bin # wget http://charon.hkfree.org/~vojta/mactab/mactab
2. Datový (konfigurační) soubor umístíme přímo do kořenového adresáře (/) a přidáme koncovku - stejnou jako jméno příslušného rozhraní. Například:
-rw-r--r-- 1 root root 5504 Feb 5 21:03 /mactab.wlan0 -rw-r--r-- 1 root root 8578 Feb 1 10:46 /mactab.eth6
Vzorový kousek pořídíme takto:
wget -o /mactab.wlan0 http://charon.hkfree.org/~vojta/mactab/mactab.wlan0.sample
V souboru se vyskytuje komentář "keep:open"; ten je třeba ponechat až do úplného odladění. Zpravidla to je několik dní; viz Ostrý provoz - níže. Poté do něj zadáme všechny kombinace MAC adres a IP adres, které v síti máme.
3. Poprvé spustíme:
shell$ /usr/local/bin/mactab
Toto je třeba též spouštět po každém startu stroje.
4. Vytvoříme "odkazy" v iptables:
iptables -I INPUT -i wlan0 -j MACFILTR.wlan0 iptables -I FORWARD -i wlan0 -j MACFILTR.wlan0
Pokud vaše distribuce neukládá automaticky iptables, je třeba tyto 2 příkazy spouštět po každém startu stroje.
5. Sledujeme, co se děje
(zde doporučuju přečíst Jak to funguje dole, pokud si nejste jisti s iptables)
Iptables umožňují sledovat, kolik paketů/dat prošlo jednotlivými pravidky.
iptables -L MACFILTR.wlan0 -v -n
nebo komfortněji:
watch -n1 iptables -L MACFILTR.wlan0 -v -n
Podle toho poznáme, že jsme zadali všechny MAC adresy správně. Pokud počítadlo na konci u pravidla LOG (popř. REJECT) roste, něco je špatně.
Datový soubor
Formát souboru s konfigurací:
# Komentář # keep:open <interface> mac <macadresa> ip <ipadresa> <interface> mac <macadresa> ip <ipadresa>[/maska] <interface> + <macadresa> ip <ipadresa> <interface> + <macadresa> ip <ipadresa> # komentář <interface> iptables:allow <parametry>
Příklad:
# MAC/IP filtr pro AP honidolni.hkfree.org # keep:open wlan0 iptables:allow -s 10.107.15.40/29 # Primy kod pro iptables (tvrde povoleni nekterych rozsahu) wlan0 iptables:allow -s 10.107.72.0/26 wlan0 mac 00:4F:69:--:--:-- ip 10.107.55.8/31 # 1535 Tonda Skocdopole wlan0 mac 00:0B:6B:--:--:-- ip 10.107.55.19 # 397 Radim Nekvasil wlan0 mac + ip 10.107.55.20 wlan0 mac 00:4F:69:--:--:-- ip 10.107.55.47 # 418 Petr Rychly wlan0 mac + ip 10.107.55.48 wlan0 mac 00:4F:69:--:--:-- ip 10.107.55.28/31 # 439 Joska Pomaly wlan0 mac + ip 10.107.55.30 wlan0 mac + ip 10.107.55.71 wlan0 mac 00:4F:69:--:--:-- ip 10.107.55.21 # 1474 Jack the Master wlan0 mac + ip 10.107.55.22 wlan0 mac + ip 10.107.55.240/29 wlan0 mac 00:80:48:--:--:-- ip any # privilegovane MAC adresy - muzou vsechno wlan0 mac 00:60:B3:--:--:-- ip any wlan0 mac 00:60:B3:--:--:-- ip any
Ostrý provoz
Do ostrého provozu přejdeme tím, že z datového souboru (/mactab.xxx) odstraníme komentářový řádek
# keep:open
a reloadneme to:
shell$ /usr/local/bin/mactab
Od této chvíle jsou nevyhovující pakety odmítány (pomocí -j REJECT)
Troubleshooting
todo
Jak to funguje
V iptables se vytvoří následující záznamy (MAC adresy jsou zde ořezány):
Chain MACFILTR (2 references) num pkts bytes target prot opt in out source destination 1 66364 5605K RETURN all -- * * 10.107.15.1 0.0.0.0/0 2 4149 379K RETURN all -- * * 10.107.55.129 0.0.0.0/0 3 0 0 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0 MAC 00:04:E2:- 4 0 0 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0 MAC 00:04:E2:- 5 0 0 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0 MAC 00:60:B3:- 6 0 0 RETURN all -- * * 10.107.15.2 0.0.0.0/0 MAC 00:60:B3:- 7 0 0 RETURN all -- * * 10.107.15.2 0.0.0.0/0 MAC 00:90:4B:- 8 0 0 RETURN all -- * * 10.107.15.2 0.0.0.0/0 MAC 00:0B:6B:- 9 127 5092 RETURN all -- * * 10.107.15.11 0.0.0.0/0 MAC 00:03:2F:- 10 98614 18M RETURN all -- * * 10.107.15.12 0.0.0.0/0 MAC 00:00:B4:- 11 150K 19M RETURN all -- * * 10.107.15.3 0.0.0.0/0 MAC 00:06:4F:- 12 506K 77M RETURN all -- * * 10.107.15.4 0.0.0.0/0 MAC 00:12:0E:- 13 29487 2408K RETURN all -- * * 10.107.15.5 0.0.0.0/0 MAC 00:90:CC:- 14 1763K 1081M RETURN all -- * * 10.107.15.6 0.0.0.0/0 MAC 00:90:CC:- 15 422 138K RETURN all -- * * 10.107.15.7 0.0.0.0/0 MAC 00:0E:2E:- 16 3616 3724K RETURN all -- * * 10.107.15.8 0.0.0.0/0 MAC 00:0E:2E:- 17 83707 7033K RETURN all -- * * 10.107.55.135 0.0.0.0/0 MAC 00:0E:2E:- 18 174K 20M RETURN all -- * * 10.107.55.136/31 0.0.0.0/0 MAC 00:0E:2E:- 19 60150 5048K RETURN all -- * * 10.107.15.9 0.0.0.0/0 MAC 00:90:CC:- 20 2716K 569M RETURN all -- * * 10.107.15.10 0.0.0.0/0 MAC 00:90:CC:- 21 0 0 RETURN all -- * * 10.107.15.13 0.0.0.0/0 MAC 00:0C:41:- 22 429K 237M RETURN all -- * * 10.107.55.130/31 0.0.0.0/0 MAC 00:0E:2E:- 23 182K 20M RETURN all -- * * 10.107.55.132/31 0.0.0.0/0 MAC 00:12:0E:- 24 356K 63M RETURN all -- * * 10.107.55.134 0.0.0.0/0 MAC 00:80:48:- 25 0 0 RETURN all -- * * 10.107.15.14 0.0.0.0/0 MAC 00:02:8A:- 26 0 0 RETURN all -- * * 10.107.55.158 0.0.0.0/0 MAC 00:15:F2:- 27 3 1002 RETURN udp -- * * 0.0.0.0/0 255.255.255.255 udp dpt:67 28 556 59846 LOG all -- * * 0.0.0.0/0 0.0.0.0/0 limit: avg 15/sec burst 5 LOG flags 0 level 4 prefix `macfilter-reject ' 29 556 59846 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited