• XSS.stack #1 – первый литературный журнал от юзеров форума

Сервер на Debian сохранение iptables после reboot

qvp

(L1) cache
Пользователь
Регистрация
31.12.2019
Сообщения
556
Реакции
63
Приветствую всех, имеется сервер на Debian 11, устанавливаю iptables командами
sudo iptables -N CUSTOM-DOCKER
sudo iptables -I DOCKER-USER -j CUSTOM-DOCKER
apt install ipset
sudo apt-get install iptables
ipset -N myset nethash
iptables -A CUSTOM-DOCKER -m set --match-set myset src -j DROP в таблицу myset соответственно вбиваю ip для блокировки. Всё работает отлично до перезагрузки сервера. После перезагрузки надо делать все заново. Кто накидает мануал как возможно сделать что бы поднималось это все автоматом после reboot, можек какой скрипт написать?
 
Я не силён в програмировании, можно скрипт и все что нужно сделать?
1. Создайте скрипт
Например, создайте файл /usr/local/sbin/firewall.sh:

Bash:
#!/bin/bash
# Создаем набор ipset (если уже существует, опция -exist предотвратит ошибку)
ipset create myset nethash -exist

# Создаем цепочку CUSTOM-DOCKER (если уже существует, -N сработает с ошибкой, поэтому можно проверять или использовать модуль "–exist", но iptables не поддерживает его для -N, поэтому можно предварительно проверять)
iptables -C CUSTOM-DOCKER 2>/dev/null || iptables -N CUSTOM-DOCKER

# Вставляем цепочку в DOCKER-USER (проверить, если правило уже есть, можно пропустить)
iptables -C DOCKER-USER -j CUSTOM-DOCKER 2>/dev/null || iptables -I DOCKER-USER -j CUSTOM-DOCKER

# Добавляем правило для сброса пакетов из адресов, входящих в набор myset.
iptables -C CUSTOM-DOCKER -m set --match-set myset src -j DROP 2>/dev/null || \
iptables -A CUSTOM-DOCKER -m set --match-set myset src -j DROP


Сделайте скрипт исполняемым:

sudo chmod +x /usr/local/sbin/firewall.sh


2. Создайте systemd-юнит для скрипта

Создайте файл /etc/systemd/system/firewall.service со следующим содержимым:
Код:
[Unit]
Description=Восстановление правил iptables и ipset
After=network-online.target
Wants=network-online.target

[Service]
Type=oneshot
ExecStart=/usr/local/sbin/firewall.sh
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

3. Активируйте юнит

sudo systemctl daemon-reload
sudo systemctl enable firewall.service

При следующей загрузке системы systemd выполнит ваш скрипт, и все нужные правила будут установлены автоматически.

Скорректировать только bash скрипт под себя
 
root@internet:~# sudo systemctl status firewall.service
× firewall.service - Восстановление правил iptables и ipset
Loaded: loaded (/etc/systemd/system/firewall.service; enabled; preset: enabled)
Active: failed (Result: exit-code) since Sun 2025-02-09 21:03:59 UTC; 7min ago
Main PID: 570 (code=exited, status=203/EXEC)
CPU: 1ms

Feb 09 21:03:59 internet systemd[1]: Starting firewall.service - Восстановление правил iptables и ipset...
Feb 09 21:03:59 internet (ewall.sh)[570]: firewall.service: Failed to execute /usr/local/sbin/firewall.sh: Exec format error
Feb 09 21:03:59 internet (ewall.sh)[570]: firewall.service: Failed at step EXEC spawning /usr/local/sbin/firewall.sh: Exec format error
Feb 09 21:03:59 internet systemd[1]: firewall.service: Main process exited, code=exited, status=203/EXEC
Feb 09 21:03:59 internet systemd[1]: firewall.service: Failed with result 'exit-code'.
Feb 09 21:03:59 internet systemd[1]: Failed to start firewall.service - Восстановление правил iptables и ipset.
 
