iptables - filtrowanie dost

Masz problemy z siecią bądź internetem? Zapytaj tu
Jarod
Beginner
Posty: 116
Rejestracja: 31 maja 2010, 17:46

iptables - filtrowanie dostępu do sieci po adresach MAC

Post 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]

mariaczi
Member
Posty: 1343
Rejestracja: 08 lutego 2008, 12:58
Lokalizacja: localhost@śląskie

Post 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]
Jarod
Beginner
Posty: 116
Rejestracja: 31 maja 2010, 17:46

Post 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?
Awatar użytkownika
Bastian
Member
Posty: 1424
Rejestracja: 30 marca 2008, 16:09
Lokalizacja: Poznañ

Post autor: Bastian »

No jak ACCEPT? Jak ustawisz ACCEPT w powyższym skrypcie to wpuscisz wszytkich.
Jarod
Beginner
Posty: 116
Rejestracja: 31 maja 2010, 17:46

Post 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.
Awatar użytkownika
Bastian
Member
Posty: 1424
Rejestracja: 30 marca 2008, 16:09
Lokalizacja: Poznañ

Post 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
Jarod
Beginner
Posty: 116
Rejestracja: 31 maja 2010, 17:46

Post autor: Jarod »

Do tej reguły będzie pasował każdy komputer wpięty do sieci, próbujący nawiązać połączenie...
Awatar użytkownika
Bastian
Member
Posty: 1424
Rejestracja: 30 marca 2008, 16:09
Lokalizacja: Poznañ

Post 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?
Jarod
Beginner
Posty: 116
Rejestracja: 31 maja 2010, 17:46

Post 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.
Jarod
Beginner
Posty: 116
Rejestracja: 31 maja 2010, 17:46

Post 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.
ODPOWIEDZ