web-dev-qa-db-fra.com

Configurer Fail2Ban avec le script bash

J'essaie de configurer la configuration /etc/fail2ban/jail.local avec un script bash. Je pensais utiliser sed et l'expression régulière pour changer les sections dont j'avais besoin.

sed -i "s/^bantime  = 600/bantime  = $1/" /etc/fail2ban/jail.local
sed -i "s/^destemail = root@localhost/destemail = $2/" /etc/fail2ban/jail.local
sed -i "s/^action = %(action_)s/action = %(action_mwl)s/" /etc/fail2ban/jail.local

Comme vous pouvez le voir pour le bantime, le destemail et l'action, je peux le faire. Seulement si elle correspond exactement à. Je pourrais être que le bantime, ou le destemail est changé, alors le script ne fonctionnera pas. Que puis-je utiliser pour faire après le signe = flexible. Par exemple, si bantime n'est pas 600 mais 700, il changera également en utilisant le script bash.

Il y a aussi une section pour configurer SSH et SSHD:

[ssh]

enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 6

[dropbear]

enabled = false 
port = ssh
filter = sshd
logpath = /var/log/dropbear
maxretry = 6

[ssh-ddos]

enabled = false
port = ssh
filter = sshd-ddos
logpath = /var/log/auth.log
maxretry = 6

Je veux également spécifier le port que j'utilise pour SSH ou activer SSHD avec sed et l'expression régulière. Mais comme vous pouvez le voir lorsque je correspond sur activé, je changerai toutes les prisons ou si je correspond sur le port, je changerai tous les ports dans la configuration. Ce n'est pas ce que je veux.

Quelqu'un peut-il m'aider avec un moyen de configurer Fail2Ban avec un script et de manière flexible?

Merci beaucoup, Raoul

2
user132464

Pour les modifications sur une seule ligne, vous pouvez utiliser

sed -e "s/^bantime = .*/bantime = $1/"

ou, de façon plus résiliente

sed -re "s/^bantime[[:blank:]]*=.*/bantime = $1/"

Pour le problème multiligne, utilisez des sélecteurs de ligne pour délimiter vos modifications

sed -re "/^\[ssh\]$/,/^\[/s/port[[:blank:]]*=.*/port = $1/"
1
zwets