Files
Utils/Proxmox/Hezner_abuse/README.md
T
2026-04-03 13:22:29 +03:00

4.9 KiB
Raw Blame History

Hetzner AntiAbuse Firewall для Proxmox + LXC

Данный документ описывает проверенную и рабочую схему защиты Proxmox‑хоста и всех LXC/VM от сетевых abuse‑жалоб Hetzner, связанных с Ethereum‑клиентами (Erigon / Geth / Reth / Bor и др.).

Решение основано на рекомендациях:

  • Erigon: "Hetzner expecting strict firewall rules"
  • Ethereum StackExchange (блокировка private / reserved ranges)

🎯 Цель

  • Заблокировать исходящие соединения к private / reserved IPv4 диапазонам
  • Остановить P2P‑discovery/сканирование, за которое Hetzner присылает abuse
  • Сделать это один раз на хосте Proxmox, для всех LXC/VM
  • Не сломать NAT, Proxmox Firewall и внутренние сети

🧱 Исходная схема сети

  • Proxmox host
  • Внешний интерфейс: enp7s0
  • LXC bridge: vmbr100
  • Внутренняя сеть LXC: 192.168.100.0/24
  • Выход LXC в интернет через NAT (MASQUERADE → enp7s0)
  • Включён Proxmox Firewall (PVEFW)

🧩 Архитектура решения

Используется связка:

  • ipset — список запрещённых сетей (hetzner_reserved)

  • iptables — DROP‑правила внутри Proxmox цепочек:

    • PVEFW-FORWARD — для LXC / VM
    • PVEFW-HOST-OUT — для самого хоста

Фильтрация применяется только при выходе наружу через enp7s0.


ШАГ 1. Установка пакетов

apt update
apt install -y ipset iptables-persistent

ШАГ 2. Создание IPSet с reserved/private сетями

ipset create hetzner_reserved hash:net -exist

Заполнение списка (рекомендованный набор):

for net in \
  0.0.0.0/8 \
  10.0.0.0/8 \
  100.64.0.0/10 \
  169.254.0.0/16 \
  172.16.0.0/12 \
  192.0.0.0/24 \
  192.0.2.0/24 \
  192.88.99.0/24 \
  192.168.0.0/16 \
  198.18.0.0/15 \
  198.51.100.0/24 \
  203.0.113.0/24 \
  224.0.0.0/4 \
  240.0.0.0/4

do
  ipset add hetzner_reserved "$net" -exist
done

⚠️ Блокируется DESTINATION, а не SOURCE — NAT для LXC не ломается.


ШАГ 3. DROP для LXC / VM (PVEFW-FORWARD)

Вставка после RELATED,ESTABLISHED, до fwbr‑цепочек:

iptables -I PVEFW-FORWARD 3 -o enp7s0 \
  -m set --match-set hetzner_reserved dst \
  -j DROP

Назначение:

  • перехватывает трафик LXC / VM
  • только при выходе в интернет

ШАГ 4. DROP для самого хоста (PVEFW-HOST-OUT)

⚠️ Важно: в этой цепочке первый rule — ACCEPT all, поэтому вставка на позицию 1.

iptables -I PVEFW-HOST-OUT 1 -o enp7s0 \
  -m set --match-set hetzner_reserved dst \
  -j DROP

ШАГ 5. Проверка

iptables -L PVEFW-FORWARD -n --line-numbers | head -n 10
iptables -L PVEFW-HOST-OUT -n --line-numbers | head -n 10

Тест:

curl -m 2 http://10.0.0.1 || true
iptables -L PVEFW-HOST-OUT -v -n --line-numbers | head -n 10

Счётчик DROP должен увеличиваться.


ШАГ 6. Persistence iptables

netfilter-persistent save
systemctl enable --now netfilter-persistent

ШАГ 7. Persistence ipset

Сохранение

mkdir -p /etc/ipset
ipset save > /etc/ipset/hetzner_reserved.conf

systemd unit

cat >/etc/systemd/system/ipset-restore.service <<'EOF'
[Unit]
Description=Restore ipset rules
DefaultDependencies=no
Before=network-pre.target
Wants=network-pre.target

[Service]
Type=oneshot
ExecStart=/bin/sh -c '/sbin/ipset restore -exist < /etc/ipset/hetzner_reserved.conf'
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
EOF

Активация:

systemctl daemon-reload
systemctl enable --now ipset-restore.service

Проверка:

ipset list hetzner_reserved
systemctl status ipset-restore.service

🟢 Результат

  • Все LXC / VM защищены
  • Proxmox Firewall не нарушен
  • NAT продолжает работать
  • Hetzner перестаёт фиксировать network abuse
  • Настройка применяется автоматически после ребута

🔧 Опционально

  • Добавить IPv6 antiabuse (fc00::/7, fe80::/10, ff00::/8)
  • Включить LOG+DROP для диагностики
  • Перевести правила в nftables

Статус: Productionready