DevOps

Как настроить StrongSwan IKEv2/IPSec с fail2ban

Подробная инструкция для новичков: настройка StrongSwan IKEv2/IPSec с fail2ban без конфликтов iptables. Логи charon.log, фильтры, jail, порты 500/4500 UDP. Решение проблемы 'StrongSwan не откликается'. Примеры для Ubuntu/Debian.

Как правильно настроить StrongSwan IKEv2/IPSec с fail2ban?

Я новичок в настройке VPN. Арендовал сервер с предустановленным StrongSwan IKEv2/IPSec у российского хостера. После установки fail2ban StrongSwan перестал откликаться по стандартному адресу.

Как настроить fail2ban для StrongSwan (или наоборот), чтобы они работали вместе без конфликтов? Подробная инструкция для начинающих.

StrongSwan IKEv2/IPSec и fail2ban лучше всего интегрируются через отдельный лог (например, /var/log/charon.log), корректный фильтр fail2ban для сообщений charon и jail, который банит только конкретные IP на UDP‑порты 500 и 4500. Добавьте свои IP в ignoreip, выберите правильный banaction (iptables‑multiport или nftables) и проверьте порядок правил в firewall/ufw — обычно это решает проблему «StrongSwan не откликается». Ниже — пошаговая инструкция для новичка с готовыми примерами и командами.


Содержание


Настройка StrongSwan IKEv2/IPSec и fail2ban — быстрый план

Краткий порядок действий для рабочего результата:

  • настроить логирование charon в отдельный файл (/var/log/charon.log) или убедиться, где пишет strongSwan;
  • взять или адаптировать готовый фильтр fail2ban для strongSwan (charon);
  • создать jail, который банит только IP, делая это через правильный banaction (iptables‑multiport или nftables) и с портами 500,4500 (UDP);
  • добавить свои IP в ignoreip и протестировать правила/логирование.

Пошагово (на примере Ubuntu/Debian):

  1. Проверяем состояние сервисов:
sudo systemctl status strongswan
sudo systemctl status fail2ban
sudo journalctl -u strongswan -n 50 --no-pager
  1. Определяем, куда пишет логи charon (syslog/journal или файл). Если в журнале — делаем отдельный файл (ниже инструкция).
  2. Копируем/создаём фильтр fail2ban или используем готовый из репозитория, затем настраиваем jail (пример в разделе “Пример jail”).
  3. Проверяем backend iptables/nftables и действие fail2ban (iptables-multiport/ufw/nftables).
  4. Тест: намеренно вызвать неудачную аутентификацию и убедиться, что fail2ban ловит строку; посмотреть статус jail.

Почему StrongSwan не откликается после установки fail2ban (конфликты iptables)

Частые причины и как это проверить:

  • fail2ban заблокировал ваш IP (например, вы тестировали подключение и получили бан). Проверка: sudo fail2ban-client status и sudo fail2ban-client status strongswan.
  • Неправильный action/banaction: если в jail использовали iptables-allports или аналог, могли заблокировать весь UDP/TCP, а не только конкретный адрес. Решение — использовать iptables-multiport с указанием портов или nftables‑action.
  • Порядок правил в firewall: fail2ban добавляет цепь и вставляет правило в INPUT; если в цепочке есть правило-REJECT/ DROP выше, или если вы добавляли ACCEPT неправильно, пакеты IKE не доходят. Смотрим:
sudo iptables -L -n --line-numbers
sudo nft list ruleset
  • UFW / firewalld: если включён UFW, fail2ban должен использовать интеграцию ufw или вы должны явно добавить правила ufw allow 500/udp и ufw allow 4500/udp. Аналогично для firewalld — добавляйте порты через firewall-cmd.
  • Неправильный logpath: fail2ban мониторит не тот файл (или не видит journal), поэтому банит по другим событиям/не банит вовсе.

Полезно почитать практические примеры и обсуждения, например руководство хостера по StrongSwan и заметки проекта strongSwan о fail2ban: см. RuVDS — настройка StrongSwan и обсуждение в wiki strongSwan Issue #3041.