root@internet:~# sudo systemctl status firewall.service
× firewall.service - Восстановление правил iptables и ipset
Loaded: loaded (/etc/systemd/system/firewall.service; enabled; preset: enabled)
Active: failed (Result: exit-code) since Sun 2025-02-09 21:03:59 UTC; 7min ago
Main PID: 570 (code=exited, status=203/EXEC)
CPU: 1ms

Feb 09 21:03:59 internet systemd[1]: Starting firewall.service - Восстановление правил iptables и ipset...
Feb 09 21:03:59 internet (ewall.sh)[570]: firewall.service: Failed to execute /usr/local/sbin/firewall.sh: Exec format error
Feb 09 21:03:59 internet (ewall.sh)[570]: firewall.service: Failed at step EXEC spawning /usr/local/sbin/firewall.sh: Exec format error
Feb 09 21:03:59 internet systemd[1]: firewall.service: Main process exited, code=exited, status=203/EXEC
Feb 09 21:03:59 internet systemd[1]: firewall.service: Failed with result 'exit-code'.
Feb 09 21:03:59 internet systemd[1]: Failed to start firewall.service - Восстановление правил iptables и ipset.
Забыл добавить #!/bin/bash в начале файла /usr/local/sbin/firewall.sh?
Нужно переделать этот файл под твои команды
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Используйте ufw, зачем вам iptables?
 
Используйте ufw, зачем вам iptables?
Я использую то что мне помогает и найдено в интернете, я не силён в програмировании. Если можете подсказать как, то скиньте мануал на моих выложенных выше командах
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Я использую то что мне помогает и найдено в интернете, я не силён в програмировании. Если можете подсказать как, то скиньте мануал на моих выложенных выше командах
Для чего тебе firewall. Блокировать ip?
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Да, я блокирую подсети ip через Docker
sudo ufw deny from 192.168.1.0/24
 
iptables-persistent + ipset-persistent

Use UFW, why do you need IPTABles?
Just a simpler wrapper around iptables, fine for typical “block IP/subnet” usage but doesn't have native ipset functionality.
 
iptables-постоянный + ipset-постоянный


Просто более простая оболочка для iptables, подходящая для типичного использования «блокировки IP/подсети», но не имеющая собственной функциональности ipset.

Мне надо на уровне Docker блокировать
 
People often think iptables-persistent only applies to the host. But you can still use it to preserve rules in the DOCKER-USER chain. The key is that the chain must exist by the time the rules get restored.

Bash:
# CHAIN exists?
sudo iptables -N CHAIN 2>/dev/null || true

# DOCKER-USER jump to CHAIN
sudo iptables -C DOCKER-USER -j CHAIN 2>/dev/null || \
    sudo iptables -I DOCKER-USER -j CHAIN

# CHAIN drops packets from myset
sudo iptables -C CHAIN -m set --match-set myset src -j DROP 2>/dev/null || \
    sudo iptables -A CHAIN -m set --match-set myset src -j DROP


PS.
systemd override:
sudo systemctl edit netfilter-persistent
[Unit]
After=docker.service
Requires=docker.service
 
Последнее редактирование:
People often think iptables-persistent only applies to the host. But you can still use it to preserve rules in the DOCKER-USER chain. The key is that the chain must exist by the time the rules get restored.

Bash:
# CHAIN exists?
sudo iptables -N CHAIN 2>/dev/null || true

# DOCKER-USER jump to CHAIN
sudo iptables -C DOCKER-USER -j CHAIN 2>/dev/null || \
    sudo iptables -I DOCKER-USER -j CHAIN

# CHAIN drops packets from myset
sudo iptables -C CHAIN -m set --match-set myset src -j DROP 2>/dev/null || \
    sudo iptables -A CHAIN -m set --match-set myset src -j DROP


PS.
systemd override:
[Unit]
After=docker.service
Requires=docker.service Это команды в терминале тоже?
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх