Это моя конкретная проблема, которую мне нужно решить (но мой вопрос другой, поэтому, пожалуйста, продолжайте читать, даже если вы не знаете, что такое fail2ban):
Я пытаюсь использовать fail2ban на сервере Linux, чтобы запретить атаки грубой силы на несколько служб (ssh, dovecot, apache, postfix, ...). Теперь я столкнулся с проблемой, что fail2ban, кажется, выполняет несколько команд iptables одновременно (с потоками в Python), и это довольно часто терпит неудачу (особенно при запуске), когда iptables возвращает «Ресурс временно недоступен». ошибки.
Я хочу обойти эти проблемы, "синхронизируя" вызовы iptables. Я ищу программу, которая создает некоторый файл мьютекса / блокировки, и только если этот файл может быть создан, он запускает настоящую команду и удаляет файл мьютекса после завершения команды. Если файл мьютекса уже существует, программа ожидает, пока файл мьютекса не исчезнет, а затем пытается получить его.
С помощью такой команды я мог бы настроить iptables-actions в fail2ban на ожидание друг друга, чтобы они не выполнялись одновременно.
Я почти уверен, что такая программа уже существует, поэтому мне не нужно писать ее самостоятельно. Но пока не нашел.
Нашел сам. Команда, которую я искал, называется flock
. Мне удалось решить свою проблему, заключив все вызовы iptables в /etc/fail2ban/action.d/iptables-multiport.conf
как это:
flock /var/lock/fail2ban -c "iptables -N fail2ban-<name>"
Теперь fail2ban запускается каждый раз правильно.
Из того, что я мог понять, использование flock - это наиболее масштабируемый способ, особенно когда вы работаете в сценарии bash, где у вас есть очень ограниченный набор встроенных функций, к которым можно прибегнуть. Ответ kayahr действительно сэкономил мне много времени, так как у меня была такая же проблема с параллельным запуском команд iptables.