4.9 KiB
4.9 KiB
Hetzner Anti‑Abuse 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 / VMPVEFW-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 anti‑abuse (fc00::/7, fe80::/10, ff00::/8)
- Включить LOG+DROP для диагностики
- Перевести правила в nftables
Статус: Production‑ready ✅