Retour d’expérience sur une upgrade proxmox  4.4 => 5 qui tourne mal sur une machine munie de plusieurs interfaces réseaux.

Symptôme:

Au reboot, après mise à jour, le quorum ne démarre plus un problème cmap.
toutes les commandes pvecm renvoi l’erreur « cannot initialize CMAP », le répertoire /etc/pve semble ne plus contenir qu’une partie des fichiers, et ce, en lecture seule. bref catastrophique.

Le détail indique des défaillances multiples de telle que celle-ci:

[libqb] debug: qb_ipcc_disconnect() (ipcc.c:398:qb_ipcc_disconnect)
[quorum] crit: quorum_initialize failed: 2 (quorum.c:112:service_quorum_initialize)
[libqb] debug: qb_ipcc_disconnect() (ipcc.c:398:qb_ipcc_disconnect)
[confdb] crit: cmap_initialize failed: 2 (confdb.c:239:service_cmap_initialize)
[main] debug: dfsm_set_mode – set mode to 0 (dfsm.c:520:dfsm_set_mode)
[libqb] debug: qb_ipcc_disconnect() (ipcc.c:398:qb_ipcc_disconnect)
[dcdb] crit: cpg_initialize failed: 2 (dfsm.c:1382:dfsm_initialize)
[main] debug: dfsm_set_mode – set mode to 0 (dfsm.c:520:dfsm_set_mode)
[libqb] debug: qb_ipcc_disconnect() (ipcc.c:398:qb_ipcc_disconnect)
[status] crit: cpg_initialize failed: 2 (dfsm.c:1382:dfsm_initialize)
[main] debug: enter cfs_fuse_getattr / (pmxcfs.c:126:cfs_fuse_getattr)

 

Après avoir vainement cherché un problème de fichiers de config perdus, en fait,  il s’agissait d’un problème réseau assez sournois car pourtant tout les tests effectués (ping du nom, ssh et test multicast vers les autres proxmox) fonctionnaient sans soucis dans les deux sens.

Si, comme moi,  vous disposez de plusieurs interface réseaux, vous aurez peut-être opté pour l’idée de « dédier » l’interface vmbr0 pour l’accès à l’interface, les sauvegardes et le quorum, et fait un agrégat (bond) sur vmbr1 afin d’optimiser les performances réseaux des VM.

Pourtant, c’est en supprimant l’agrégat que tout c’est remis à fonctionner.

=> Donc =>

Une solution possible:

Si, après mise à jour, vous rencontrez ce problème, vous pouvez tenter la désactivation ou la suppression / recréation de cette seconde interface (vmbr1).

 

Ps: Après cette remise en marche, un problème de certificat est apparu, (probablement lié aux nombreuses tentatives de remise en état durant plusieurs heures) réglé par

pvecm updatecerts –force

suivi d’un reboot.

Bon courage à vous si vous êtes dans cette situation, en espérant avoir pu vous aider.

Bonjour,

Ceci n’est pas un tutoriel mais plus un retour d’expérience car je n’ai pas la prétention de connaitre tout les mécanismes en place dans l’IPv6.

Suite a quelque méli-mélo  un problème commercial avec OVH, je me suis retrouvé avec un serveur en housing chez eux, mais sans IPv4 pour mes VM.

J’ai donc profité de cette latence commerciale pour tenter le faire un point sur l’avancement de l’IPv6.

Afin de pouvoir accrocher des nom d’hote sur mon domaine, j’ai décidé d’affecter des IPv6 statiques sur mes différentes VM.

Attribution:

En IPv6, le fournisseur vous fourni un sous réseau IPv6, généralement de classe /64 et vous laisse donc les 64 autres bits a votre disposition soit 18 milliards de milliards d’adresses !

Passerelle:

Chez FREE, l’adresse de la freebox est généralement la 1ere IP de la plage  donc l’adresse 2001:xxxx:xxxx:xxxx::1
Chez OVH, selon leur documentation, les octets bas des 5 derniers nombres sont a ff cela donne donc quelque chose du genre
2001:xxxx:xxxx:xxff:ff:ff:ff:ff   c’est a dire en affichant l’adresse avec les zero non significatifs cela donne 2001:xxxx:xxxx:xxff:00ff:00ff:00ff:0ff …

=> Oups !!! OVH semble avoir oublié le but d’un masque de sous réseau => Tout ce qui est en dehors du masque est défini comme extérieur et donc à la passerelle située OBLIGATOIREMENT dans le sous réseau…
Le masque réellement fonctionnel avec une telle passerelle est donc /56