Настройка логирования StrongSwan (charon.log) для fail2ban

Лучше всего настроить отдельный файл логов для демона charon — так проще писать точные регулярки и не «шумишь» syslog.

  1. В strongSwan можно включить filelog (пример для /etc/strongswan/strongswan.conf или /etc/strongswan.d/charon.conf):
ini
charon {
 filelog {
 /var/log/charon.log {
 time_format = %b %e %T
 default = 1
 flush_line = yes
 }
 }
 charondebug = "cfg 0, ike 2, knl 2, net 2, esp 2, dmn 2, mgr 2"
}

После правки: sudo systemctl restart strongswan.

  1. Если strongSwan пишет в syslog/journal, проще настроить rsyslog, чтобы фильтровал сообщения charon в отдельный файл:
bash
# /etc/rsyslog.d/30-strongswan.conf
if $programname == 'charon' then /var/log/charon.log
& stop

Перезапустить rsyslog: sudo systemctl restart rsyslog.

  1. Если на сервере включён AppArmor, может понадобиться разрешить запись/чтение этого файла для charon/strongswan (встречается в практиках, см. заметки в репозитории с конфигами). Рекомендуется проверить логи AppArmor при ошибках: sudo journalctl -k | grep DENIED или sudo ausearch -m avc -ts today.

Подробности и рекомендации по выделенному логированию можно найти в репозитории с готовыми примерами фильтров: GitHub — strongSwan_fail2ban.


Создание и проверка фильтра fail2ban для StrongSwan

Лучше всего взять готовый filter из проверенного репозитория и подправить под ваш формат логов; если хотите — можно написать свой.

  1. Клонировать пример и посмотреть фильтры:
git clone https://github.com/s1nnerman89/strongSwan_fail2ban.git /tmp/strongswan_fail2ban
ls /tmp/strongswan_fail2ban
  1. Скопировать файл фильтра в /etc/fail2ban/filter.d/ (если в репо есть нужный файл):
sudo cp /tmp/strongswan_fail2ban/etc/fail2ban/filter.d/strongswan.conf /etc/fail2ban/filter.d/
  1. Пример минимального (очень простой) фильтра — только как fallback:
ini
# /etc/fail2ban/filter.d/strongswan.conf
[Definition]
_daemon = charon

failregex = .*authentication of .* failed
 .*EAP.*failed
 .*no suitable.*proposal.*
ignoreregex =

Это далеко не идеально; важно протестировать и подогнать regex под реальные строки.

  1. Тестируем регулярки на real‑логах:
sudo fail2ban-regex /var/log/charon.log /etc/fail2ban/filter.d/strongswan.conf

Команда покажет, какие строки совпали и какие нет — корректируйте фильтр пока совпадений на ложные срабатывания мало.

Совет: ориентируйтесь на режим charondebug и реальные сообщения из journalctl -u strongswan — регулярки должны ловить именно сообщения об ошибочной аутентификации, а не пакеты NAT/перепады сети.


Пример jail: /etc/fail2ban/jail.local для StrongSwan

Создайте файл /etc/fail2ban/jail.d/strongswan.local или /etc/fail2ban/jail.local с содержимым (пример для iptables backend):

ini
[strongswan]
enabled = true
filter = strongswan
port = 500,4500
protocol = udp
logpath = /var/log/charon.log
maxretry = 5
findtime = 600
bantime = 3600
action = iptables-multiport[name=strongswan, port="500,4500", protocol=udp]
ignoreip = 127.0.0.1/8 ::1 your.ip.address.here/32

Пояснения:

  • port и protocol очень важны — баним только UDP 500 и 4500.
  • ignoreip — впишите свой реальный IP (и, при необходимости, адреса хостера/мониторинга).
  • action — используйте nftables вместо iptables-multiport, если на сервере чистый nft backend (проверьте дальше).

Перезапустите и посмотрите статус:

sudo fail2ban-client reload
sudo fail2ban-client status strongswan

