Mactab: Porovnání verzí

Z HKfree wiki
Skočit na navigaci Skočit na vyhledávání
m
 
(Není zobrazeno 6 mezilehlých verzí od stejného uživatele.)
Řádek 1: Řádek 1:
===mactab===
+
===/usr/local/bin/mactab===
 +
 
 +
==Kde to stáhnu?==
 +
http://charon.hkfree.org/~vojta/mactab/
  
 
==K čemu to je?==
 
==K čemu to je?==
Řádek 8: Řádek 11:
 
V uvedených příkladech počítejme s rozhraním wlan0.
 
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/.
+
1. Budeme potřebovat shell script "mactab":
  
 
  # cd /usr/local/bin
 
  # cd /usr/local/bin
Řádek 41: Řádek 44:
  
 
''(zde doporučuju přečíst Jak to funguje dole, pokud si nejste jisti s iptables)''
 
''(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 umožňují sledovat, kolik paketů/dat prošlo jednotlivými pravidky.  
  
Řádek 51: Řádek 55:
 
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 100: Řá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 134: Řá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

/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)