Expérimentation sous Windows:

Depuis ma machine virtuelle équipée d’un Windows 2008 Sp2, l’IPv6 se configure sans difficulté. Microsoft n’est pas regardant sur le fait que la passerelle ne se trouve pas dans le même sous réseau…
En faisant pointer les DNS IPv6 vers ceux de Google dont je le rappel les ip sont:

2001:4860:4860::8888 et
2001:4860:4860::8844

L’accès à google est immédiat. Un petit test sur www.ipv6-test.com confirme que tout vas bien.

1ère observation: Sur un poste uniquement IPv6, on n’a accès a aucun site dont le serveur n’est qu’en IPv4.
2ème observation, plus curieuse: Windows Update ne fonctionne pas… il n’est pas IPv6 ready en 2015 alors qu’ils intègrent pourtant l’IPv6 depuis 2008 dans leurs logiciels ?!

Hormis ce problème de défaut de préparation du système de mise à jour, le système s’accoutume bien de l’IPv6 statique, et fonctionne de façon stable, même en désactivant totalement l’IPv4.
La connexion au bureau distant par exemple fonctionne très bien, ainsi qu’un serveur web IIS situé sur ce poste.
En revanche les petits logiciels annexes, une très vieille version de Serv-U (version 6.4) et freeFTPd ne fonctionnent pas mais cela parait assez logique.

Expérimentation sous Ubuntu 14.04.2

L’installation de l’IPv6 statique se fait dans le fichier /etc/network/interfaces

1ère observation: La mise à jour via apt-get update && apt-get upgrade -y fonctionne nickel. Preuve que les dépôts Ubuntu ont une longueur d’avance sur leurs alter-égo de Microsoft.
2ème observation: SSH fonctionne nickel. La connexion réalisée avec Winscp et Putty depuis mon poste abouti parfaitement.
3ème observation: La suppression de la config de l’IPv4 mène a un dysfonctionnement et a plus de 2 mn d’attente a chaque redémarrage. Donc j’ai laisser un config réseau bidon pour qu’il passe outre ce problème.

Sauf qu’Ubuntu, contrairement a Microsoft, ne tolère pas cette erreur de masque… Et au bout d’un délai aléatoire se plante, perte de connectivité totale du serveur jusqu’au reboot.

L’incohérence a pour effet de lui faire perdre sa route par défaut … Donc seul les postes dans le même sous réseau que lui peuvent continuer a dialoguer avec lui… et … c’est bête pour un serveur situé dans un datacentre !

conclusions

Même les grands de l’informatique tel qu’OVH peuvent se perdre dans la complexité de l’IPv6.
Les choses avances tout doucement sur cette évolution inévitable. Il y’a plein de pièges a connaitre, les mécanismes sont beaucoup plus complexes qu’en IPv4 et on est encore loin de pouvoir faire du FULL IPv6 sous peine de ce couper d’une grande partie du monde…

A bientôt

 

Compacter le vhdx d’un serveur Ubuntu virtualisé sur Hyper-v

Attention, AVANT TOUTE CHOSES:

  • Pour éviter tout problème, d’abord faire une sauvegarde de la machine virtuelle avant cette opération a faire à vos risques & périls
  • L’opération est longue, donc à faire a un moment ou la machine peut être arrêté suffisamment longtemps (genre 2h)

 La problématique:

Hyper-v fait croitre un disque dynamique mais ne le réduit jamais. Lorsqu’une machine travaille beaucoup en création/effacement de fichiers, le volume s’accroit sans jamais décroitre une fois l’activité terminée. Ce qui peut poser des problèmes de place et aussi des difficultés pour sauvegarder un vhdx devenu gigantesque.

Dans cette exemple, un serveur Ubuntu nommé srv-travail (serveur web de test) et autre nommé srv-web (serveur proxy) tous deux passés de Ubuntu V12 à V14.

0-avancompactage

Sur un Windows virtualisé, seule l’étape 2 de ce tutoriel serait nécessaire: il suffit d’ordonner à hyper-v de compacter l’image.
Mais un serveur Ubuntu virtualisé, le contenu de l’image n’est pas directement « comprise » par hyper-v, il faut faire une étape supplémentaire assez longue qui consiste à remplir l’espace vide de 0.

Ceci peut se faire grâce à la commande zerofree

