Як обмежити доступ до Інтернету для конкретного користувача на локальній мережі за допомогою iptables в Linux


11

Скажімо, є два користувачі в локальній мережі, A і B. Як я обмежую користувача A від доступу до Інтернету, використовуючи правила iptables та зберігаючи правила, щоб після перезавантаження вони були ефективними. Припустимо також, що я хочу надати цьому користувачеві доступ в якийсь момент; як я ввімкну це знову? Я використовую Ubuntu Linux 10.04. Було б добре, якщо хтось покаже мені, як це зробити з командного рядка, так як я часто входжу в систему на машині, використовуючи локальний sh-логін.

Відповіді:


17

Я припускаю, що користувачі A і B використовують ті самі машини Linux, де ви адміністратор. (Це не зовсім зрозуміло з вашого запитання. Якщо A і B мають власні комп’ютери, на яких вони є адміністраторами, це зовсім інша проблема.)

Наступна команда перешкоджає користувачеві з uid 1234 надсилати пакети через інтерфейс eth0:

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

Я рекомендую прочитати посібник з iptables для Ubuntu, щоб ознайомитись з інструментом (та зверніться до сторінки man для додаткових речей, таких як таблиця mangle).

Користувач все ще зможе запустити ping (адже це встановлений корінь), але нічого іншого. Користувач все ще зможе підключитися до локального проксі, якщо цей проксі був запущений іншим користувачем.

Щоб видалити це правило, додайте -Dдо команди вище.

Щоб правило стало постійним, додайте його до /etc/network/if-up.d/my-user-restrictions(зробіть цей виконуваний сценарій, починаючи з #!/bin/sh). Або скористайтеся iptables-save(див. Посібник з iptables Ubuntu для отримання додаткової інформації).


Велике спасибі. І так, ваші припущення вірні. Виходячи з вашої відповіді та згаданого посібника з ubuntu, полягає в тому, що правильний спосіб робити речі, якщо я хотів би також надати обмежений доступ користувача ssh (іноді я хочу увійти, використовуючи його акаунт через ssh): iptables -t mangle -A OUTPUT - o eth0 -m власник --uid-owner 1234 -p tcp --portport ssh -j ACCEPT iptables -t mangle -A OUTPUT -o eth0 -m owner --uid-owner 1234 -j DROP Я ставлю ці правила, як у згаданий файл і речі, здається, працюють нормально.
Marwan Tanager

@Marwan Я думаю, що це правильно. Зауважте, що якщо ви дозволяєте доступ до ssh, ви дозволяєте майже все, оскільки ssh може тривіально тунелювати інші протоколи.
Жил 'ТАК - перестань бути злим'

0

Я б не використовував для цього iptables.

Я припускаю, що A і B пов'язані з фіксованими IP-адресами ClientA і ClientB. Я припускаю, що ваш Інтернет-проксі - це сервер (ваш Ubuntu-сервер?).

Тож я б додав запис відхилення / відкидання маршрутизації від ClientA до ServerI.

Я не використовую Ubuntu - тому я не можу сказати вам, який конфігураційний файл використовувати, щоб зробити це налаштування постійним (пережив перезавантаження).

Можливо, хтось може додати цю деталь?

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.