
Как мне настроить какой-то брандмауэр, который позволит использовать открытые порты в системе только определенным программам (предпочтительно RHEL)?
Например, если я хочу yum
иметь возможность подключаться и обновляться в обычном режиме, но хочу заблокировать исходящие веб-запросы, такие как просмотр страниц, мне все равно нужно будет открыть порты 80, 443, 53 и UDP-53.
Однако мне нужно, чтобы брандмауэр мог различать yum
и веб-браузер.
решение1
iptables
имеет возможность проверки пользователя программы.
Используя флаги --uid-owner
или --gid-owner
, вы можете ограничить сеть только определенными пользователями (root?), а www-data
пакеты вашего веб-сервера (может работать как ) будут отбрасываться.
Конечно, это ограничение накладывается на пользователя/группу, а не на программу, но большинство служб сегодня работают со своими собственными пользователями и группами.
Пример:
iptables -I OUTPUT -m owner --uid-owner www-data -jDROP
Пример, который ограничит исходящий сетевой доступ для всех, кроме пользователя root:
iptables -P OUTPUT DROP
iptables -I OUTPUT -m owner --uid-owner root -jALLOW
Другой подход — настроить правила с помощью SELinux
(обычно в комплекте с продуктами RedHat). Лично я считаю, что это будет сложнее в управлении.