Sauf que bien sûr, cette opération ne marche pas sur un volume en activité donc, il faut le faire en étant « offline ».
On peut donc facilement réaliser cette opération avec un système portable nommé SystemRescueCD

Il peut être téléchargé sur ce lien

http://sourceforge.net/projects/systemrescuecd/files/latest/download?source=typ_redirect

1ère Étape: le vidage de l’espace libéré

  • Arrêter votre machine virtuelle Ubuntu,
  • Chargez le l’image iso dans le lecteur cdrom virtuel de votre machine,
    1-insertioncd
  • Redémarrez votre machine => celle-ci va se lancer sur SystemRescueCD
    2-demarragesystemrescuecd
  • Choisissez l’option 1, le chargement se lance pour ne s’interrompre uniquement pour demander la définition du clavier.
  • Tapez fr puis entrer
  • Vous arrivez alors sur l’interface.
    3-arrivesurinterface
  • A ce point, deux possibilités soit votre système est installé sur un LVM, soit il est basé sur un partition normale:

Si votre système est créé sur une partition LVM:

vgchange -a y

=> cette instruction vous renvoi un warning a ignorer, mais aussi le nom du volume LVM.

  • zerofree /dev/[nom du volume LVM]/root

Si votre système est créé sur une partition normale:

Vous trouverez alors votre VHDX en /dev/sda1

  • zerofree /dev/sda1

Si vous avez réussi, l’opération est longue (genre 20mn à 1h). Si cela rend la main presque immédiatement, c’est qu’en sda1 est monté une partition de boot toute petite pour un volume LVM donc dans ce cas il faut suivre le process pour un volume LVM

Exemple en LVM sur la seconde machine, srv-web:

4-operationsurlvm

 

2ème étape: le compactage

Comme d’habitude ce qui fonctionnait très bien sur les versions précédentes (Windows 2008r2) ne fonctionne plus sur les version actuelles (Windows 2012r2), quand on demande le compactage du volume sous un Windows 2012r2… il ne se passe rien ! Génial ! Donc il faut le faire en PowerShell

Click droit sur votre icône Powershell puis « Exécuter en tant qu’Administrateur »
Dans la console PowerShell, vous devrez saisir les 3 instructions suivantes

Mount-VHD -Path "[chemin et nom du fichier]" -ReadOnly
Optimize-VHD -Path "[chemin et nom du fichier]" -Mode Full

5-compactagevhdx
Là aussi, cela dure assez longtemps… voire très longtemps…

Dismount-VHD "[chemin et nom du fichier]"

A noter que les commandes Mount et Dismount sont optionnelles, mais elles permettent de verrouiller le VHDX pendant l’opération pour diminuer les risques sur un environnement multi utilisateurs.

Opération terminée. Ejectez le cdrom du lecteur virtuel de la VM puis redémarrez.

Résultats

7-resultat

Dans mon exemple, j’ai gagné 6Go sur la VM srv-travail et 9Go sur la VM srv-travail. Sur d’autre machines ou j’ai effectué l‘opération, le gain a même été bien plus important. Ainsi sur un serveur de prod le vdhx est passé de 156Go à 27Go.

Montage permanent d’un dossier ftp

Suivant l’article précédent permettant de monter un partage Windows de façon permanent sous Ubuntu.

Ceci est réaliser grâce a curlftp

apt-get install curlftp

Ensuite on ajoute le point de montage dans fstab:

vi /etc/fstab et ajouter la ligne

curlftpfs#(login):(pass)@(adresse) (dossier de montage) fuse rw,user,allow_other,uid=1000,utf8,_netdev 0 0

Puis

modprobe fuse

Référence:

http://doc.ubuntu-fr.org/curlftpfs

Remerciements à Maxime pour cette information.

Ubuntu 14.04 se bloque sous hyper-v

prompt

A l’instar de Windows, Ubuntu 14.04 comporte des « fonctionnalités »… appellé « bug » par le commun des mortels. 🙂
Ubuntu 14.04 virtualisé sous hyper-v, au bout d’un certain temps « gèle » aléatoirement. Le noyau 3.13 serait en cause ce qui explique pourquoi ubuntu 12.04LTS n’a pas ce problème.

 

 

La solution en attendant un correctif du noyau  (Edit du 17/10: ce problème est aujourd’hui réglé):

cd /etc/default
sudo vi grub

ajouter "nohz=off elevator=deadline transparent_hugepage=always" dans les paramètres de la ligne "GRUB_CMDLINE_LINUX_DEFAULT"

