Como sincronizar chamadas de comandos no Linux

2

Este é o meu problema específico que preciso resolver (mas a minha pergunta é diferente, por isso, continue a ler mesmo que não saiba o que é o fail2ban):

Estou tentando usar o fail2ban em um servidor linux para banir ataques de força bruta em vários serviços (ssh, dovecot, apache, postfix, ...). Agora eu tropecei no problema que o fail2ban parece executar múltiplos comandos iptables ao mesmo tempo (com threads no Python) e isso falha com bastante frequência (especialmente na inicialização) onde o iptables retorna "Resource temporariamente indisponível". erros.

Eu quero solucionar esses problemas "sincronizando" as chamadas para o iptables. Eu estou procurando por um programa que cria algum arquivo mutex / lock e somente se este arquivo pode ser criado, então ele inicia o comando real e remove o arquivo mutex após o término do comando. Se o arquivo mutex já estiver lá, o programa aguarda até que o arquivo mutex desapareça e tente obtê-lo.

Com esse comando, eu poderia configurar as ações do iptables no fail2ban para esperar umas pelas outras, para que elas não sejam executadas ao mesmo tempo.

Tenho certeza que já existe um programa desse tipo, então não preciso escrever isso sozinho. Mas até agora não encontrei.

    
por kayahr 13.09.2011 / 11:09

2 respostas

6

Encontrei eu mesmo. O comando que eu estava procurando é chamado flock . Consegui resolver meu problema envolvendo todas as chamadas do iptables em /etc/fail2ban/action.d/iptables-multiport.conf assim:

flock /var/lock/fail2ban -c "iptables -N fail2ban-<name>"

Agora o fail2ban é iniciado corretamente todas as vezes.

    
por 13.09.2011 / 13:28
0

Pelo que pude entender, usar o flock é a maneira mais escalável, especialmente quando você está trabalhando em um script bash em que você tem um intervalo muito limitado de funções embutidas nas quais recorrer. A resposta do kayahr realmente me poupou muito tempo, já que eu estava tendo o mesmo problema ao executar os comandos do iptables em paralelo.

    
por 16.03.2013 / 10:37