Назад | Перейти на главную страницу

Брандмауэр PF на FreeBSD для разрешения трафика SSH и OpenVPN

Я пытаюсь создать простой доступный шаблон для фильтра пакетов на FreeBSD 11.1-RELEASE. у меня есть vtnet0 (общедоступный), vtnet1 (частный, адрес 10.10) и tun0 (openvpn, полностью рабочий / протестирован от клиента до узлов в моей сети).

Мой rc.conf выглядит следующим образом:

hostname="bastion"
sshd_enable="YES"
static_routes="linklocal"
ifconfig_vtnet0="DHCP"
ifconfig_vtnet0_ipv6="inet6 accept_rtadv"
ipv6_activate_all_interfaces="YES"
rtsold_enable="YES"
rtsold_flags="-aF"
ifconfig_vtnet1="inet 10.10.6.20 netmask 255.255.255.0"
gateway_enable="YES"
openvpn_enable="YES"
pf_enable="YES"

Мой облачный провайдер предоставляет мне общедоступные адреса ipv4 / ipv6 через DHCP.

Я просмотрел документы FreeBSD и другие доступные playbook и придумал этот базовый pf.conf:

block all
set skip on lo0
set skip on tun0
pass out all keep state
tcp_services = "{ ssh }"
udp_services = "{ openvpn }"
pass in proto tcp to any port $tcp_services keep state
pass in proto udp to any port $udp_services keep state

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

Моя цель состоит в том, чтобы этот ящик разрешал только openvpn (udp) и ssh из общедоступного интерфейса, разрешал весь трафик через vpn (tun0) и весь трафик из внутреннего.

Настройка pf может быть немного хлопотно. Вы должны понять это pf обрабатывает все интерфейсы абсолютно одинаково, и нет понятия о том, что пакеты исходят из самого блока, как в iptables - OUTPUT цепь. Я бы начал с чего-то в этом роде и на этом развил:

# allow all from host itself
pass out inet all keep state
pass out inet6 all keep state
# allow all from private
pass in quick on vtnet1 inet from any to any keep state
# openvpn
pass in quick proto udp to vtnet0 port openvpn keep state
pass in quick on tun0 inet from any to any keep state
# ssh
pass in quick proto tcp to vtnet0 port ssh flags S/SA keep state

Предупреждение: не используйте стандартные порты openvpn и ssh.