sauvegardez puis faire:

sudo update-grub

Ensuite dans le fichier /etc/sysctl.conf

Ajouter les lignes suivante

kernel.sched_min_granularity_ns=10000000
kernel.sched_wakeup_granularity_ns=15000000
vm.dirty_ratio=10
vm.dirty_background_ratio=5
vm.swappiness=10

Sauvegardez puis redémarrez

=> le système devrait être plus stable.

 

Modification du 9 Mai 2015:

Dans sa distribution 14.04.2, Ubuntu distribue le noyau 3.16. Celui bénéfie d’une meilleur integration dans un Hyper-v sous windows 2012r2. (Windows ne signale plus l’intégration comme dégradée). Pour en bénéficier, il suffit d’installer ce noyau en utilisant la commande:

sudo apt-get install linux-image-generic-lts-utopic

Monter un partage Windows de façon permanente

120px-Human-gnome-fs-smb.svgmonter un partage Windows sous linux avec accès écriture complet

 

 

 

premier étape: Installer les utilitaires cifs

sudo apt-get install cifs-utils

deuxième étape: Créer le dossier du point de montage:

sudo mkdir /ftp

ensuite on creer le fichier contenant les identifiant réseau d’acces au partage windows:

sudo vi ~/.smbcredentials

et dedans on met:

