mai 2012 L Ma Me J V S D « mar 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Liens
Archives de l’auteur : David
Un spammeur sur un mutualisé ?
Sur un mutualisé de base (sans suphp), comment faire pour trouver le vHost sur lequel il y a le script pourri qui envoie tous les mails ?
Parce que oui, quand on regarde dans les logs du MTA, c’est « apache@serveur » (ou « www-data@serveur ») qui les envoie : aucune trace du vHost (parce que pas de « Return-Path » dans le script, bien entendu).
En fait c’est simple…
Il suffit d’ajouter une ligne dans le .htaccess de chaque vHost :
php_value mail.force_extra_parameters -fnomduvhost@serveur
Et encore mieux, si on tourne sous php 5.3.x on a un paramètre au niveau du php.ini :
; Add X-PHP-Originating-Script: that will include uid of the script followed by the filename mail.add_x_header = On
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 = 5Le 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 "<HOST>" can
# be used for standard IP/hostname matching and is only an alias for
# (?:::f{4,6}:)?(?P<host>[\w\-.^_]+)
# Values: TEXT
#
failregex = \[ip=<HOST>;\] account - authentication failed for .* \(no such account\)$
\[ip=<HOST>;\] security - cmd=Auth; .* error=authentication failed for .*, invalid password;$
;oip=<HOST>;.* security - cmd=Auth; .* protocol=soap; error=authentication failed for .* invalid password;$
\[oip=<HOST>;.* SoapEngine - handler exception: authentication failed for .*, account not found$
WARN .*;ip=<HOST>;ua=ZimbraWebClient .* security - cmd=AdminAuth; .* error=authentication failed for .*;$
NOQUEUE: reject: RCPT from .*\[<HOST>\]: 550 5.1.1 .*: Recipient address rejected:
# .*\[ip=<HOST>;\] .* - 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 un transport spécifique pour Orange/Wanadoo.
wanadoo.com slow: wanadoo.fr slow: orange.com slow: orange.fr slow:
Dans /etc/postfix/master.cf, on crée la règle correspondante.
# # Slow - special pour Orange/Wanadoo # slow 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 slow_destination_recipient_limit = 20 slow_destination_concurrency_limit = 10 default_destination_concurrency_limit = 10
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.vmdkPuis, 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 !
Laisser un commentaireExport 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.
Laisser un commentaireCa 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 ».
Laisser un commentaireStorage 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
Laisser un commentaireFixing email
Pour la réunion de la communauté francophone Zimbra, j’ai fait une présentation sur ce sujet.
Basée sur le white paper de Scott qui est à l’origine de ZCS.
Il est téléchargeable ici, entre autre : Top ten ways to fix email
Laisser un commentaireChangement de DNS
Je passerai sur le « chez nous, on sait faire »… Un peu trop facile.
Pierre a fait un bon article, donc je lie simplement : Pourquoi « Le Monde » a-t-il brutalement disparu d’Internet vendredi matin ?
Laisser un commentaire
