Mise en ligne : www.1page.fr

One Page by Network Studio

on aime : nizoapp.com

Webdesign : Image Mechanics

on aime : www.makr.com

Webdesign : Wilkie Birdsall Advertising

Bloquer les attaques par force brute sur Zimbra

Ce billet est un cut/paste d'un post sur le forum US.

Tout est basé sur l'utilisation de fail2ban, avec les bons fichiers de configuration...

Le jail.conf :

[zimbra-account]

enabled = true
filter = zimbra
action = iptables-allports[name=Zimbra-account]
sendmail[name=Zimbra-account, dest=it@enabletv.com]
logpath = /opt/zimbra/log/mailbox.log
bantime = -1
maxretry = 5

[zimbra-audit]

enabled = true
filter = zimbra
action = iptables-allports[name=Zimbra-audit]
sendmail[name=Zimbra-audit, dest=it@enabletv.com]
logpath = /opt/zimbra/log/audit.log
bantime = -1
maxretry = 5

[zimbra-recipient]

enabled = true
filter = zimbra
action = iptables-allports[name=Zimbra-recipient]
sendmail[name=Zimbra-recipient, dest=it@enabletv.com]
logpath = /var/log/maillog
findtime = 604800
bantime = 172800
maxretry = 5

[postfix]

enabled = true
filter = postfix
action = iptables-multiport[name=Postfix, port=smtp, protocol=tcp]
sendmail-buffered[name=Postfix, dest=it@enabletv.com]
logpath = /var/log/maillog
bantime = 172800
maxretry = 5

Le filtre (/etc/fail2ban/filter.d/zimbra.conf) :

# Fail2Ban configuration file
#
# Author:
#
# $Revision: 1 $
#

[Definition]