username=(login windows de l'utilisateur)
password=(mot de passe windows de l'utilisateur)
domain=(domain de l'utilisateur)
sudo /etc/fstab

dans ce fichier on ajoute la ligne suivante:

//serveur2008/ftp /ftp cifs sec=ntlm,credentials=/home/(nomdel'utilisteur)/.smbcredentials,iocharset=utf8,file_mode=0777,dir_mode=0777 0 0

puis

sudo mount -a

pour tester

il est conseillé de sécuriser ensuite le fichier .smbcredentials avec un chmod 0600

Mise à jour:
Dans Ubuntu 14.04, il est possible d’optimiser la connexion pour utiliser la version de SMB correspondant au montage du système de destination avec le paramètres vers=x.y

avec x.y =
2.0 pour un Windows 2008/vista
2.1 pour un Windows 2008r2/windows 7
ou
3.0 pour un Windows 2012/windows8

donc la dernière version de la ligne dans le fichier fstab serait:

//serveur2008/ftp /ftp cifs sec=ntlmssp,rw,credentials=/home/(nomdel'utilisteur)/.smbcredentials,vers=2.1,iocharset=utf8,file_mode=0777,dir_mode=0777 0 0

 

 

 

Un petit script qui efface les fragments d’installations, les fichiers log gzippé de plus de 30 jours etc…:

#/bin/bash
apt-get autoremove
apt-get autoclean
apt-get clean
dpkg --purge $(COLUMNS=200 dpkg -l | grep "^rc" | tr -s ' ' | cut -d ' ' -f 2)
find /var/log/ -name "*.gz" -mtime +30 -a -exec rm -f {} \;

Creer un backup mx avec postfix et spamassassin

Le serveur de courriel utilisé est postfix

sudo apt-get install postfix

Ensuite on créer la base de données des destinations des site a relayer c’est a dire la liste de leur mx principal

sudo vi /etc/postfix/transport
### debut du fichier transport
toto.com smtp:mail.toto.com
titi.fr smtp:mx1.titi.fr
(et ainsi de suite avec tout les sites a relayer)
### fin du fichier transport

ensuite on converti le fichier text transport en hash comprehensible pas postfix:

cd /etc/postfix/
sudo postmap transport

=> ceci génère le fichier transport.db

Note importante: Si on rajoute des domaine a relayer par la suite, il ne faudra pas oublier de régénérer le fichier transport.db avec cette commande

sudo vi main.cf
### debut du fichier main.cf

# Debian specific: Specifying a file name will cause the first
# line of that file to be used as the name. The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname

smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no

# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h

readme_directory = no

# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.

alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname

mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all

#Notre configuration commence ici
myhostname = mxbackup1.mondomaine.com
mydestination = $myhostname, monserveur.{mondomainelocal}, localhost.[mondomainelocal}, localhost
relayhost =

relay_recipient_maps =
relay_domains = $mydestination,
  toto.com,
  titi.fr

smtpd_recipient_restrictions = permit_sasl_authenticated,
  permit_mynetworks,
  permit_mx_backup,
  reject_non_fqdn_hostname,
  reject_non_fqdn_sender,
  reject_non_fqdn_recipient,
  reject_unauth_destination,
  reject_unauth_pipelining,
  reject_invalid_hostname,
  reject_rbl_client zen.spamhaus.org
# helo required
smtpd_helo_required = yes
# disable vrfy command
disable_vrfy_command = yes
smtpd_data_restrictions =
  reject_unauth_pipelining,
  permit

# Delais au dela duquel on envoi un message de retard de distribution
delay_warning_time = 4h
# will it be a permanent error or temporary
unknown_local_recipient_reject_code = 450
# Duree de retention maxi
maximal_queue_lifetime = 15d
# Temps entre les essais quans la connexion vers le mx primaire echoue
minimal_backoff_time = 1000s
maximal_backoff_time = 8000s
# Temps maxi entre le helo et l'envoi par l'expediteur
smtp_helo_timeout = 60s
# nombre de destinataires maxi
smtpd_recipient_limit = 25
# how many error before back off.
smtpd_soft_error_limit = 3
# how many max errors before blocking it.
smtpd_hard_error_limit = 12

# fichier contenant les destinations des sites relayes.
transport_maps = hash:/etc/postfix/transport

# fin du fichier main.cf

ce fichier fait réference a un fichier mailname dans le dossier etc. Celui-ci doit contenir le nom du smtp de votre hebergeur:

sudo vi /etc/mailname

puis tapez le nom de votre serveur smtp sortant, par exemple:

smtp.free.fr

(si vous êtes chez free)
puis enregistrez le fichier.

Si tout a fonctionné, le lancement du service postfix

sudo service postfix start

devrait reussir.

A ce stade, cela fonctionne, mais il se trouve que les spammeurs sont des petits malins et savent qu’il est plus facile de s’infiltrer par le backup que par le serveur principal souvent mieux défendu.

Donc il convient d’armer le backup MX d’un antispam

installation de spamassassin:

sudo apt-get install -qq spamassassin spamc

Ensuite on créer un groupe spécialement pour spamassassin:

sudo groupadd -g 5001 spamd
sudo useradd -u 5001 -g spamd -s /sbin/nologin -d /var/lib/spamassassin spamd
sudo mkdir /var/lib/spamassassin
sudo chown spamd:spamd /var/lib/spamassassin

ensuite on configure spam assassin pour taguer SPAM les mails dont le score est supérieur à 5

sudo vi /etc/spamassassin/local.cf
### debut du fichier local.cf
rewrite_header Subject [***** SPAM _SCORE_ *****]
required_score 5.0
# to be able to use _SCORE_ we need report_safe set to 0
# If this option is set to 0, incoming spam is only
# modified by adding some \"X-Spam-\" headers and no
# changes will be made to the body.
report_safe 0

# Enable the Bayes system
use_bayes 1
use_bayes_rules 1
# Enable Bayes auto-learning
bayes_auto_learn 1

# Enable or disable network checks
skip_rbl_checks 0
use_razor2 0
use_pyzor 0
# This is the right place to customize your installation of SpamAssassin.
#
# See 'perldoc Mail::SpamAssassin::Conf' for details of what can be
# tweaked.
#
# Only a small subset of options are listed below
#
###########################################################################

# Add *****SPAM***** to the Subject header of spam e-mails
#
# rewrite_header Subject *****SPAM*****

# Save spam messages as a message/rfc822 MIME attachment instead of
# modifying the original message (0: off, 2: use text/plain instead)
#
# report_safe 1

# Set which networks or hosts are considered 'trusted' by your mail
# server (i.e. not spammers)
#
# trusted_networks 212.17.35.

# Set file-locking method (flock is not safe over NFS, but is faster)
#
# lock_method flock

# Set the threshold at which a message is considered spam (default: 5.0)
#
# required_score 5.0

# Use Bayesian classifier (default: 1)
#
# use_bayes 1

# Bayesian classifier auto-learning (default: 1)
#
# bayes_auto_learn 1

# Set headers which may provide inappropriate cues to the Bayesian
# classifier
#
# bayes_ignore_header X-Bogosity
# bayes_ignore_header X-Spam-Flag
# bayes_ignore_header X-Spam-Status

# Some shortcircuiting, if the plugin is enabled
#
ifplugin Mail::SpamAssassin::Plugin::Shortcircuit
#
# default: strongly-whitelisted mails are *really* whitelisted now, if the
# shortcircuiting plugin is active, causing early exit to save CPU load.
# Uncomment to turn this on
#
# shortcircuit USER_IN_WHITELIST on
# shortcircuit USER_IN_DEF_WHITELIST on
# shortcircuit USER_IN_ALL_SPAM_TO on
# shortcircuit SUBJECT_IN_WHITELIST on

# the opposite; blacklisted mails can also save CPU
#
# shortcircuit USER_IN_BLACKLIST on
# shortcircuit USER_IN_BLACKLIST_TO on
# shortcircuit SUBJECT_IN_BLACKLIST on

# if you have taken the time to correctly specify your "trusted_networks",
# this is another good way to save CPU
#
# shortcircuit ALL_TRUSTED on

# and a well-trained bayes DB can save running rules, too
#
# shortcircuit BAYES_99 spam
# shortcircuit BAYES_00 ham

endif # Mail::SpamAssassin::Plugin::Shortcircuit

### fin du fichier local.cf

Petite subtilitée: le service (daemon) de spamassassin est desactivé par défaut
donc

sudo vi /etc/default/spamassassin
et changer ENABLED=0 en ENABLE=1

puis

sudo service spamassassin start

pour mettre a jour spamassassin la commande est

sa-update

suivi du redémarrage du service:

service spamassassin restart

ce qui donne

sudo sa-update && sudo service spamassassin restart

ceci peut etre automatiser dans un tache quotidienne cron:
sudo crontab -e
ajouter la ligne
0 4 * * * sa-update && service spamassassin restart

pour le mettre a jour toute les nuit a 4h du matin.

une fois spamassassin installé, il faut l’interconnecter dans postfix
Ceci est fait dans le master.cf, le second fichier de configuration de posfix

sudo vi /etc/postfix/master.cf
### debut du fichier master.cf
#
# Postfix master process configuration file. For details on the format
# of the file, see the master(5) manual page (command: "man 5 master").
#
# Do not forget to execute "postfix reload" after editing this file.
#
# ==========================================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (100)
# ==========================================================================
smtp inet n - - - - smtpd
  -o smtpd_helo_restrictions=reject_unknown_hostname,permit
  -o content_filter=spamassassin
#smtp inet n - - - 1 postscreen
#smtpd pass - - - - - smtpd
#dnsblog unix - - - - 0 dnsblog
#tlsproxy unix - - - - 0 tlsproxy
#submission inet n - - - - smtpd
# -o syslog_name=postfix/submission
# -o smtpd_tls_security_level=encrypt
# -o smtpd_sasl_auth_enable=yes
# -o smtpd_client_restrictions=permit_sasl_authenticated,reject
# -o milter_macro_daemon_name=ORIGINATING
#smtps inet n - - - - smtpd
# -o syslog_name=postfix/smtps
# -o smtpd_tls_wrappermode=yes
# -o smtpd_sasl_auth_enable=yes
# -o smtpd_client_restrictions=permit_sasl_authenticated,reject
# -o milter_macro_daemon_name=ORIGINATING
#628 inet n - - - - qmqpd
pickup fifo n - - 60 1 pickup
cleanup unix n - - - 0 cleanup
qmgr fifo n - n 300 1 qmgr
#qmgr fifo n - n 300 1 oqmgr
tlsmgr unix - - - 1000? 1 tlsmgr
rewrite unix - - - - - trivial-rewrite
bounce unix - - - - 0 bounce
defer unix - - - - 0 bounce
trace unix - - - - 0 bounce
verify unix - - - - 1 verify
flush unix n - - 1000? 0 flush
proxymap unix - - n - - proxymap
proxywrite unix - - n - 1 proxymap
smtp unix - - - - - smtp
relay unix - - - - - smtp
# -o smtp_helo_timeout=5 -o smtp_connect_timeout=5
showq unix n - - - - showq
error unix - - - - - error
retry unix - - - - - error
discard unix - - - - - discard
local unix - n n - - local
virtual unix - n n - - virtual
lmtp unix - - - - - lmtp
anvil unix - - - - 1 anvil
scache unix - - - - 1 scache
#
# ====================================================================
# Interfaces to non-Postfix software. Be sure to examine the manual
# pages of the non-Postfix software to find out what options it wants.
#
# Many of the following services use the Postfix pipe(8) delivery
# agent. See the pipe(8) man page for information about ${recipient}
# and other message envelope options.
# ====================================================================
#
# maildrop. See the Postfix MAILDROP_README file for details.
# Also specify in main.cf: maildrop_destination_recipient_limit=1
#
maildrop unix - n n - - pipe
  flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}
#
# ====================================================================
#
# Recent Cyrus versions can use the existing "lmtp" master.cf entry.
#
# Specify in cyrus.conf:
# lmtp cmd="lmtpd -a" listen="localhost:lmtp" proto=tcp4
#
# Specify in main.cf one or more of the following:
# mailbox_transport = lmtp:inet:localhost
# virtual_transport = lmtp:inet:localhost
#
# ====================================================================
#
# Cyrus 2.1.5 (Amos Gouaux)
# Also specify in main.cf: cyrus_destination_recipient_limit=1
#
#cyrus unix - n n - - pipe
# user=cyrus argv=/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user}
#
# ====================================================================
# Old example of delivery via Cyrus.
#
#old-cyrus unix - n n - - pipe
# flags=R user=cyrus argv=/cyrus/bin/deliver -e -m ${extension} ${user}
#
# ====================================================================
#
# See the Postfix UUCP_README file for configuration details.
#
uucp unix - n n - - pipe
  flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
#
# Other external delivery methods.
#
ifmail unix - n n - - pipe
  flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
bsmtp unix - n n - - pipe
  flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -t$nexthop -f$sender $recipient
scalemail-backend unix - n n - 2 pipe
  flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension}
mailman unix - n n - - pipe
  flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py
${nexthop} ${user}
spamassassin unix - n n - - pipe
  user=spamd argv=/usr/bin/spamc -f -e
  /usr/sbin/sendmail -oi -f ${sender} ${recipient}

### fin du fichier master.cf

pour voir la file d’attente:

mailq

pour forcer la tentative d’envoi de la file d’attente:

postqueue -f

resoumettre la file d’attente (quand des messages n’arrivent pas a partir):

postsuper -r ALL

Réferences:

http://www.system-linux.eu/index.php?post/2009/01/15/Serveur-de-Backup-MX-sous-Postfix

http://www.howtoforge.com/postfix_backup_mx

http://www.debianadmin.com/how-to-filter-spam-with-spamassassin-and-postfix-in-debian.html

OpenVPN sur Ubuntu

Openvpn_logoL’installation d’OpenVPN présente un certain niveau de difficulté et il y’a des choses a bien garder a l’esprit.
En premier lieu, les étapes a réaliser:

1) Installer OpenVPN
2) Installer Webmin et le module de controle de OpenVPN
3) Creer l’autorité de certification
4) Creer les deux certificats (serveur et client)
5) Creer la connexion VPN partie serveur
6) Creer la connexion VPN partie cliente
7) Récuperer l’export de la partie cliente et sur l’ordinateur client dans le dossier correspondant
8) La connexion est opérationnelle.

