Отключить сетевое взаимодействие для определенных пользователей

Отключить сетевое взаимодействие для определенных пользователей

Я работаю над дистрибутивом Ubuntu/Mint, который должен запускаться в режиме Live. Существует несколько учетных записей, которые делятся на три основные группы: Admin, Internet и Security.

  • Админочевидно, что он имеет полномочия делать что угодно.
  • Интернетучетная запись предназначена для использования Интернета.

Другие счетаБезопасностьучетные записи. Ни при каких обстоятельствах не допускается использование сетевых устройств Интернет, принтеров, Bluetooth, WiFi и т. д.

Я бы хотел удалить сетевые драйверы из ядра, но это отключит учетные записи, которым нужен Интернет.

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

решение1

Это можно сделать с помощью iptables( ip6tables).

До перезагрузки

На терминале добавьте правилоiptables

sudo iptables -A OUTPUT -p all -m owner --uid-owner username -j DROP
sudo ip6tables -A OUTPUT -p all -m owner --uid-owner username -j DROP

гдеимя пользователяэто пользователь, которому вы хотите отключить подключение к Интернету. Сохраните файл и выйдите.

Это добавит правило в iptables( ip6tables), гласящее, что любые исходящие пакеты, созданные указанным пользователем, будут им автоматически удаляться.

Если вы хотите сделать то же самое для всей группы, я предлагаю вам вместо этого --uid usernameиспользовать --gid-owner groupname, это будет иметь тот же эффект для всей группы пользователей.

Так, например, чтобы запретить группе securityдоступ в Интернет, команда будет выглядеть примерно так:

sudo iptables -A OUTPUT -p all -m owner --gid-owner security -j DROP
sudo ip6tables -A OUTPUT -p all -m owner --gid-owner security -j DROP

Постоянный

Чтобы сделать правило постоянным, можно создать скрипт в /etc/network/if-up.d/, добавить в него необходимые строки и сделать его исполняемым.

В качестве опции используйте iptables-save( ip6tables-save), чтобы сохранить текущие правила и восстановить их при загрузке.

Сохранить текущие iptablesправила

sudo iptables-save > /etc/iptables_rules
sudo ip6tables-save > /etc/ip6tables_rules

Откройте файл /etc/rc.localв вашем любимом текстовом редакторе и в конце добавьте

/sbin/iptables-restore < /etc/iptables_rules
/sbin/ip6tables-restore < /etc/ip6tables_rules

Это восстановит сохраненные правила при каждой загрузке. Будьте осторожны, заметив, чтоПользователи, для которых вы заблокировали только соединения IPv4, по-прежнему смогут подключаться к Интернету.

Для получения дополнительной информации и дополнительных iptablesопций обратитесь к егостраница руководства.

решение2

Решение Бруно хорошее: я думаю, это, вероятно, лучшее автономное решение.

Другой вариант, который вы можете рассмотреть, — это настроить брандмауэр/прокси на отдельной машине в качестве шлюза в интернет, который разрешает только те соединения, которые обеспечивают аутентификацию для каждого пользователя. Вы можете использовать оба варианта вместе для дополнительной защиты.

решение3

Еслиfirewalldявляется частью вашей настройки, вы можете заблокировать сетевой доступ для определенного пользователя, используя прямое правило, например:

/etc/firewalld/direct.xml
‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
<?xml version="1.0" encoding="utf-8"?>
<direct>
  <chain ipv="ipv4" 
         table="filter" 
         chain="restrict_user_ipv4"/>
  <rule ipv="ipv4" 
        table="filter" 
        chain="OUTPUT" 
        priority="1">-m owner --uid-owner user -j restrict_user_ipv4</rule>
  <rule ipv="ipv4" 
        table="filter" 
        chain="restrict_user_ipv4" 
        priority="3">-j DROP</rule>
  <chain ipv="ipv6" 
         table="filter" 
         chain="restrict_user_ipv6"/>
  <rule ipv="ipv6" 
        table="filter" 
        chain="OUTPUT" 
        priority="1">-m owner --uid-owner user -j restrict_user_ipv6</rule>
  <rule ipv="ipv6" 
        table="filter" 
        chain="restrict_user_ipv6" 
        priority="3">-j DROP</rule>
</direct>

Не забудьте перезагрузить с помощью

# firewall-cmd --reload

Рекомендации

Связанный контент