IP fix
This commit is contained in:
@@ -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 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 '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 -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
|
sudo sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes\n/' /etc/ssh/sshd_config
|
||||||
|
|
||||||
|
|||||||
@@ -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 ✅
|
||||||
Reference in New Issue
Block a user