Как заблокировать исходящий трафик в CentOS без использования IPTables или Firewalld?

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

libsemanage.validate_handler: MLS range s0-s0:c0.c1023 for Unix user elflord exceeds allowed range s0 for SELinux user sysadm_u (No such file or directory).
libsemanage.validate_handler: seuser mapping [elflord -> (sysadm_u, s0-s0:c0.c1023)] is invalid (No such file or directory).
libsemanage.dbase_llist_iterate: could not iterate over records (No such file or directory).

Это было из-за запуска semodule [-i|-Bи особенно сбивало с толку с -i, когда модуль не упоминал sysadm_u.

Причиной была ранее (и несвязанная -ly )попытка добавить роль к sysadmn_uвот так:

semanage user -m -R webadm_r sysadm_u

Страница руководства неоднозначно описывает функциональность -Rс -m, но, очевидно, она не изменяет в смысле добавления роли, а заменяет их:

> seinfo -u sysadm_u -x

Users: 1
   user sysadm_u roles webadm_r level s0 range s0;

Упс, sysadm_rпропал. Это также означало, что elflordне мог войти в систему, по крайней мере, через ssh:Unable to get valid context for elflordотправляется по сети.

Более того, хотя я и не оговаривал -r, для него установлено минимальное значение level s0 range 0, что больше всего беспокоит текст ошибки.

Исправление заключалось в повторной модификации пользователя, включая исходную роль (s )и диапазон :

.
semanage user -m -R { sysadm_r webadm_r } sysadm_u -r s0-s0:c0.c1023
1
06.06.2021, 11:32
1 ответ

Вот три способа «без использования IPTables или firewalld». Я также работал с IPv6, когда это было легко.

  • Traffic Control:tc:возможно, любая версия CentOS, даже EOL

    Требуется заранее знать имя исходящего интерфейса (и, следовательно, способ маршрутизации ). Допустим, интерфейс, который будет использоваться для исходящего трафика, называется eth0. Вы можете использовать команду tc, чтобы добавить фильтр на интерфейс. Фильтры могут быть добавлены только к классовым дисциплинам, поэтому для этой цели добавляется «фиктивный» классовый qdisc, чьи собственные свойства здесь не будут использоваться:prio .

    tc qdisc add dev eth0 root handle 1: prio
    tc filter add dev eth0 parent 1: pref 1 protocol ip basic match '
        (cmp (u8 at 9 layer network eq 6) or cmp (u8 at 9 layer network eq 17)) and
            cmp(u16 at 2 layer transport eq 53)' action drop
    '
    tc filter add dev eth0 parent 1: pref 2 protocol ipv6 basic match '
        (cmp (u8 at 6 layer network eq 6) or cmp (u8 at 6 layer network eq 17)) and
            cmp(u16 at 2 layer transport eq 53)' action drop
    '
    

    примечания:

    • u8 в 9-уровневой сети для IPv4 — поле протокола в заголовке IPv4:его значение сравнивается с 6 для tcp или 17 для udp .
    • u8 в 6-уровневой сети для IPv6 — это почти, но не эквивалентное поле следующего заголовка в фиксированном заголовке IPv6 . Это не охватывает все случаи :, если между фиксированным заголовком и заголовком полезной нагрузки есть заголовки расширения , тогда заголовок Next фиксированного заголовка IPv6, который используется выше, не будет соответствовать протоколу полезной нагрузки (6 для tcp или 17 для udp ). Поскольку может быть несколько связанных заголовков расширения, tc не очень подходит для этого, если только он не получит встроенную поддержку -в каком-либо модуле.
    • u16 на двухуровневом транспорте выше — это порт назначения, для обоихпротоколов .

    Это не будет обнаружено локальным приложением.

  • nftables:nft. CentOS 7 или 8

    Даже ядро ​​CentOS 7 3.10 получило портированную версию nftables . Просто добавьте эквивалент iptables с nftables . Таблица семейства inet обрабатывает одновременно IPv4 и IPv6.

    nft add table inet t
    nft add chain inet t output '{ type filter hook output priority 0; policy accept; }'
    nft add rule inet t output udp dport 53 drop
    nft add rule inet t output tcp dport 53 drop
    

    Неясно, будет ли локальное приложение обнаруживать ошибку из-за этих правил.

    Также повлияет на локальные соединения локальной системы с самой собой, если не будет добавлено исключение.

  • политика маршрутизации:ip rule. CentOS 8 только потому, что для этого требуется ядро ​​>= 4.17

    Более новые ядра также могут использовать порты для соответствия правилам маршрутизации. Так что просто используйте правила, которые отбрасывают что-либо на udp-порт 53 и tcp-порт 53 вместо маршрутизации.

    ip rule add ipproto udp dport 53 blackhole
    ip rule add ipproto tcp dport 53 blackhole
    ip -6 rule add ipproto udp dport 53 blackhole
    ip -6 rule add ipproto udp dport 53 blackhole
    

    Это будет перехвачено локальным приложением с EINVAL (, как описано в...ip route(8)). Изменение типа «отключения» сети может изменить ошибку и, следовательно, поведение (, например, :с черная дыра на запрет).

    Не повлияет на локальные соединения от системы к самой себе (, чья локальная оценка маршрута происходит раньше, с приоритетом 0 ).

1
28.07.2021, 11:26

Теги

Похожие вопросы