Files
reverse-proxy/docs/security/haproxy-host.md
T
Andrey Lutsenko 8e2a4ac1b9 docs(security): периметр 80/443→HAProxy, 25→KSMG; UFW на .117
Переписаны docs/security под текущий этап: SSH/stats из SSH_ALLOWED,
80/443 для всех. Скрипт UFW дополнен правилом 8404.
2026-06-13 22:34:57 +10:00

3.2 KiB
Raw Blame History

HAProxy: UFW и hardening

Хост: haproxy.kalinamall.ru, 192.168.160.117, Ubuntu 24.04, HAProxy 2.8.x.

Порты на хосте

Порт Служба С интернета (MikroTik) UFW (текущий план)
22 sshd нет DNAT только SSH_ALLOWED
25 fe_smtp → KSMG нет (25 → .57) закрыт
80 fe_http_zabbix да все
443 fe_https_sni да все
8404 stats (закомментирован) нет только SSH_ALLOWED

UFW — правила

Скрипт: haproxy-ufw-apply.sh.

default incoming: deny
default outgoing: allow

22/tcp     from 5.100.81.121, 192.168.128.0/17
8404/tcp   from 5.100.81.121, 192.168.128.0/17   # если включите fe_stats
80/tcp     from anywhere
443/tcp    from anywhere

192.168.128.0/17 покрывает офисную/VPN-подсеть (в т.ч. 192.168.160.0/24).

Env

/etc/haproxy/security/haproxy-ufw.env (из haproxy-ufw.env.example):

SSH_ALLOWED="5.100.81.121 192.168.128.0/17"
INBOUND_TCP="80 443"
STATS_TCP="8404"
UFW_IPV6=no

Внедрение

sudo mkdir -p /etc/haproxy/security
sudo cp ~/reverse-proxy/scripts/security/haproxy-ufw.env.example /etc/haproxy/security/haproxy-ufw.env
sudo bash ~/reverse-proxy/scripts/security/haproxy-ufw-apply.sh
# вторая SSH-сессия:
sudo bash ~/reverse-proxy/scripts/security/haproxy-ufw-apply.sh --apply
sudo ufw status numbered

Откат: sudo ufw disable (временно).

Проверка

  • SSH с 5.100.81.121 или из 192.168.128.0/17 — OK.
  • SSH с другого IP — timeout/refused.
  • curl -I http://zabbix.kalinamall.ru / HTTPS на allowlist-сервис — OK.
  • ss -tlnp | grep :25 — слушает HAProxy, но UFW + MikroTik не пускают с периметра.

fe_smtp (:25)

Inbound-почта с интернета идёт на KSMG .57, не на HAProxy. fe_smtp в haproxy.cfg можно оставить для LAN или отключить, если не используется — UFW его не открывает.

stats (:8404)

В haproxy.cfg закомментирован. Если включите — UFW уже ограничит доступ списком SSH_ALLOWED; обязательно stats auth и не 0.0.0.0 без нужды.

Рекомендуется дополнительно (не блокирует UFW)

Мера Зачем
SSH: ключи, PermitRootLogin no, PasswordAuthentication no до/вместе с UFW
fail2ban на sshd подстраховка SSH
unattended-upgrades патчи
Не открывать лишние listen ss -tlnp

Опционально позже: sysctl syncookies, rate-limit на frontend, allowlist для Exchange/sac-api.

SSH (пример)

/etc/ssh/sshd_config.d/99-hardening.conf:

PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
AllowUsers papatramp

sshd -t && systemctl reload sshd