Strona 1 z 3

iptables - filtrowanie dostępu do sieci po adresach MAC

: 04 października 2011, 10:08
autor: Jarod
Głównym celem poniższej konfiguracji jest zapewnienie dostępu do Internetu tylko tym komputerom, których adresy IP zostały powiązane z adresem MAC.
Poniżej znajduje się uproszczona wersja skryptu (eth1 -> LAN, eth0 -> WAN)


Problem: Jeżeli mam komputer o adresie IP 192.168.1.102 i adresie MAC 40:61:86:AE:FE:0A to regułka

Kod: Zaznacz cały

$IPTABLES -I FORWARD -i eth1 -s 192.168.1.102 -p tcp -m multiport --dport 80,443 -m mac --mac-source 40:61:86:AE:FE:0A -j ACCEPT
zezwala użytkownikowi na komunikację tylko po porcie 80,443 i działa super.

Jeżeli powyższego wpisu nie będzie, lub użytkownik ustawi sobie IP ręcznie na dowolny inny, wolny ma ruch po dowolnym porcie.
Jak zablokować ruch w sieci komputerom, które nie zostały ręcznie dodane do konfiguracji?

Kod: Zaznacz cały

echo "Starting firewall..."
IPTABLES=/sbin/iptables

$IPTABLES -t filter -F
$IPTABLES -t nat -F
$IPTABLES -t mangle -F
$IPTABLES -X
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD DROP



[B]##### USERS[/B]
#jan.kowalski
$IPTABLES -I FORWARD -i eth1 -s 192.168.1.102 -p tcp -m multiport --dport 80,443 -m mac --mac-source 40:61:86:AE:FE:0A -j ACCEPT
$IPTABLES -I FORWARD -i eth1 -s 192.168.1.102 -p udp --dport 53 -m mac --mac-source 40:61:86:AE:FE:0A -j ACCEPT
(...)
(...)
(...)
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

$IPTABLES -t nat -A POSTROUTING -o eth0 -s [url=http://192.168.1.0/24]192.168.1.0/24[/URL] -j MASQUERADE

[B]echo "Firewall started..."[/B]


: 04 października 2011, 11:37
autor: mariaczi

Kod: Zaznacz cały

echo "Starting firewall..."

...

##### USERS MAC CONTROL
$IPTABLES -N MACCNTRL
$IPTABLES -A MACCNTRL -s 192.168.1.102 -m --mac-source 40:61:86:AE:FE:0A -j RETURN
(...)
(...)
(...)
(...)
$IPTABLES -A MACCNTRL -j DROP

[B]##### USERS[/B]
#jan.kowalski
$IPTABLES -I FORWARD -i eth1 -s 192.168.1.0/24 -p tcp -m multiport --dport 80,443 -j MACCNTRL
$IPTABLES -I FORWARD -i eth1 -s 192.168.1.0/24 -p udp --dport 53 -j MACCNTRL
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

$IPTABLES -t nat -A POSTROUTING -o eth0 -s [url=http://192.168.1.0/24]192.168.1.0/24[/URL] -j MASQUERADE

[B]echo "Firewall started..."[/B]

: 04 października 2011, 12:00
autor: Jarod
Powinno być chyba

Kod: Zaznacz cały

$IPTABLES -A MACCNTRL -j ACCEPT
zamiast DROP ?

Powiedz mi czy to się różni od tego co mam? Muszę tworzyć osobny łańcuch? Bez osobnego łańcucha nie zadziała?

: 04 października 2011, 12:28
autor: Bastian
No jak ACCEPT? Jak ustawisz ACCEPT w powyższym skrypcie to wpuscisz wszytkich.

: 04 października 2011, 12:50
autor: Jarod
Dobrze, ale gdzie w moim skrypcie jest błąd? Co zrobiłem źle?
Jest jeszcze jedna kwestia - mam generalnie 8 "grup" użytkowników, każda z grup ma puszczone inne porty. Więc musiałbym tworzyć 8 łańcuchów.

: 04 października 2011, 13:36
autor: Bastian

Kod: Zaznacz cały

$IPTABLES -I FORWARD -i eth1 -s 192.168.1.102 -p tcp -m multiport --dport 80,443 -m mac --mac-source 40:61:86:AE:FE:0A -m state --state NEW -j ACCEPT

Kod: Zaznacz cały

$IPTABLES -I FORWARD -i eth1 -s 192.168.1.102 -p udp --dport 53 -m mac --mac-source 40:61:86:AE:FE:0A -m state --state NEW -j ACCEPT

: 04 października 2011, 14:16
autor: Jarod
Do tej reguły będzie pasował każdy komputer wpięty do sieci, próbujący nawiązać połączenie...

: 04 października 2011, 20:08
autor: Bastian
Jarod pisze:Do tej reguły będzie pasował każdy komputer wpięty do sieci, próbujący nawiązać połączenie...
Do której?

: 05 października 2011, 16:02
autor: Jarod
Źle się wyraziłem. Nic nie da dopisanie do każdej reguły:

Kod: Zaznacz cały

-m state --state NEW

Faktycznie pozostaje tylko rozwiązanie jakie przedstawił mariaczi.

Dziękuje.

: 10 października 2011, 08:42
autor: Jarod
mariaczi, niestety to nie działa. Wszystkie regułki przepisałem na nowo, uporządkowałem.
Jeśli po załadowaniu polityki dodam regułę:

Kod: Zaznacz cały

$IPTABLES -A FORWARD -i eth1 -s 192.168.1.0/24 -p tcp -j ACCEPT;
Każdy użytkownik ma dostęp do internetu.

Jeżeli zamiast tego zrobię tak:

Kod: Zaznacz cały

...
...
...
$IPTABLES -N MACCONTROL
$IPTABLES -A MACCONTROL -s 192.168.1.2 -m mac --mac-source AA:BB:CC :D D:EE.FF -j RETURN
$IPTABLES -A MACCONTROL -s 192.168.1.3 -m mac --mac-source AA:BB:CC :D D:EE.GG -j RETURN
$IPTABLES -A MACCONTROL -s 192.168.1.4 -m mac --mac-source AA:BB:CC :D D:EE.HH -j RETURN
$IPTABLES -A MACCONTROL -j DROP
...
...
...
$IPTABLES -I FORWARD -i eth1 -s 192.168.1.0/24 -p tcp -j MACCONTROL
...
...
...
Użytkownicy nie mają dostępu. Ping nigdzie nie dochodzi, a połączenie w przeglądarce jest resetowane.