iptables / nftables и порядок правил — что важно

Проверить, какой стек у вас активен:

iptables --version # если в output есть "nf_tables" — используется nft backend
sudo nft --version # наличие nft указывает на современный стек

Посмотреть текущие правила:

sudo iptables -L -n --line-numbers
sudo nft list ruleset

Если вы используете UFW:

  • откройте порты: sudo ufw allow 500/udp и sudo ufw allow 4500/udp.
  • fail2ban может работать через ufw‑action: в файле jail используйте action = ufw или убедитесь, что обе системы не конфликтуют.

Если fail2ban блокирует весь трафик на порт (ошибка конфигурации), исправьте action и заново примените jail.

Если хотите, чтобы порты IKE были гарантированно доступны (правило ACCEPT выше всех fail2ban‑правил), можно вставить его в начало INPUT:

sudo iptables -I INPUT 1 -p udp -m multiport --dports 500,4500 -j ACCEPT

Но помните: при перезагрузках это правило нужно сохранить (iptables-persistent) или настроить через UFW/Firewalld.

Важно: не используйте blanket‑actions (например, iptables-allports) — они приводят к блокировке всего трафика и “StrongSwan не отвечает”.


Отладка, экстренное снятие блокировки и тесты

Если StrongSwan перестал отвечать — сначала проверьте, не забанен ли ваш IP:

sudo fail2ban-client status
sudo fail2ban-client status strongswan

Разбанить IP:

sudo fail2ban-client set strongswan unbanip <IP>

Если нет доступа по SSH из‑за блокировки: используйте консоль хостера (VNC/serial) или попросите хостера временно снять правила.

Полезные команды для отладки:

  • Просмотр логов strongSwan: sudo journalctl -u strongswan -f
  • Просмотр логов fail2ban: sudo journalctl -u fail2ban -f
  • Тест фильтра: sudo fail2ban-regex /var/log/charon.log /etc/fail2ban/filter.d/strongswan.conf
  • Список iptables‑цепочек с упоминанием fail2ban: sudo iptables -L | grep fail2ban -n

Если вы видите неправильные REJECT в INPUT, найдите и удалите правило (будьте аккуратны):

sudo iptables -L INPUT --line-numbers
sudo iptables -D INPUT <номер_строки>

Частые ошибки и профилактика

  • Неправильный logpath — fail2ban не видит события. Решение: определить, где пишется charon (journal/syslog/file) и указать это в jail.
  • Бан своего IP — всегда прописывайте ignoreip с вашим статическим адресом.
  • Использование iptables-allports или действия, блокирующего весь трафик — заменить на iptables-multiport с портами.
  • UFW/Firewalld конфликт — используйте встроенные механизмы (ufw action или firewalld rich rules) и откройте 500/4500 для IKE.
  • Неправильные регулярки — тестируйте fail2ban-regex и подтягивайте реальные строки из логов.
  • Нет persist‑правил для iptables — после reboot правила могут исчезнуть. Используйте iptables-persistent или управляйте через UFW/Firewalld.

И помните: fail2ban блокирует IP, а не сервисы. Правильная конфигурация — бан «плохих» клиентов, но сохранение доступности для нормальных — вот цель.


Источники


Заключение

Коротко: выделите лог charon, используйте проверенный фильтр fail2ban и настройте jail, который банит только IP-адреса на UDP‑порты 500 и 4500; впишите свои IP в ignoreip и убедитесь, что action соответствует вашему firewall (iptables или nftables). После этого тестируйте фильтр через fail2ban-regex, проверяйте правила через iptables/nft и держите bantime/maxretry консервативными пока не убедитесь в корректности настроек. Если что-то пойдет не так — разбан можно выполнить через fail2ban-client set strongswan unbanip <IP> или через консоль хостера. Удачи с настройкой — если хотите, могу прислать готовые файлы (filter + jail) под вашу систему (укажите дистрибутив и путь логов).

Авторы
Проверено модерацией
Модерация
Как настроить StrongSwan IKEv2/IPSec с fail2ban