Все достаточно просто.
Недолюбливаю я ufw, мне больше по душе ferm
Не забываем про
sudo sysctl -w net.ipv4.ip_forward=1
Сносим ufw и cтавим надстройку ferm над firewall
sudo apt install ferm
Правим конфиг ferm
sudo vim /etc/ferm/ferm.conf
@def $WAN_IP1 = 1.1.1.1; # На этом разрешаем входящие
@def $WAN_IP2 = 1.1.1.2; # Через этот выходим
@def $DEV_WAN = ens1s0;
@def $VPN_NETS = (10.10.10.0/24 10.10.20.0/24); # Сети VPN клиентов
domain (ip ip6) {
table filter {
chain INPUT {
policy DROP; # Политика поумолчанию, если нет разрешающего правила значит запрещено
# connection tracking
mod state state INVALID LOG log-prefix '[FERM] INVALID INPUT DROP: ';
mod state state INVALID DROP;
mod state state (ESTABLISHED RELATED) ACCEPT;
# allow local packet
interface lo ACCEPT;
# respond to ping
#proto icmp ACCEPT;
daddr $WAN_IP1 {
# respond to ping
proto icmp ACCEPT;
# allow SSH connections
proto tcp dport 22 ACCEPT;
# allow WEB connections
proto tcp dport (http https) ACCEPT;
# allow VPN wireguard connections
proto udp dport 51820 ACCEPT;
}
}
chain OUTPUT {
policy ACCEPT;
# connection tracking
#mod state state INVALID DROP;
mod state state (ESTABLISHED RELATED) ACCEPT;
}
chain FORWARD {
policy DROP;
# connection tracking
mod state state INVALID DROP;
mod state state (ESTABLISHED RELATED) ACCEPT;
saddr $VPN_NETS ACCEPT; # Разрешаем трафику от VPN клиентов проходить в любом направлении
}
}
table nat {
chain POSTROUTING {
saddr $VPN_NETS outerface $DEV_WAN SNAT to $WAN_IP2; # Маскируем-натим исходящий трафик от VPN клиентов вторым IP
}
}
}
@include ferm.d/;
Применяем конфиг
sudo ferm -i /etc/ferm/ferm.conf