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

209 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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. Установка пакетов
```bash
apt update
apt install -y ipset iptables-persistent
```
---
## ✅ ШАГ 2. Создание IPSet с reserved/private сетями
```bash
ipset create hetzner_reserved hash:net -exist
```
Заполнение списка (рекомендованный набор):
```bash
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‑цепочек:
```bash
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**.
```bash
iptables -I PVEFW-HOST-OUT 1 -o enp7s0 \
-m set --match-set hetzner_reserved dst \
-j DROP
```
---
## ✅ ШАГ 5. Проверка
```bash
iptables -L PVEFW-FORWARD -n --line-numbers | head -n 10
iptables -L PVEFW-HOST-OUT -n --line-numbers | head -n 10
```
Тест:
```bash
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
```bash
netfilter-persistent save
systemctl enable --now netfilter-persistent
```
---
## ✅ ШАГ 7. Persistence ipset
### Сохранение
```bash
mkdir -p /etc/ipset
ipset save > /etc/ipset/hetzner_reserved.conf
```
### systemd unit
```bash
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
```
Активация:
```bash
systemctl daemon-reload
systemctl enable --now ipset-restore.service
```
Проверка:
```bash
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 ✅