From 3c4a69e66a4ed8254e47d79919860109e7a551dd Mon Sep 17 00:00:00 2001 From: Sergey Mazein <37579301+semalis@users.noreply.github.com> Date: Fri, 3 Apr 2026 13:22:29 +0300 Subject: [PATCH] IP fix --- Installers/pre_install_LCX.sh | 6 +- Proxmox/Hezner_abuse/README.md | 208 +++++++++++++++++++++++++++++++++ 2 files changed, 212 insertions(+), 2 deletions(-) create mode 100644 Proxmox/Hezner_abuse/README.md diff --git a/Installers/pre_install_LCX.sh b/Installers/pre_install_LCX.sh index e5c8c14..700f650 100644 --- a/Installers/pre_install_LCX.sh +++ b/Installers/pre_install_LCX.sh @@ -17,8 +17,10 @@ echo -e "${C_LGn}Installation of necessary components ...${RES}" sudo apt install openssh-server mc htop tmux curl lsb-release wget git jq lz4 build-essential -y -sudo sed -i 's/#Port 22/#Port 22\n\nAllowUsers root@91.99.38.107 root@158.69.30.149 root@167.114.172.204 root@158.69.6.146 root@213.239.194.132 root@92.255.251.110 root@158.69.30.144 root@65.109.116.119 sem\n/' /etc/ssh/sshd_config -sudo sed -i -e '/^AllowUsers/ { /root@144\.217\.201\.167/! { s/$/ root@144.217.201.167/; h; } }' /etc/ssh/sshd_config +sudo sed -i 's/#Port 22/#Port 22\n\nAllowUsers root@92.255.251.110 root@91.99.38.107 root@144.124.230.6 root@158.69.30.149 root@167.114.172.204 root@213.239.194.132 root@144.124.230.6 root@65.109.116.119 sem\n/' /etc/ssh/sshd_config +# sudo sed -i -e '/^AllowUsers/ { /root@144\.217\.201\.167/! { s/$/ root@144.217.201.167/; h; } }' /etc/ssh/sshd_config + +# sudo sed -i 's/root@158\.69\.30\.144/root@144.124.230.6/' /etc/ssh/sshd_config && sudo systemctl reload sshd sudo sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes\n/' /etc/ssh/sshd_config diff --git a/Proxmox/Hezner_abuse/README.md b/Proxmox/Hezner_abuse/README.md new file mode 100644 index 0000000..8f3e18e --- /dev/null +++ b/Proxmox/Hezner_abuse/README.md @@ -0,0 +1,208 @@ +# 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 / 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 anti‑abuse (fc00::/7, fe80::/10, ff00::/8) +* Включить LOG+DROP для диагностики +* Перевести правила в nftables + +--- + +**Статус:** Production‑ready ✅