Назад | Перейти на главную страницу

Как вы используете брандмауэр Linux, чтобы непривилегированные учетные записи могли получать доступ только к сети?

У меня есть сервер Debian, который позволяет пользователям входить в систему. Я не возражаю против их доступа в Интернет или загрузки файлов, но я хочу иначе ограничить их доступ в Интернет с этой машины. Как мне настроить IPTABLES или другой брандмауэр, чтобы эта функция работала легко?

На самом деле это чрезвычайно сложно с технической точки зрения (сетевой уровень обычно ничего не знает о пользователях; в сетевом пакете нет поля «пользователь»).

Но Linux, будучи совершенно потрясающим, действительно предлагает вам решение. Вам понадобится модуль iptables "owner" и следующие правила:

iptables -A OUTPUT -o eth0 -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -o eth0 -m owner --uid-owner 500 -j DROP

Где «500» - это UID пользователя, которого вы хотите заблокировать от попадания в сеть. Первое правило просто разрешает весь исходящий трафик порта 80.

Возможно, вам нужно загрузить модуль владельца, прежде чем это заработает:

modprobe ipt_owner

Итак, добавьте это в свой файл rc.local или аналогичный. Это, конечно, предполагает, что в вашей системе установлен этот модуль. Я не знаю, какой пакет предоставляет это в Debian. Это может быть стандартный пакет iptables.

Другой вариант - настроить прокси-сервер (Squid) где-нибудь, который разрешает общий анонимный доступ в Интернет, но требует входа в систему, чтобы делать что-либо еще. Затем заблокируйте доступ с вашего сервера на брандмауэре, но разрешите прокси.

Если у вас есть только одна машина, я бы повторил предложение Swelljoe. Или объедините две идеи и сделайте все более детальным, если хотите :)

Я подозреваю, что вы просто заблокируете все входящие и исходящие порты для хоста, кроме портов 22 (ssh) и 80 (веб). Если вы используете этот компьютер для себя, а также помогаете некоторым друзьям учиться и вам требуются такие вещи, как электронная почта, обмен мгновенными сообщениями и т. Д., Я бы рекомендовал создать специальную группу только для них, которая может получить доступ только к определенному списку приложений. Я думаю, вам может потребоваться указать, является ли это автономным сервером или рабочей станцией для вас + сервер для них.

Вы можете использовать для этого политику SELinux, но, к сожалению, настроить ее немного сложнее, чем решение iptables.

Однажды я сделал это, используя комбинацию squid и "name" - действительно старый linux / unix-сервис, который предоставляет текущее имя пользователя. Вообще говоря, имя - действительно плохая идея (так как оно не зашифровано и его можно легко изменить; оно используется irc btw), но для известного набора машин оно работает довольно хорошо

Вы ищете прокси вместе с правилами iptables. Используйте iptables для ограничения доступа к порту и перенаправления трафика на прокси. В прокси-сервере вы фильтруете контент, который вы хотите / не хотите получать. (Модуль владельца работает только с пакетами, созданными на самом брандмауэре, но не с пакетами, поступающими из вашей сети.)