En second lieu, le fait que l’on aura 3 réseaux: le réseau local du serveur VPN, le sous réseau de connexion, et le réseau local du client. Aucun des 3 ne doit être identiques sinon aucun routage n’est possible.
Dans cet exemple:
– le réseau local sera 192.168.10.0/24 au sein duquel, le serveur vpn sera en 192.168.10.5 sur sa carte eth0,
– le réseau de connexion 10.10.10.0/24. le réseau local du client est inconnu mais devra OBLIGATOIREMENT être différents de ces deux la.

1) Installer OpenVPN:

sudo apt-get install openvpn

Le VPN aura une interface réseau séparé (tun0) de l’interface de base (eth0) donc pour que les clients connecté puis accéder au réseau local il y aura 2 choses a effectuer:

  • S’assurer que le serveur VPN achemine les paquets entre le réseau de connexion et le réseau local en activant routage de paquets:
sudo vi /etc/sysctl.conf

décommenter la ligne
net.ipv4.ip_forward=1
puis sauvegarder et sortir.

  • Pour que les appareils du réseau local puisse répondent aux client connectés, il est nécessaire qu’ils puisse acheminer cette réponse. Les appareils ne connaissent qu’une adresse de sortie: la passerelle par défaut, donc pour des raisons pratique, c’est sur celle ci qu’il sera souhaitable d’ajouter la route vers les clients vpn pointant sur le serveur VPN.