# Option: failregex
# Notes.: regex to match the password failures messages in the logfile. The
# host must be matched by a group named "host". The tag "" can
# be used for standard IP/hostname matching and is only an alias for
# (?:::f{4,6}:)?(?P[w-.^_]+)
# Values: TEXT
#
failregex = [ip=;] account - authentication failed for .* (no such account)$
[ip=;] security - cmd=Auth; .* error=authentication failed for .*, invalid password;$
;oip=;.* security - cmd=Auth; .* protocol=soap; error=authentication failed for .* invalid password;$
[oip=;.* SoapEngine - handler exception: authentication failed for .*, account not found$
WARN .*;ip=;ua=ZimbraWebClient .* security - cmd=AdminAuth; .* error=authentication failed for .*;$
NOQUEUE: reject: RCPT from .*[]: 550 5.1.1 .*: Recipient address rejected:

# .*[ip=;] .* - authentication failed for .* (invalid password)
#
# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex =

Bien entendu, il faut configurer le reste de fail2ban comme vous le souhaitez (durée du ban, etc) et ne pas oublier que vous pouvez bloquer un vrai utilisateur qui se trompe de mot de passe...

Si c'est le cas, il faut regarder quelle règle dans le firewall correspond à cet utilisateur :

[root@mail fail2ban]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
fail2ban-Zimbra-audit tcp -- anywhere anywhere

Chain fail2ban-Zimbra-audit (1 references)
target prot opt source destination
DROP all -- bad.spammer.com anywhere
DROP all -- legitimate.user.com anywhere

Et le libérer :

iptables -D fail2ban-Zimbra-audit 2

Too many connections, slow down.

Orange a décidé qu'il faut parler lentement à ses MX (ça date un peu maintenant)...

Sinon les mails sont "bloqués" (le relai est bloqué en fait) avec une erreur :

status=deferred (delivery temporarily suspended: host smtp-in.orange.fr[80.12.242.148] refused to talk to me: 421 mwinf5c29 ME Trop de connexions, veuillez verifier votre configuration. Too many connections, slow down. OFR004_104 [104]

Voilà les éléments qui permettent d'adapter son postfix à Orange (compilation d'éléments trouvés sur le net et qui semblent fonctionner pour nous)...

Dans /etc/postfix/transport, on ajoute des transport spécifiques pour Orange/Wanadoo mais également pour les autres qui "filtrent" de la même manière.

wanadoo.com slow:
wanadoo.fr slow:
orange.com slow:
orange.fr slow:
nordnet.fr slow:
yopmail.com slow:
laposte.net slow:
free.fr slow:
alice.fr slow:
ymail.com yahoo:
rocketmail.com yahoo:

Dans /etc/postfix/master.cf, on crée les règles correspondantes.

#
# Slow
#
slow    unix    -       -       n       -       5       smtp
   -o syslog_name=postfix-slow
   -o smtp_destination_concurrency_limit=3
   -o slow_destination_rate_delay=1
yahoo    unix    -       -       n       -       5       smtp
   -o syslog_name=postfix-slow
   -o smtp_destination_concurrency_limit=3
   -o slow_destination_rate_delay=1

Dans /etc/postfix/main.cf, on ajoute les variables (la première ligne est peut-être déjà déclarée dans votre main.cf).

transport_maps = hash:/etc/postfix/transport, regexp:/etc/postfix/transport.regexp

slow_destination_recipient_limit = 20
slow_destination_concurrency_limit = 2
slow_destination_rate_delay = 2s
default_destination_concurrency_limit = 10

yahoo_initial_destination_concurrency = 1
yahoo_destination_concurrency_limit = 4
yahoo_destination_recipient_limit = 2
yahoo_destination_rate_delay = 1s

On définit les expressions régulières pour Yahoo, dans /etc/postfix/transport.regexp

/yahoo(\.[a-z]{2,3}){1,2}$/  yahoo:

Puis on redémarre la chose.

postmap /etc/postfix/transport
/etc/init.d/postfix restart

The specified virtual disk needs repair

Le besoin est simple : migrer quelques VM qui restent sur un vieux VMware Server 2.0.x vers des ESX., avec le passage d'un stockage local à un stockage partagé (une baie EQL).

La manip' est rodée : on accède au volume local (du vieux VMware Server) via un montage NFS depuis un des ESX, puis on utilise une commande CLI (depuis la vMA) pour déplacer le vmdk de la VM tout en changeant son format...

Et là ce soir, un magnifique "Unable to clone virtual disk : A general system error occurred: The specified virtual disk needs repair". Sur deux VM...

Google n'aide pas trop sur le coup : plein de threads avec la même erreur, grosso modo dans le même genre de situation mais pas de vraie solution. Un coup de "-a lsilogic" avec les vieux ESX, l'utilisation du store browser pour faire la copie (marche pas dans le cas de la migration depuis un VMware Server), etc. Mais rien pour résoudre mon soucis.

Donc on a ressorti les fondamentaux : le defrag !

Sur le VMware Server :

vmware-vdiskmanager -d mon_fichier.vmdk

Puis, depuis la vMA :

vmkfstools --server IP_de_mon_ESX -i "/vmfs/volumes/vmware-server/ma_VM/mon_fichier.vmdk" "/vmfs/volumes/nouveau_volume/mv_VM/mon_fichier.vmdk" -d thin

Et là, joie et bonheur, cela fonctionne !

Export CSV des comptes

Il existe une commande zmprov pour exporter la liste totale des comptes mais on ne récupère que les adresses email...

Voici un script qui exporte les comptes "complets" : prénom, nom, nom affiché, adresse email.

#!/bin/bash

clear
echo -e "##############################################################################"
echo -e "# Zimbra getuserCSV.sh ver 0.1 #"
echo -e "##############################################################################"

# /* Paramètres */
echo ""
echo -n "Nom de domaine (ex : zimbra.com) : "
read NOM_DOMAINE
echo -n "Nom du fichier export (ex : /tmp/utilisateurs.csv) : "
read NOM_FICHIER

rm -f $NOM_FICHIER

touch $NOM_FICHIER

# Vérification version ZCS
VERSION=`su - zimbra -c 'zmcontrol -v'`;
ZCS_VER="/tmp/zcsver.txt"

# Récupération password LDAP
ZIMBRA_LDAP_PASSWORD=`su - zimbra -c "zmlocalconfig -s zimbra_ldap_password | cut -d ' ' -f3"`
LDAP_MASTER_URL=`su - zimbra -c "zmlocalconfig -s ldap_master_url | cut -d ' ' -f3"`

touch $ZCS_VER
echo $VERSION > $ZCS_VER

echo -e "Récupération utilisateurs"

grep "Release 5." $ZCS_VER
if [ $? = 0 ]; then
USERS=`su - zimbra -c 'zmprov gaa'`;
fi

grep "Release 6." $ZCS_VER
if [ $? = 0 ]; then
USERS=`su - zimbra -c 'zmprov -l gaa'`;
fi

grep "Release 7." $ZCS_VER
if [ $? = 0 ]; then
USERS=`su - zimbra -c 'zmprov -l gaa'`;
fi

echo -e "Traitement utilisateurs"
for ACCOUNT in $USERS; do
NAME=`echo $ACCOUNT`;
DOMAIN=`echo $ACCOUNT | awk -F@ '{print $2}'`;
ACCOUNT=`echo $ACCOUNT | awk -F@ '{print $1}'`;
ACC=`echo $ACCOUNT | cut -d '.' -f1`

if [ $NOM_DOMAINE == $DOMAIN ] ;
then
OBJECT="(&(objectClass=zimbraAccount)(mail=$NAME))"
dn=`/opt/zimbra/bin/ldapsearch -H $LDAP_MASTER_URL -w $ZIMBRA_LDAP_PASSWORD -D uid=zimbra,cn=admins,cn=zimbra -x $OBJECT | grep dn:`
displayName=`/opt/zimbra/bin/ldapsearch -H $LDAP_MASTER_URL -w $ZIMBRA_LDAP_PASSWORD -D uid=zimbra,cn=admins,cn=zimbra -x $OBJECT | grep displayName: | cut -d ':' -f2 | sed 's/^ *//g' | sed 's/ *$//g'`
givenName=`/opt/zimbra/bin/ldapsearch -H $LDAP_MASTER_URL -w $ZIMBRA_LDAP_PASSWORD -D uid=zimbra,cn=admins,cn=zimbra -x $OBJECT | grep givenName: | cut -d ':' -f2 | sed 's/^ *//g' | sed 's/ *$//g'`
#userPassword=`/opt/zimbra/bin/ldapsearch -H $LDAP_MASTER_URL -w $ZIMBRA_LDAP_PASSWORD -D uid=zimbra,cn=admins,cn=zimbra -x $OBJECT | grep userPassword: | cut -d ':' -f3 | sed 's/^ *//g' | sed 's/ *$//g'`
cn=`/opt/zimbra/bin/ldapsearch -H $LDAP_MASTER_URL -w $ZIMBRA_LDAP_PASSWORD -D uid=zimbra,cn=admins,cn=zimbra -x $OBJECT | grep cn: | cut -d ':' -f2 | sed 's/^ *//g' | sed 's/ *$//g'`
#initials=`/opt/zimbra/bin/ldapsearch -H $LDAP_MASTER_URL -w $ZIMBRA_LDAP_PASSWORD -D uid=zimbra,cn=admins,cn=zimbra -x $OBJECT | grep initials: | cut -d ':' -f2 | sed 's/^ *//g' | sed 's/ *$//g'`
sn=`/opt/zimbra/bin/ldapsearch -H $LDAP_MASTER_URL -w $ZIMBRA_LDAP_PASSWORD -D uid=zimbra,cn=admins,cn=zimbra -x $OBJECT | grep sn: | cut -d ':' -f2 | sed 's/^ *//g' | sed 's/ *$//g'`

if [ $ACC == "admin" ] || [ $ACC == "wiki" ] || [ $ACC == "galsync" ] || [ $ACC == "ham" ] || [ $ACC == "spam" ]; then
echo "Utilisateur système non traité : $NAME"
else
echo "$NAME;'$displayName';'$givenName';'$sn'" >> $NOM_FICHIER
fi
else
echo "Utilisateur $NAME non traité"
fi

done

echo -e "Tous les comptes ont été exportés dans $NOM_FICHIER..."

Pneumatique ou électrique ?

Tout le monde se souvient de la video Shouting in datacentre.

Des études sérieuses ont été menées sur l'impact des alarmes incendies (on parle des sirènes, pas du gaz) sur la vie des disques en datacentre...

Ca fait encore un truc de plus à vérifier lors des visites.

Ca cause de (gros) datacentres

Ca ne s'adresse pas vraiment à nous mais ça permet d'apprendre plein de choses...
James Hamilton's blog

Ces gros opérateurs de clouds sont définitivement les premiers à utiliser du "commodity hardware".

Storage is cheap

A partir du moment où on choisit sa solution de stockage en fonction de ses besoins, storage is cheap.
Le SAN/NAS hardware n'est pas la solution ultime qui répond à toutes les problématiques, des alternatives sont possibles...

Quelques liens, en vrac, sur le sujet :
http://www.techrepublic.com/blog/datacenter/calculate-iops-in-a-storage-array/2182
http://constantin.glez.de/blog/2010/06/closer-look-zfs-vdevs-and-performance
http://blog.laspina.ca/ubiquitous/running-zfs-over-iscsi-as-a-vmware-vmfs-store (merci Tof)
http://www.seanodes.com/ (que nous distribuons)
http://www.nexentastor.org/
http://www.open-e.com/ (que nous distribuons aussi)
http://www.nimblestorage.com/
http://www.openfiler.com/
http://www.freenas.org/ (avec une version 8 qui support le ZFS et qui fonctionne TRES bien)

Dernière modification le 01/07/2011