Ces notes ont été prises lors de la configuration d’un serveur dédié OVH kimsufi, installé avec Ubuntu Server 12.04 LTS.
Le but de cette machine est d’héberger toutes sortes de services : courriel, serveur web pour galeries de photos et (ce) blog, intégration continue (avec Jenkins), sauvegardes personnelles, vpn privé ; bref, un peu tout ce qu’on peut faire en quelques clics avec le « nuage », mais en gardant la mainmise sur la confidentialité et la localisation des données…
Ces notes sont principalement destinées à moi même pour le jour où je dois reprendre à zéro (en l’occurrence je les ai prises durant la migration d’un ancien serveur ovh vers un nouveau), mais je pense aussi qu’elles pourraient servir d’autres « admins système du dimanche »
J’assume dans cet article qu’un système Ubuntu Server 12.04 LTS a été installé par OVH sur votre machine :
Bien démarrer
1 |
# apt-get update && apt-get upgrade |
1 |
# reboot |
1 |
# adduser anthony |
1 |
# visudo |
1 2 3 4 5 |
[...] # Allow members of group sudo to execute any command %sudo ALL=(ALL:ALL) ALL [...] |
on ajoute l’utilisateur principal au groupe sudo
1 |
# adduser anthony sudo |
on se déconnecte, et sur la machine locale, on lit le contenu de la clef SSH publique :
1 2 3 4 |
$ cat ~/.ssh/id_rsa.pub $ ssh anthony@host $ mkdir ~/.ssh $ vim ~/.ssh/authorized_keys |
on y insère le contenu de la clef public
1 |
$ chmod 600 .ssh/authorized_keys |
on se déconnecte, on se reconnecte sans mot de passe :
1 2 |
$ ssh anthony@host $ sudo vim /etc/ssh/sshd_config |
1 2 3 |
[...] PermitRootLogin no [...] |
1 2 3 |
$ sudo vim /etc/hostname $ sudo vim /etc/hosts $ sudo reboot |
Outils divers à installer
1 2 3 4 5 |
$ sudo apt-get install ntp ntpdate $ sudo /etc/init.d/ntp stop $ sudo ntpdate ca.pool.ntp.org $ sudo /etc/init.d/ntp start $ sudo apt-get install nmap iptraf mtr hardinfo |
Parefeu avec ufw
Avant de l’activer, on autorise ssh (ou sinon … c’est dommage )
1 2 |
$ sudo ufw allow 22 $ sudo ufw enable |
on verifie que ca fonctionne à coups de nmap du poste client, et on autorise les ports un à un
Serveur web pour wordpress, galeries en tout genre (apache/mysql/php5)
1 2 3 |
$ sudo apt-get install apache2 php5 mysql-server libapache2-mod-php5 php5-mysql phpmyadmin php5-sqlite php5-tidy $ sudo vim /etc/php5/apache2/php.ini $ sudo vim /etc/apache2/httpd.conf |
1 |
ServerName hostname |
1 2 |
$ sudo a2enmod ssl proxy_http rewrite $ sudo service apache2 restart |
Le courrier
Avec postfix pour smtp, postgrey pour réduire le courriel indésirable, et dovecot pour accéder à ses boites en Imap Start tls
1 |
$ sudo apt-get install postfix postgrey dovecot-imapd dovecot-postfix postfix |
Postfix
En migrant postfix de 2.7 a 2.9 faire très attention en recopiant l’ancienne configuration, le mieux est sans doute de reprendre avec la conf par defaut et ajouter lesregles une par une
1 |
# cp /home/anthony/etc/postfix/main.cf main.cf |
- mettre à jour le hostname,
- ajouter certaines regles de filtrage, dont le passage par postgrey, dont la configuration se trouve dans /etc/default/postgrey (rien à faire normalement)
- augmenter la taille maximale par défauts des courriels : message_size_limit = 31457280 (si on met rien c’est 10Mo, pour info gmail c’est 25Mo)
1 2 |
$ sudo vim /etc/aliases $ sudo newaliases |
Parfois il peut être utile d’ouvrir 1 autre port que le port 25 (smtp) ; comme par exemple le port 587 (submission) – si par exemple votre FAI ne vous autorise pas à utiliser le port 25 en sortant à part pour son propre serveur smtp.
Dans ce cas, rendez vous dans /etc/postfix/master.conf , afin de decommentez cette ligne :
1 2 |
[...] submission inet n - - - - smtpd |
Ensuite, il vous suffit de recharger la configuration postfix, et de demander l’ouverture du port 587 à votre parefeu:
1 |
# postfix reload |
1 |
# ufw allow 587 |
Dovecot
configuration dans /etc/dovecot/dovecot.conf quand on migre de 1.2.9 vers 2.0.19 : ce n’est pas une bonne idée de garder la configuration, il vaut mieux prendre celle par défaut et la modifier.
Profitons en pour migrer du format mailbox vers Maildir (pas de grosses préférence pour l’un ou pour l’autre : mailbox tous les messages d’un dossier dans 1 fichier, Maildir chaque message dans son fichier; mais tous les logiciels semblent prendre Maildir par défaut aujourd’hui…)
1 |
$ sudo dsync -u username mirror mbox:~/mail:INBOX=/var/mail/username mais d'abord on édite /etc/dovecot/conf.d/10-mail.conf |
1 2 3 4 |
namespace { separator = / inbox = yes } |
pour configurer les accès distants (pop3s, imaps)
1 2 |
$ sudo vim /etc/dovecot/conf.d/01-mail-stack-delivery.conf $ sudo vim /etc/dovecot/conf.d/10-master.conf |
on peut jeter un coup d’oeil à la configuration :
1 |
$ sudo dovecot -n |
Par défaut, les dossiers IMAP seront sauvegardés sous Mailbox/.nom_du_dossier; si comme moi vous préférez ne pas avoir le . devant le nom du répertoire, dans /etc/dovecot/conf.d/01-mail-stack-delivery.conf rajoutez :LAYOUT=fs à la suite du chemin de votre boite :
1 |
mail_location = maildir:~/Mailbox:LAYOUT=fs |
enfin, il peut etre interessant d’utiliser un mot de passe different de celui de votre compte principal; pour cela dovecot permet de configurer une base de mot de passe :
dans /etc/dovecot/conf.d/10-auth.conf
1 2 3 4 5 |
auth_mechanisms = plain passdb { driver = passwd-file args = /etc/dovecot/passwd } |
pour ajouter des entrees dans /etc/dovecot/passwd :
1 2 3 4 |
$ sudo doveadm pw -s ssha Enter new password: Retype new password: {SSHA}SooqprNGh90i020FU8StgpzRzEiKB6Ne |
et vous pouvez recopier le mot de passe dans /etc/dovecot/passwd :
1 |
exemple:{SSHA}SooqprNGh90i020FU8StgpzRzEiKB6Ne |
Ceci étant fait, on peut même déléguer l’autorisation de smtp a dovecot :
1 2 3 4 5 6 7 8 9 10 |
service auth { ... unix_listener /var/spool/postfix/private/auth { mode = 0660 # Assuming the default Postfix user and group user = postfix group = postfix } ... } |
en verifiant que /etc/postfix/main.cf contient ces informations :
1 2 3 4 5 6 7 8 9 |
smtpd_sasl_type = dovecot # Can be an absolute path, or relative to $queue_directory # Debian/Ubuntu users: Postfix is setup by default to run chrooted, so it is best to leave it as-is below smtpd_sasl_path = private/auth # and the common settings to enable SASL: smtpd_sasl_auth_enable = yes smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination |
Liens utiles :
- http://wiki2.dovecot.org/HowTo/PostfixAndDovecotSASL
- http://wiki2.dovecot.org/Migration/MailFormat
- http://www.dovecot.org/list/dovecot/2010-September/053186.html
- http://wiki2.dovecot.org/HowTo/PostfixAndDovecotSASL
Jenkins
pour builder toute sorte de projets :
1 |
$ sudo apt-get install openjdk-7-jdk subversion git ant ia32-libs maven |
Faites attention à la version de java dans le path :
1 |
$ java -version |
si ce n’est pas java 7 fourni par openjdk, il faut forcer les alternatives :
1 |
$ sudo update-java-alternatives -s java-1.7.0-openjdk-amd64 |
Pour installer jenkins :
On peut suivre les instructions du wiki officiel de Jenkins.
jenkins_home est par défaut situé dans /var/lib/jenkins, ayant un immense espace de stockage sur /home, il peut être intéressant de changer ce défaut !
- pour déménager jenkins :
1 2 3 |
sudo /etc/init.d/jenkins stop sudo usermod -m -d /home/jenkins jenkins sudo vim /etc/default/jenkins |
on y met a jour JENKINS_HOME avec /home/jenkins
1 |
sudo /etc/init.d/jenkins start |
Pour pouvoir y lancer des tests d’intégration nécessitant un serveur X11 :
1 2 3 |
$ sudo apt-get install vnc4server fluxbox # su jenkins $ vncserver |
et on rentre le mot de passe de vnc
Liens utiles :
- https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+on+Ubuntu
- http://askubuntu.com/questions/141791/is-there-a-way-to-update-all-java-related-alternatives
- http://blog.code4hire.com/2011/09/changing-the-jenkins-home-directory-on-ubuntu-take-2/
- http://blog.dahanne.net/2011/07/18/run-ui-tests-on-a-headless-jenkins-hudson-continuous-integration-server-running-ubuntu/
VPN avec pptp
1 |
$ sudo apt-get install pptpd |
1 |
$ sudo ufw allow 1723 |
1 |
$ sudo vim /etc/ppp/pptpd-options |
On va utiliser les dns d’OpenDns
1 2 3 4 |
[...] ms-dns 208.67.222.222 ms-dns 208.67.220.220 [...] |
1 |
sudo vim /etc/pptpd.conf |
1 2 3 4 |
[...] localip 10.99.99.99 remoteip 10.99.99.100-199 [...] |
1 |
sudo vim /etc/ppp/chap-secrets |
1 2 3 |
[...] sampleusername pptpd samplepassword * [...] |
1 |
sudo vim /etc/sysctl.conf |
il faut y décommenter net.ipv4.ip_forward=1
1 |
sudo sysctl -p |
1 |
sudo vim /etc/default/ufw |
DEFAULT_FORWARD_POLICY » on remplace « DROP » par « ACCEPT »
1 |
sudo vim /etc/ufw/before.rules |
au tout debut du fichier :
1 2 3 4 5 6 7 8 9 |
# NAT table rules *nat :POSTROUTING ACCEPT [0:0] # Allow forward traffic to eth0 -A POSTROUTING -o eth0 -j MASQUERADE # Process the NAT table rules COMMIT |
1 |
sudo ufw disable && sudo ufw enable |
1 |
sudo /etc/init.d/pptpd restart |
pour ouvrir les ports fermés par ufw aux utilisateurs connectes en vpn :
1 |
sudo ufw allow proto tcp from 10.99.99.99/24 to any port 3306 |
Liens utiles :
- http://silverlinux.blogspot.ca/2012/05/how-to-pptp-vpn-on-ubuntu-1204-pptpd.html
- http://opensourcehacker.com/2011/10/23/set-up-pptp-virtual-private-network-vpn-server-on-ubuntu-linux/
DNS avec Bind
1 |
# cp -rf /etc/bind /etc/bind.orig |
1 |
# /etc/init.d/bind9 stop |
named.conf/local : on y lie les fichiers des zones qu’on gère, named.conf.options on y configure les options de sécurité
1 |
$ sudo ufw allow 53/udp |
1 |
$ sudo ufw allow 53/tcp |
1 |
$ sudo service ufw start |
1 |
# /etc/init.d/bind9 start |
on peut verifier la confiuration avec :
1 |
# named-checkzone mondomaine.com /etc/bind/domaine.com.hosts |
ca devrait etre correct, il n’y a plus qu’ a faire pointer votre registrar vers votre nouveau serveur dns
Liens utiles :
Sécuriser son serveur dédié avec fail2ban :
fail2ban permet de bannir les clients (momentanément) qui échouent trop de fois leur authentification à votre serveur dédié ; ssh est bien sûr un service important à surveiller, mais dovecot et apache peuvent l’être tout autant.
1 |
$ sudo apt-get install fail2ban |
1 |
$ cd /etc/fail2ban/ |
1 |
$ sudo cp jail.conf jail.local |
1 |
$ sudo vim jail.local |
Pour activer les notifications par courriels :
1 2 |
destemail = your_email@domain.com action = %(action_mw)s |
Pensez aussi à mettre bantime en valeur infinie :
1 |
bantime = -1 |
chaque jail est un service surveillé, il suffit de rendre enabled à true pour activer la surveillance.
1 |
$ sudo /etc/init.d/fail2ban restart |
https://help.ubuntu.com/community/Fail2ban
Lien utile :
Restaurer les sauvegardes d’une machine
- pour copier des arborescences complètes (plein de petits fichiers) entre 2 machines, on utilise tar :
1 |
$ tar czf - a-directory | ssh user@host "tar xvzf -" |
- export avec phpmyadmin (pour ne pas sélectionner les tables systèmes) et on importe en ligne de commande :
1 |
$ mysql -u root -h localhost < localhost.sql |
ensuite, il n’y a plus qu’à créer un nouvel utilisateur et lui affecter les droits pour les bases des applications
Lien utile :
Pour aller plus loin :