Dans notre exemple, la route sera du style:

route add 10.10.10.0 mask 255.255.255.0 192.168.10.5

=>   où 192.168.10.5 est l’ip lan du serveur vpn et 10.10.10.0/24 le sous réseau de connexion vpn.

Il existe un cas d’exception: Free qui considère que leur usagers sont trop basiques pour avoir besoin de route statique donc, contrairement au livebox, sfr box et autres petits routeurs meme de premier prix, la Freebox n’intègre aucune route statique. Pour les malheureux freenautes, dont je fais parti, soit on transforme le serveur VPN en routeur pour en faire la passerelle par défaut du réseau, soit il faudra alors définir la route statique en persistant dans tous les appareil nécessitant un dialogue avec les clients VPN.

2) Installer webmin

(voir tuto webmin)

Installer le module openvpn en spécifiant le liens de téléchargement dans l’interface de webmin
L’adresse est:
http://www.openit.it/downloads/OpenVPNadmin/openvpn-2.6.wbm.gz

OPENVPN-1-install-module-webmin-openvpnDans Webmin =>Configuration de Webmin =>Module Webmin
recharger le modules => le module OpenVPN+CA est présent

OPENVPN-2-Apres-install-module-webmin-openvpn

3) Créer l’autorité de certification:

Remplir le formulaire puis valider.

