Лучший VPS сервер, который мне удалось найти: https://justhost.ru

  • Больше 30 стран локаций
  • Возможность 50 раз сменить страну и ip адрес вашего сервера
  • Все тарифы подходят для VPN и Proxy
  • Установка Mikrotik routerOS и linux из коробки
  • Оплата Российскими картами
  • Стоимость от 79 рублей в месяц за промо тариф

Данная конфигурация nftables предназначена для Linux-хоста, выполняющего роль пограничного маршрутизатора и сервера контейнеризации.

Реализуется следующий функционал:

  • Stateful firewall с политикой DROP по умолчанию;
  • Фильтрация INPUT / FORWARD / OUTPUT;
  • NAT и маршрутизация для WireGuard, IKEv2/IPsec и ZeroTier;
  • Проброс портов (DNAT) к сервисам внутри LXC-сети;
  • Базовая защита loopback и invalid-пакетов.

Файл рассчитан на загрузку через /etc/nftables.conf и использование совместно с systemd.


Полное содержимое файла nftables

#!/sbin/nft -f

flush ruleset

##
## VARIABLES
##

define wan_ip = X.X.X.X
define wan    = "wan_if"
define lxc    = "lxc_bridge"
define wg     = "wg0"

define ike_net = 10.1.1.0/24
define wg_net  = 10.1.2.0/24
define lxc_net = 10.0.3.0/24

define monitoring_hosts = { A.A.A.A, B.B.B.B }

##
## FILTER TABLE
##

table inet filter {

    chain input {
        type filter hook input priority 0; policy drop;

        ct state invalid counter drop comment "drop invalid packets"
        ct state { established, related } counter accept comment "allow established/related"

        iif lo accept comment "allow loopback"

        iif != lo ip  daddr 127.0.0.0/8 counter drop
        iif != lo ip6 daddr ::1/128     counter drop

        ip  protocol icmp  counter accept
        ip6 nexthdr icmpv6 counter accept

        tcp dport 22    ip daddr $wan_ip counter accept comment "SSH"
        tcp dport 5201  ip daddr $wan_ip counter accept comment "iperf3"
        udp dport 59841 ip daddr $wan_ip counter accept comment "wireguard"
        tcp dport 10050 ip saddr $monitoring_hosts ip daddr $wan_ip counter accept comment "monitoring"

        counter comment "count dropped packets"
    }

    chain forward {
        type filter hook forward priority 0; policy drop;

        ct state invalid counter drop
        ct state { established, related } counter accept

        ip saddr $ike_net oifname $wan counter accept comment "ikev2 forward"

        ip daddr $lxc_net iifname $wan oifname $lxc counter accept comment "wan -> lxc"
        iifname $lxc oifname $wan counter accept comment "lxc -> wan"
        iifname $lxc oifname $lxc counter accept comment "lxc intra"

        iifname $wg oifname $wan counter accept comment "wireguard forward"

        counter comment "count dropped packets"
    }

    chain output {
        type filter hook output priority 0; policy accept;
        counter
    }
}

##
## NAT TABLE
##

table ip nat {

    chain prerouting {
        type nat hook prerouting priority dstnat; policy accept;

        ip daddr $wan_ip tcp dport 80    counter dnat to 10.0.3.2:80 comment "web"
        ip daddr $wan_ip tcp dport 443   counter dnat to 10.0.3.2:443 comment "web"

        ip daddr $wan_ip udp dport 500   counter dnat to 10.0.3.7:500 comment "ipsec"
        ip daddr $wan_ip udp dport 4500  counter dnat to 10.0.3.7:4500 comment "ipsec"

    }

    chain postrouting {
        type nat hook postrouting priority srcnat; policy accept;

        ip saddr $ike_net oifname $wan masquerade comment "ikev2 nat"
        ip saddr $wg_net  iifname $wg oifname $wan masquerade comment "wg nat"
        ip saddr $lxc_net oifname $wan masquerade comment "lxc nat"
    }
}

TAGS: nftables, firewall, NAT, LXC, WireGuard, IPsec, Linux