Tags

bin_sh fail-over fail2ban freebsd install jail kimsufi nginx rrdcgi symon var_empty

Powered by

blOg
maRkdown
awK
shEll

14/08/2008

[ nginx fail-over fail2ban ]

200808140800 nginx fail-over fail2ban

Fail-over et nginx

Fail-over: pourquoi faire ?

Je devais depuis longtemps installer nginx, afin de mettre à disposition quelques lignes de code. Histoire de corser la chose, pourquoi ne pas utiliser la deuxième @IP de mon dédié ? Je suis bien conscient que le but premier d'une adresse fail-over n'est pas de réserver une adresse pour un service particulier mais il faut bien s'amuser :)

Comment faire ?

On commence par activer l'adresse fail-over dans la console de management. Une fois le courriel de confirmation reçu, je crée une jail:

ks# ./bin/mk_jail.sh donwload 10240M dowload.bsdsx.fr 172.16.0.4

J'installe nginx:

compil# cd /usr/port/www/nginx
compil# make package
compil# pkg_delete nginx-0.6.32
[ copie de nginx-0.6.32.tbz depuis compil vers download ]
download$ sudo pkg_add nginx-0.6.32.tbz

La configuration se limite à l'emplacement des fichiers de logs et du document root.

On lance le serveur:

download$ sudo /usr/local/etc/rc.d/nginx start

On n'oublie pas la rotation des logs:

download$ grep nginx /etc/newsyslog.conf
/var/log/nginx/*.log   640  10  5000  $W6D0  JG  /var/run/nginx.pid

Et le démarrage au boot:

download# echo 'nginx_enable="YES"' >> /etc/rc.conf

Reste la configuration du pf de l'hôte (extraits):

failover="adresse.ip.du.failover"
nat on $ext_if from 172.16.0.4 -> $failover
rdr pass on $ext_if proto tcp from <ssh_ok> to $failover port ssh -> 172.16.0.4 port ssh
rdr pass on $ext_if proto tcp to $failover port http -> 172.16.0.4 port http

Et c'est tout ?

Ben oui. Ce serveur web proposant (pour l'instant j'espère :) très peu de chose, je ne me suis pas soucié des logs. Grave erreur:

download$ grep -c w00t /var/log/nginx/access.log
267
download$ grep -c php /var/log/nginx/access.log
455

Aux grands maux, les grands remèdes:

download$ grep -A 2 'location.*php' /usr/local/etc/nginx/nginx.conf
location ~ \.php {
  deny all;
}

Et depuis l'hôte:

ks# awk '{ print $11 }' /zfs/jail/download/var/log/nginx/error.log | sort -u | tr -d ',' >> /etc/spammers

Avec une règle pf kivabien:

ks# grep spammers /etc/pf.conf
table <spammers> persist file "/etc/spammers"
block quick from <spammers>

Et un script qui met à jour /etc/spammers:

[ snip alimentation /etc/spammers ]
/sbin/pfctl -q -t spammers -T replace -f /etc/spammers

Et oui, fail2ban c'est bien, mais sous freebsd c'est demerdeune ziziche :)

Update:

Merci à dug pour la (double :) correction de la ligne de newsyslog.conf


Lien vers ce billet