Профиль AppArmor: Запретить доступ в интернет

Вопрос или проблема

Профиль AppArmor: Запретить доступ в интернет

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

Вот профиль /etc/apparmor.d/bin.ping

/{usr/,}bin/ping {
  #include <abstractions/base>
    # забрать доступ к ipv4
    deny network inet,
    # ipv6 
    deny network inet6,
    # сырой сокет
    deny network raw,
}

Но пинг все равно работает после перезагрузки apparmor с помощью

/etc/init.d/boot.apparmor restart
 ping google.de
PING google.de (64.15.112.99) 56(84) bytes of data.
64 bytes from cache.google.com (64.15.112.99): icmp_seq=1 ttl=57 time=11.8 ms
64 bytes from cache.google.com (64.15.112.99): icmp_seq=2 ttl=57 time=15.3 ms

ИЗМЕНЕНИЕ:
Я забыл упомянуть, что я использую OpenSuse 13.1

Вам нужно либо удалить строку #include <abstractions/base>, либо добавить строку #include <tunables/global> в начало файла перед определением профиля. Это связано с тем, что abstractions/base использует переменные, определенные в tunables/global.

Документация здесь: https://gitlab.com/apparmor/apparmor/-/wikis/Documentation
разрешения файлов и другое здесь: https://gitlab.com/apparmor/apparmor/-/wikis/QuickProfileLanguage#file-permissions

Рекомендуется посмотреть как мягкое введение: https://www.youtube.com/watch?v=PRZ59lxLlOY

Возьмем, к примеру, просмотрщик pdf atril, если профиля не существует, создайте один:

sudo aa-genprof /usr/bin/atril # выполняйте действия в приложении, чтобы вызвать события
sudo aa-logprof # чтобы настроить профиль, записанный в /etc/apparmor.d/usr.bin.atril 

пример профиля, примените через
sudo aa-enforce /etc/apparmor.d/usr.bin.atril и попробуйте нажать ссылку в pdf, аудит sudo dmesg -w покажет apparmor="DENIED"

# Последнее изменение: Вс Дек 13 23:28:03 2020
#include <tunables/global>

/usr/bin/atril {
  #include <abstractions/base>
  #include <abstractions/lightdm>

    # забрать доступ к ipv4
    deny network inet,
    # ipv6 
    deny network inet6,
    # сырой сокет
    deny network raw,

    owner /** rwm,
}

блокирует приложение: справка->о программе->вебсайт от открытия; настройте другие соответствующие через aa-logproof

Ответ или решение

Для того чтобы запретить доступ к интернету для приложения с использованием профилей AppArmor, необходимо внести некоторые изменения в профиль приложения. В вашем случае, вы пытаетесь запретить доступ к интернету для утилиты ping.

Вот шаги, которые помогут вам настроить профиль правильно:

  1. Измените ваш профиль /etc/apparmor.d/bin.ping:

    Убедитесь, что ваш профиль включает строки для определения глобальных переменных и не содержит ненужных комментариев. Пример обновленного профиля:

    # Last Modified: (укажите актуальную дату)
    #include <tunables/global>
    
    /usr/bin/ping {
      #include <abstractions/base>
    
      # Запретить доступ к IPv4
      deny network inet,
      # Запретить доступ к IPv6
      deny network inet6,
      # Запретить доступ к необработанным сокетам
      deny network raw,
    }
  2. Перезапустите службу AppArmor:

    После внесения изменений в профиль вам необходимо перезапустить службу AppArmor, чтобы изменения вступили в силу. Выполните следующую команду:

    sudo systemctl restart apparmor

    или, если используете init.d:

    sudo /etc/init.d/boot.apparmor restart
  3. Проверьте статус профиля:

    Для убедительности вы можете проверить статус профиля, чтобы убедиться, что он загружен и находится в состоянии enforced (принудительного выполнения):

    sudo aa-status
  4. Тестирование:

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

    ping google.de

    Вы должны увидеть сообщение об ошибке, подобное "ping: google.de: Name or service not known" или "ping: transmit failed: Network is unreachable".

  5. Дополнительные профили:

    Если вы хотите запретить доступ к интернету и другим приложениям, вы можете сгенерировать их профили с помощью команды aa-genprof, как указано в вашем запросе:

    sudo aa-genprof /usr/bin/название_приложения

    После создания профиля редактируйте его, добавляя те же строки deny network inet,, deny network inet6,, и deny network raw,, прежде чем применять изменения.

  6. Логи и отладка:

    Если после перезапуска и тестирования доступ всё еще не заблокирован, используйте команду для просмотра сообщений от AppArmor:

    sudo dmesg -w

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

Соблюдая эти шаги, вы сможете успешно запретить интернет-доступ для определенных приложений с помощью AppArmor на вашей системе OpenSUSE.

Оцените материал
Добавить комментарий

Капча загружается...