Mactab: Porovnání verzí
m |
|||
(Nejsou zobrazeny 3 mezilehlé verze od stejného uživatele.) | |||
Řádek 54: | Řádek 54: | ||
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ě. | 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ě. | ||
+ | |||
+ | Nyní stále není filtrování aktivní, stále jsme v testovacím režimu. | ||
==Datový soubor== | ==Datový soubor== | ||
Řádek 103: | Řádek 105: | ||
==Jak to funguje== | ==Jak to funguje== | ||
+ | |||
+ | Z datového souboru se vytváří 2 věci: | ||
+ | - MAC filtr na úrovni wifi, pokud se zařízení jmenuje wlan*; volá se ''iwpriv wlan0 maccmd 1'' a ''iwpriv wlan0 addmac aa:aa:aa:aa:aa:aa'' | ||
+ | - Chain v iptables označený MACFILTR.wlan0 | ||
+ | |||
+ | 1. MAC filtr na úrovni wifi | ||
+ | |||
+ | shell# cat /proc/net/hostap/wlan0/ap_control | ||
+ | MAC policy: allow | ||
+ | MAC entries: 40 | ||
+ | MAC list: | ||
+ | 00:60:b3:- | ||
+ | 00:60:b3:- | ||
+ | 00:4f:62:- | ||
+ | ... | ||
+ | |||
+ | 2. Chain v iptables | ||
V iptables se vytvoří následující záznamy (MAC adresy jsou zde ořezány): | V iptables se vytvoří následující záznamy (MAC adresy jsou zde ořezány): | ||
− | Chain MACFILTR (2 references) | + | Chain MACFILTR.wlan0 (2 references) |
num pkts bytes target prot opt in out source destination | num pkts bytes target prot opt in out source destination | ||
1 66364 5605K RETURN all -- * * 10.107.15.1 0.0.0.0/0 | 1 66364 5605K RETURN all -- * * 10.107.15.1 0.0.0.0/0 | ||
Řádek 137: | Řádek 156: | ||
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 ' | 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 | 29 556 59846 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited | ||
+ | |||
+ | Každý paket, který přišel z wlan0, postupně shora prochází tato pravidla. Pokud na některém vyhovují všechny podmínky (zde jsou to dvě: source IP a MAC adresa), provede se pravidlo RETURN, tj. paket je přijat (není-li posléze v INPUTu nebo FORWARDu uvedeno jinak). | ||
+ | |||
+ | Špatný paket, který nevyhoví žádnému pravidlu, dojde na poslední 2 pravidla: LOG (zapíšeme ho do syslogu) a REJECT (odmítneme ho). | ||
+ | |||
+ | Pravidlo REJECT zde způsobí úplné odpojení od sítě těm připojencům, které jsme do datového souboru nezadali. V testovacím provozu (# keep:open) zde REJECT chybí. | ||
+ | |||
+ | Ve sloupci '''pkts''' je počítadlo paketů, které danému pravidlu vyhověly. Pokud např. pingneme na 10.107.15.9, vidíme, že v řádku 19 se počítadlo pomalu zvyšuje. | ||
+ | |||
+ | ==Autor== | ||
+ | --[[Uživatel:VojtaLhota|VojtaLhota]] 12:40, 23. 2. 2007 (CET) |
Aktuální verze z 23. 2. 2007, 12:40
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ě.
Nyní stále není filtrování aktivní, stále jsme v testovacím režimu.
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
Z datového souboru se vytváří 2 věci: - MAC filtr na úrovni wifi, pokud se zařízení jmenuje wlan*; volá se iwpriv wlan0 maccmd 1 a iwpriv wlan0 addmac aa:aa:aa:aa:aa:aa - Chain v iptables označený MACFILTR.wlan0
1. MAC filtr na úrovni wifi
shell# cat /proc/net/hostap/wlan0/ap_control MAC policy: allow MAC entries: 40 MAC list: 00:60:b3:- 00:60:b3:- 00:4f:62:- ...
2. Chain v iptables
V iptables se vytvoří následující záznamy (MAC adresy jsou zde ořezány):
Chain MACFILTR.wlan0 (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
Každý paket, který přišel z wlan0, postupně shora prochází tato pravidla. Pokud na některém vyhovují všechny podmínky (zde jsou to dvě: source IP a MAC adresa), provede se pravidlo RETURN, tj. paket je přijat (není-li posléze v INPUTu nebo FORWARDu uvedeno jinak).
Špatný paket, který nevyhoví žádnému pravidlu, dojde na poslední 2 pravidla: LOG (zapíšeme ho do syslogu) a REJECT (odmítneme ho).
Pravidlo REJECT zde způsobí úplné odpojení od sítě těm připojencům, které jsme do datového souboru nezadali. V testovacím provozu (# keep:open) zde REJECT chybí.
Ve sloupci pkts je počítadlo paketů, které danému pravidlu vyhověly. Pokud např. pingneme na 10.107.15.9, vidíme, že v řádku 19 se počítadlo pomalu zvyšuje.
Autor
--VojtaLhota 12:40, 23. 2. 2007 (CET)