Я использую PF в качестве выключателя на macOS (см. этот).
Использование PF возможно, потому что соединение ipsec имеет собственный интерфейс (ipsec0).
Как я могу реализовать что-то подобное в Linux, если соединение ipsec находится на том же интерфейсе, что и Ethernet?
Похоже, вы ищете что-то вроде nftables
или iptables
или любой брандмауэр, расположенный поверх них, например firewalld
или ufw
.
Использование Netfilter's политика модуль вы можете легко создавать правила брандмауэра, которые применяются к туннельному или нетуннелированному трафику. Например, чтобы отклонить весь исходящий трафик, который не соответствует никаким политикам IPsec (т.е. не туннелируется), вы можете использовать такое правило:
iptables -A OUTPUT -m policy --pol none --dir out -j REJECT --reject-with icmp-admin-prohibited
В качестве альтернативы вы можете заблокировать весь исходящий трафик по умолчанию (например, установить политику для OUTPUT
цепь к DROP
), а затем используйте следующее, чтобы явно разрешить туннельный трафик:
iptables -A OUTPUT -m policy --pol ipsec --dir out -j ACCEPT
При необходимости эти правила могут быть конкретизированы (например, ограничены определенными интерфейсами или IP-адресами).
В обоих случаях вам потребуются дополнительные правила, разрешающие трафик IKE (UDP 500/4500) и ESP (протокол 50 или те же порты, что и IKE, если используется инкапсуляция UDP), плюс DNS (если IP-адрес VPN-сервера не задан жестко. ) и, возможно, DHCP.