Jak ograniczyć dostęp do Internetu dla konkretnego użytkownika w sieci LAN za pomocą iptables w systemie Linux

11

Załóżmy, że w sieci LAN jest dwóch użytkowników, A i B. Jak ograniczyć dostęp użytkownika A do Internetu za pomocą reguł iptables i zapisania reguł, aby po ponownym uruchomieniu nadal działały. Załóżmy również, że chcę przyznać temu użytkownikowi dostęp w pewnym momencie; jak mogę to włączyć ponownie? Korzystam z systemu Ubuntu Linux 10.04. Byłoby miło, gdyby ktoś pokazał mi, jak to zrobić z wiersza polecenia, ponieważ często loguję się na maszynie przy użyciu lokalnego logowania ssh.

Marwan Tanager
źródło

Odpowiedzi:

17

Zakładam, że użytkownicy A i B używają tych samych maszyn z systemem Linux, na których jesteś administratorem. (Z twojego pytania nie wynika to całkowicie. Jeśli A i B mają własne komputery, na których są administratorami, jest to zupełnie inny problem).

Następujące polecenie uniemożliwi użytkownikowi z identyfikatorem UID 1234 wysyłanie pakietów przez interfejs eth0:

iptables -t mangle -A OUTPUT -o eth0 -m owner --uid-owner 1234 -j DROP

Zalecam przeczytanie przewodnika Ubuntu iptables, aby uzyskać podstawową znajomość narzędzia (i zajrzyj na stronę podręcznika, aby uzyskać zaawansowane informacje, takie jak tablica z maglami).

Użytkownik nadal będzie mógł uruchomić ping (ponieważ jest to setuid root), ale nic więcej. Użytkownik nadal będzie mógł połączyć się z lokalnym serwerem proxy, jeśli serwer proxy został uruchomiony przez innego użytkownika.

Aby usunąć tę regułę, dodaj -Ddo powyższego polecenia.

Aby reguła stała się trwała, dodaj ją do /etc/network/if-up.d/my-user-restrictions(aby skrypt wykonywalny zaczynał się od #!/bin/sh). Lub użyj iptables-save( więcej informacji znajdziesz w przewodniku Ubuntu iptables ).

Gilles „SO- przestań być zły”
źródło
Dziękuję Ci bardzo. I tak, twoje założenia są prawdziwe. Opierając się na twojej odpowiedzi i wspomnianym przewodniku ubuntu, jest to, że właściwym sposobem robienia rzeczy, jeśli chciałbym również przyznać dostęp ssh ograniczonemu użytkownikowi (czasami chcę się zalogować przy użyciu jego konta przez ssh): iptables -t mangle -A OUTPUT - o eth0 -m właściciel --uid-właściciel 1234 -p tcp --port ssh -j AKCEPTUJ iptables -t mangle -A WYJŚCIE -o eth0 -m właściciel --uid-właściciel 1234 -j DROP Umieściłem te reguły tak jak w wspomniany plik i rzeczy wydają się działać dobrze.
Marwan Tanager
@Marwan Myślę, że to prawda. Zauważ, że jeśli zezwolisz na dostęp ssh, zezwolisz na prawie wszystko, ponieważ ssh może w trywialny sposób tunelować inne protokoły.
Gilles 'SO - przestań być zły'
0

Nie użyłbym do tego iptables.

Zakładam, że A i B są powiązane ze stałymi adresami IP ClientA i ClientB. Zakładam, że Twoim internetowym serwerem proxy jest ServerI (Twój Ubuntu-Server?).

Dodałbym więc wpis routingu odmowy / upuszczenia z ClientA do ServerI.

Nie używam Ubuntu - więc nie mogę powiedzieć, którego pliku konfiguracji użyć, aby to ustawienie było trwałe (przetrwanie ponownego uruchomienia).

Być może ktoś może dodać ten szczegół?

Nils
źródło