IMPORTANT: contrairement a cette capture d’écran State doit contenir LE CODE du pays c’est a dire FR sinon cela provoque un message d’erreur.

OPENVPN-3-creation-autorite-certificationLa création dure un certain temps puis se termine:

OPENVPN-5-creation-autorite-termine

Ensuite cliquer sur Retourner a OpenVPN Administration

4) Créer les deux certificats (serveur et client):

Cliquer sur Certification authority list puis sur la droite de la ligne de votre autorité de certification sur list

D’abord le certificat serveur:

OPENVPN-7-creation-certificat-serveurPuis cliquer sur Sauvegarder
Ensuite le certificat client

OPENVPN-8-creation-certificat-client

Puis cliquer sur Sauvegarder

Normalement on doit a ce moment avoir 2 certificats avec le statut « active »:OPENVPN-9-resultat-creation-certificats

Cliquez sur « Retourner à OpenVPN Administration ».

5) Creer la connexion VPN partie serveur:

Sur l’écran OpenVPN Administration cliquez sur le bouton « VPN list » puis sur le bouton « New VPN server »

Creer la connexion Vpn en définissant
– le certificat sur le certificat serveur créé juste avant,
– L’interface désigner dans « Network Device for Bridge » est celle qui correspond a votre Lan. Dans cet exemple, c’est eth0
– la plage ip distribué hors du réseau lan du serveur vpn, par exemple 10.10.10.0/24
– l’algorithme d’authentification « Encrypt packets with cipher algorithm (option cipher) » doit être sur AES 256 CBC256 sinon ne fonctionne pas
– Le changement du port d’écoute peut être une bonne idée pour améliorer la sécurité.

OPENVPN-b-creation-vpn-server-definition-dhcpet en paramètres envoyés (a changer selon vos paramètres LAN):

push « route 192.168.10.0 255.255.255.0 »
push « dhcp-option DNS 192.168.10.3 »

Pour permettre le routage et la résolution DNS du réseau local derrière le serveur VPN.

et éventuellement: push « redirect-gateway » pour rediriger tout le trafic sur le VPN

OPENVPN-c-creation-vpn-server-definition-options-dhcppuis sauvegarder

Puis, très important, cliquer sur START pour l’activer.

6) Créer la connexion VPN partie cliente:

Cliquer sur Client List

Puis cliquer sur New VPN Client

OPENVPN-d-creation-vpn-client-1
Choisir le certificat client
Puis saisir l’ip externe (l’ip publique ou l’alias internet) de votre serveur VPN.
Note: Celle ci devra être statique ou aliassé avec un DNS dynamique.

OPENVPN-e-creation-vpn-client-1
puis Sauvegarder
Ensuite cliquer sur Export  pour récupérer le package de configuration pour l’ordinateur client a désarchiver puis copier dans le répertoire conf de celui-ci.

7) Vérification:

  • Avant de lancer la connexion un « sudo service openvpn restart » pour s’assurer de l’application des paramètres
  • S’assurer que dans le routeur (ou box) le port spécifié (ici 1194 udp) est ouvert vers l’ip du serveur VPN (ici 192.168.10.5)
  • Faire un ifconfig pour voir si l’interface tun0 est bien crée dans la liste des interfaces du serveur Ubuntu.

Il ne reste plus qu’a se connecter avec l’ordinateur client.

8) Références:

http://doc.ubuntu-fr.org/openvpn