Mactab

Z HKfree wiki
Skočit na navigaci Skočit na vyhledávání

/usr/local/bin/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" odsud: http://charon.hkfree.org/~vojta/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