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.sh2. Юніт для відновлення при старті
Файл /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.target3. Юніт для збереження
Файл /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 save4. Таймер для збереження кожні 5 хвилин
Файл /etc/systemd/system/ipset-save.timer:
[Unit]
Description=Periodically save ipset sets
[Timer]
OnBootSec=1min
OnUnitActiveSec=5min
Persistent=true
[Install]
WantedBy=timers.target5. Активація
systemctl daemon-reload
systemctl enable ipset-restore.service
systemctl enable --now ipset-save.timer6. Перевірка
Відновлення вручну:
systemctl start ipset-restore.serviceЗбереження вручну:
systemctl start ipset-save.serviceЛоги таймера:
journalctl -u ipset-save.service --since "10 min ago"Якщо захочеш, я можу додати в цей скрипт автоматичне створення відсутніх наборів перед відновленням, щоб ipset restore не падав, якщо файл є, а набір ще не існує.
Це особливо корисно, коли набір був видалений або сервер чистий після рестарту.
Хочеш, щоб я так дописала?
Last updated