La commande de déduplication de dovecot ne fait qu'une partie du travail à la fois (genre 30 mails). J'ai pas trop compris pourquoi, mais un strace montre qu'il regarde /proc/meminfo avant de quitter. Ici quelqu'un d'autre a ce problème.
En regardant vite-fait dans les sources, on trouve :
pool = pool_alloconly_create("deduplicate", 10240);
Est-ce que ce pool est extensible ? Aucune idée. Mais effectivement, si la hash table utilisée pour retenir les références à comparer est limitée à ça, 10ko ça va être juste. Ce n'est qu'une hypothèse.
Perso j'ai bourriné :
for ((i=0; i<500; i++)); do doveadm deduplicate -m -u john mailbox INBOX; done
Dovecot a même une commande pour dédupliquer les messages d'une même boîte aux lettres (un seul dossier) directement. On peut l'utiliser si on a par exemple mis en place une réplication mais que les deux boîtes aux lettres avaient déjà été remplies auparavant.
Si on veut faire confiance à un certificat auto-signé, le mettre dans /usr/local/share/ca-certificates/ et lancer update-ca-certificates. Attention uniquement *.crt est pris en compte.
Réplication avec dovecot : j'ai enfin mis en place chez moi entre une VM et mon serveur @home. J'avais déjà dit ici que ça fonctionnait, voici quelques précisions.
J'ai mis le plus gros de la config (donnée sur la page liée) dans le local.conf, comme ça c'est propre (il n'y a pas de section prédéfinie dans conf.d pour tout).
Ne pas oublie d'activer les plugins dans 10-mail.conf sinon "holol ça sync pas".
Pour la synchro, si on n'a pas envie de jouer avec des clefs SSH, surtout pas en root, le dsync over TCP + TLS semble acceptable (protégé par un mot de passe partagé). Par contre il faut que les certificats soient reconnus (qu'on fasse confiance au CA qui l'a émis). Et bien sûr, le nom de domaine utilisé doit match celui du certificat.
La réplication réplique aussi les règles sieve (au premier resync suivant une modif). Il suffit donc juste d'installer les paquets et d'activer les modules sur la 2e machine pour que ça fonctionne.
Déclenchement d'une synchro : doveadm sync -u john tcps:serveur_en_face:12345
Ne pas oublier qu'il y a aussi un cache des adresses dans postfix… quand c'est lui qui garde la réponse (négative par exemple, quand on a oublié un bout de conf), ça sert à rien de s'acharner sur le backend…
En cherchant "relay" dans la conf de postfix pour trouver comment faire un smarthost (obligé car port 25 bloqué), je suis tombé sur "smtp_fallback_relay". En gros, comme un smarthost, mais en cas d'erreur auparavant.
Du coup, en v6 (pas bloqué) je parle directement aux serveurs mails, en v4 je passe par un relais.
Un petit coup d'iptables en passant pour REJECT le port 25 au lieu de DROP par le FAI pour éviter les timeout, c'est tout bon (enfin autant que cela puisse être avec un port 25 bloqué…).
Upgrade wheezy vers jessie dans un conteneur LXC sur un host lui-même déjà en jessie ? Et sans cracher sur systemd ? Facile, il suffit de rajouter à la config LXC les deux lignes proposées ici (le reste sur getty/udev est déjà de base ou inutile).
lxc.autodev = 1
lxc.kmsg = 0
J'avais denyhosts depuis le début sur mon serveur @home mais ça a été supprimé de jessie. Je me suis dit que je m'en fichais pas mal au final, c'est pas de la sécurité ou quoi c'est surtout pour pas se faire pourrir les logs.
Là j'ai dû plonger dans /var/log/auth.log au boulot et… ouah du spam en continu, c'est bien casse-pieds pour suivre. Le moment de se plonger dans fail2ban donc !
Bah c'est tout bête comme dit dans l'article cité, et ça a l'air plus évolué.
Exemple, on peut afficher le statut actuel du ban sur SSH :
$ sudo fail2ban-client status ssh
Status for the jail: ssh
|- filter
| |- File list: /var/log/auth.log
| |- Currently failed: 1
| - Total failed: 219
- action
|- Currently banned: 1
| - IP list: 45.114.11.50
- Total banned: 1
Pour ajouter des plages IP à ne pas bannir, on peut copier le jail.conf dans jail.local comme suggéré et juste laisser "ignoreip", pour override. Ensuite :
fail2ban-client reload ssh
et vérif :
fail2ban-client get ssh ignoreip
Pas mal le reload sélectif et la verif en CLI ! :)
NTP qui segfault sur un Kimsufi avec grsec sous ubuntu 12.04 ? D'après un strace c'est juste après un "Deleting interface" en IPv6. Naïvement, on désactive IPv6 (avec une directive "interface ignore"), et hop ça segfault plus, youpi…
Sauf que quelques temps plus tard, on a toujours du drift ! Un ntpq -p montre qu'il se sync avec rien du tout… et en fait dans le log, on voit qu'il listen sur juste rien… il faut réactiver IPv4 explicitement, avec une directive "interface listen". joie.
Je connaissais pas les socket dans bash mais c'est mignon :)
Doc de config SSL pour dovecot qui juste marche. On peut utiliser le même certif que pour postfix, par exemple celui généré par le paquet ssl-cert. Et perso j'ai mis ssl=required :-'
Faire passer l'auth SASL de postfix directement par dovecot (comme ça, un seul endroit où configurer l'auth). Attention au distingo "smtpd_recipient_restrictions" et "smtpd_relay_restrictions" qui doivent être tous deux configurés pour laisser passer les utilisateurs SASL (soit globalement dans main.cf soit uniquement pour le port de soumission (587), dans master.cf).
Quand ça veut pas entre dovecot et PAM, il suffit de mettre l'authentification en verbeux et de voir que c'est pas le bon nom qui est vérifié (il y a le nom de domaine dedans, comme pour une config en virtualhost).
auth_username_format = %Ln
machinectl n'a pas de moyen simple d'entrer dans un conteneur qui tourne (comme vzctl enter quoi). Mais la solution est toute simple, puisque ce sont de simples cgroups, on peut entrer dans l'environnement d'une VM "à la main", avec une commande qui s'appelle nsenter. Ici un exemple clair :)
A marché chez moi : sudo nsenter -t 1210 -m -u -i -n
§ "Overriding vendor settings"
Je savais qu'on pouvait override une unit systemd fournie par le mainteneur d'un paquet par exemple en la copiant/modifiant dans /etc. En fait on peut aussi n'override qu'un paramètre à la fois : un dossier de config drop-in est prévu !
Donc si on veut juste changer un truc dans une unit, on peut "dériver" de l'unit de base et changeant le paramètre que l'on veut. C'est ce que fait systemctl set-propery.
Un show sur le service montre alors la liste des config drop-in du service :
Drop-In: /etc/systemd/system/systemd-nspawn@jessie.service.d
└─50-MemoryLimit.conf
À faire aussi pour LXC ou les containers nspawn systemd si on veut gérer des limites mémoire.
Avec systemd, quand on a le comptage mémoire par cgroup, on peut utiliser systemd-cgtop pour voir la consommation mémoire de chaque service/slice.
Par contre si on met une limite vraiment basse à un nspawn, on a une erreur inattendue :
Failed at step EXEC spawning /usr/bin/systemd-nspawn: Argument list too long
J'ai testé pour vous… les conteneurs systemd (nspawn).
Ça marche à peu près, on sent quand même que c'est tout frais (sous Debian Jessie, systemd 215).
Principalement, problème de conf avec journald, sous Debian apparemment le journal propre à systemd (le binaire) est dans du non-persistant (/run), et donc quand l'unit nspawn persistante cherche à lier les journaux host/guest, entre eux, boum. Il suffit de copier l'unit systemd, mettre "auto" à l'option de journal et zou, le conteneur se lance bien avec un start et machined le voit bien (si on met dans /var/lib/container et pas /var/lib/machines).
Ça a l'air pratique d'un côté d'avoir ça intégré aux outils habituels (journal, unit, …), à voir comment ça évolue, je vais aussi tester un peu plus.
irqbalance qui spamme plusieurs fois par minute dans les logs… apparemment faut changer une option… joie.
Quand on crée une dummy (ip link add type dummy), il charge automatiquement le module qui va bien. Sauf que le module créée de base dummy0. Et si la commande doit créer dummy0 elle aussi ? Eh bien, elle passe pas. Parce que dummy0 existe déjà ! Donc avant la commande, dummy0 existe pas et… la commande se plaint que dummy0 existe déjà :)
Pratique aussi pour aptitude -f install quand on est dans un chroot sur une machine qui boot plus.
Virer initctl :
dpkg-divert --local --rename --add /sbin/initctl
ln -s /bin/true /sbin/initctl
Remettre :
rm /sbin/initctl
dpkg-divert --local --rename --remove /sbin/initctl