ipset setup
Налаштування ipset
Зараз в мене встановлені iptables, ipset s fail2ban. Все налаштоване, але треба, щоб ipset-набори відновлювалися після перезавантаження. Набори ipset розділені (dirtybots4.set / dirtybots6.set) і лежать в директорії /etc/ipset.d
. Як налаштувати відновлення?
Найпростіше зробити так, щоб при кожному старті системи виконувалося відновлення обох наборів з твоїх .set
-файлів у /etc/ipset.d/
.
Оскільки ipset
сам по собі не зберігає набори постійно, треба вручну підвантажувати їх при старті (наприклад через systemd-unit)
Тоді зробимо через systemd unit + timer, щоб:
При старті — відновлювались набори з
/etc/ipset.d/*.set
.Кожні 5 хвилин — зберігався актуальний стан у ці файли.
1. Скрипт для відновлення і збереження
Створюємо /usr/local/bin/ipset-maintain.sh
:
#!/bin/bash
# Відновлення або збереження ipset-наборів
# Використання:
# ipset-maintain.sh restore - відновити з файлів
# ipset-maintain.sh save - зберегти в файли
DIR="/etc/ipset.d"
case "$1" in
restore)
for f in "$DIR"/*.set; do
[ -f "$f" ] && /usr/sbin/ipset restore -file "$f"
done
;;
save)
for setname in $(/usr/sbin/ipset list -name); do
/usr/sbin/ipset save "$setname" > "$DIR/$setname.set"
done
;;
*)
echo "Usage: $0 {restore|save}"
exit 1
;;
esac
Права на виконання:
chmod +x /usr/local/bin/ipset-maintain.sh
2. Юніт для відновлення при старті
Файл /etc/systemd/system/ipset-restore.service
:
[Unit]
Description=Restore ipset sets from saved files
After=network-pre.target
Wants=network-pre.target
Before=network.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/ipset-maintain.sh restore
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
3. Юніт для збереження
Файл /etc/systemd/system/ipset-save.service
:
[Unit]
Description=Save current ipset sets to files
After=network.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/ipset-maintain.sh save
4. Таймер для збереження кожні 5 хвилин
Файл /etc/systemd/system/ipset-save.timer
:
[Unit]
Description=Periodically save ipset sets
[Timer]
OnBootSec=1min
OnUnitActiveSec=5min
Persistent=true
[Install]
WantedBy=timers.target
5. Активація
systemctl daemon-reload
systemctl enable ipset-restore.service
systemctl enable --now ipset-save.timer
6. Перевірка
Відновлення вручну:
systemctl start ipset-restore.service
Збереження вручну:
systemctl start ipset-save.service
Логи таймера:
journalctl -u ipset-save.service --since "10 min ago"
Якщо захочеш, я можу додати в цей скрипт автоматичне створення відсутніх наборів перед відновленням, щоб ipset restore
не падав, якщо файл є, а набір ще не існує.
Це особливо корисно, коли набір був видалений або сервер чистий після рестарту.
Хочеш, щоб я так дописала?
Last updated