Как настроить 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 — быстрый план
- Почему StrongSwan не откликается после установки fail2ban (конфликты iptables)
- Настройка логирования StrongSwan (charon.log) для fail2ban
- Создание и проверка фильтра fail2ban для StrongSwan
- Пример jail: /etc/fail2ban/jail.local для StrongSwan
- iptables / nftables и порядок правил — что важно
- Отладка, экстренное снятие блокировки и тесты
- Частые ошибки и профилактика
- Источники
- Заключение
Настройка 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):
- Проверяем состояние сервисов:
sudo systemctl status strongswan
sudo systemctl status fail2ban
sudo journalctl -u strongswan -n 50 --no-pager
- Определяем, куда пишет логи charon (syslog/journal или файл). Если в журнале — делаем отдельный файл (ниже инструкция).
- Копируем/создаём фильтр fail2ban или используем готовый из репозитория, затем настраиваем jail (пример в разделе “Пример jail”).
- Проверяем backend iptables/nftables и действие fail2ban (iptables-multiport/ufw/nftables).
- Тест: намеренно вызвать неудачную аутентификацию и убедиться, что 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.
- В strongSwan можно включить filelog (пример для /etc/strongswan/strongswan.conf или /etc/strongswan.d/charon.conf):
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.
- Если strongSwan пишет в syslog/journal, проще настроить rsyslog, чтобы фильтровал сообщения charon в отдельный файл:
# /etc/rsyslog.d/30-strongswan.conf
if $programname == 'charon' then /var/log/charon.log
& stop
Перезапустить rsyslog: sudo systemctl restart rsyslog.
- Если на сервере включён AppArmor, может понадобиться разрешить запись/чтение этого файла для charon/strongswan (встречается в практиках, см. заметки в репозитории с конфигами). Рекомендуется проверить логи AppArmor при ошибках:
sudo journalctl -k | grep DENIEDилиsudo ausearch -m avc -ts today.
Подробности и рекомендации по выделенному логированию можно найти в репозитории с готовыми примерами фильтров: GitHub — strongSwan_fail2ban.
Создание и проверка фильтра fail2ban для StrongSwan
Лучше всего взять готовый filter из проверенного репозитория и подправить под ваш формат логов; если хотите — можно написать свой.
- Клонировать пример и посмотреть фильтры:
git clone https://github.com/s1nnerman89/strongSwan_fail2ban.git /tmp/strongswan_fail2ban
ls /tmp/strongswan_fail2ban
- Скопировать файл фильтра в /etc/fail2ban/filter.d/ (если в репо есть нужный файл):
sudo cp /tmp/strongswan_fail2ban/etc/fail2ban/filter.d/strongswan.conf /etc/fail2ban/filter.d/
- Пример минимального (очень простой) фильтра — только как fallback:
# /etc/fail2ban/filter.d/strongswan.conf
[Definition]
_daemon = charon
failregex = .*authentication of .* failed
.*EAP.*failed
.*no suitable.*proposal.*
ignoreregex =
Это далеко не идеально; важно протестировать и подогнать regex под реальные строки.
- Тестируем регулярки на 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):
[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, а не сервисы. Правильная конфигурация — бан «плохих» клиентов, но сохранение доступности для нормальных — вот цель.
Источники
- GitHub - s1nnerman89/strongSwan_fail2ban — готовые конфиги/регулярки.
- Настройка VPN сервера IKEv2 с StrongSwan на Ubuntu 24 — практическая инструкция, пример jail.
- Домашний сервер — Настраиваем IKEv2 VPN сервер (Only *NIX) — сертификаты, базовая настройка StrongSwan.
- Issue #3041: fail2ban or equivalent - strongSwan (wiki) — официальные обсуждения интеграции fail2ban.
- Настройка VPN на основе StrongSwan (RuVDS) — хостерские советы, примеры правил iptables.
- How To Protect SSH with Fail2Ban on Ubuntu (DigitalOcean) — механизм работы fail2ban и взаимодействие с iptables.
- Server Fault — Missing iptables rules for Strongswan routing for VPN for phone — примеры проблем с iptables и fail2ban.
- Делаем свой собственный IKEv2 VPN сервер на Ubuntu (Виталий Лещенко) — базовая инструкция по strongSwan.
Заключение
Коротко: выделите лог 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) под вашу систему (укажите дистрибутив и путь логов).