まこと の ブログ

MaKoTo no burogu — Journal de bord…

Aller au contenu | Aller au menu | Aller à la recherche

informatique › Auto-Hébergement internet

Votre site perso, votre blog, vos mails, etc... tout çà chez vous, çà c'est internet !
Sinon vous faites du minitel 2.0

Historique de mon expérience sur un petit serveur web perso

Fil des billets - Fil des commentaires

mercredi, 6 avril 2011

interruption de service -1-

disjoncteur.jpg
Soumis aux aléas de l'auto-hébergement, mes deux sites étaient inaccessibles une bonne partie de la journée.
En effet, pour une raison que j'ignore, le disjoncteur «30 mili» a sauté durant mon absence… Mais pas chez les voisins.
En espérant que mon installation électrique ne soit pas en défaut ^^"



jeudi, 23 septembre 2010

Serveur internet @ la maison -6-

Suite du cinquième épisode

Continuons cette série de billets de notes d'installation et configuration du serveur…
Maintenant que le serveur est prêt, il va pouvoir accueillir les différents logiciels afin de fournir les services désirés.

  • Doctlear est un CMS pour faire un ou plusieurs blog, au lieu d'utiliser canalblog, skyblog, over-blog, blogspot, etc.
  • SPIP est un CMS pour faire un site internet dynamique.
  • Piwigo associé au plugin «Piwishack» est une galerie de photo qui remplacera avantageusement des trucs comme photobucket, hiboox, imageshack, flicker, etc.
  • Tiny Tiny RSS est un lecteur de flux RSS en ligne qui remplacera iGoogle ou Google reader et ses petits camarades…
  • Roundcube est un client e-mail en ligne pour lire et envoyer ses messages de partout, directement depuis son serveur. Il remplacera donc gmail, hotmail, live, etc.
  • Piwik fournira des statistiques de visites complètes et détaillées du site et du blog. Il remplacera par exemple Google Analytics.
  • iTheora est un player vidéo qui permettra de palier à l'obsolescence de certains navigateurs internet, afin de faire une transition douce vers la vidéo lue nativement par les navigateurs web, grace aux nouveau standard «html5».

En effet, beaucoup d'entre eux ne sont pas encore capable de lire des vidéos ogv (codec video theora + audio Vorbis) ou WebM, rendant indispensable cet outil capable de basculer sur un plugin ou un lecteur alternatif .
iTheora permettra alors d'héberger soit même ses vidéos en restant interopérable, plutôt que d'utiliser les sempiternels Youtube & Dailymotion dévoreurs de bande passante et en partie responsable du filtrage du contenu et de la vitesse par certains fournisseurs d'accés internet…

samedi, 18 septembre 2010

Serveur internet @ la maison -5-

Suite du quatrième épisode

Continuons cette série de billets de notes d'installation et configuration du serveur, avec l'installation et la configuration du Firewall logiciel.

iptables pour netfilter :


  • Créer le fichier : /etc/init.d/makotoiptables
#!/bin/bash
########################
# MaKoTo - 14/12/2009
# Regle de Firewall
# Serveur hebergeant:
# - SSH
# - HTTP
# - HTTPS
# - IMAP
########################
# Debut

#Autoriser le trafic des packets entrants relatifs à des connexions déjà établies
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#Autoriser le trafic local
iptables -I INPUT 2 -i lo -j ACCEPT

# Autoriser les pings 
iptables -A INPUT -p icmp -j ACCEPT

#------------------------------
# Autorise les flux entrant
#------------------------------
# SSH serveur déporté en 1025
iptables -A INPUT  -p tcp -i eth0 --dport 1025 -j ACCEPT

# Web serveur en 80
iptables -A INPUT  -p tcp -i eth0 --dport http -j ACCEPT

# Web serveur sécurisé en 443
iptables -A INPUT  -p tcp -i eth0 --dport https -j ACCEPT

# serveur de reception de messagerie en 143
iptables -A INPUT  -p tcp -i eth0 --dport imap2 -j ACCEPT

#ajout sinon reception de mail marche pas malgres le 143 ouvert
iptables -A INPUT -p tcp -i eth0 --dport 25 -j ACCEPT

#---------------------------------------
# Bloquer les flux entrant restants
#---------------------------------------
iptables -P INPUT DROP

# Fin


  • Appliquer les règles au démarrage :

Rendre ce script exécutable :

#chmod +x /etc/init.d/makotoiptables

Éditer /etc/rc.local pour ajouter la ligne (juste avant exit 0) :

#/etc/init.d/makotoiptables
  • Vérification :
# iptables -L  (ou #iptables -L -v -n)
Chain INPUT (policy DROP)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     all  --  anywhere             anywhere
ACCEPT     icmp --  anywhere             anywhere
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:666
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:www
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:https
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:imap2
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:smtp

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination



fail2ban :

#apt-get install fail2ban

Démarrer fail2ban :

#/etc/init.d/fail2ban start
  • Vérifier le fichier de configuration : /etc/fail2ban/fail2ban.conf
[Definition]
loglevel = 1
logtarget = /var/log/fail2ban.log
socket = /var/run/fail2ban/fail2ban.sock
  • Configurer les règles des prisons dans le fichier : /etc/fail2ban/jail.conf
[DEFAULT]

# IP à ne pas bannir
ignoreip = 127.0.0.1 192.168.0.0/24
#temps de bannissement en seconde
bantime  = 3600
# nombre d’essais max avant bannissement
maxretry = 3
backend = polling
# le mail qui recevra les alertes fail2ban
destemail = root@localhost
# l’action par défaut quand on ban
banaction = iptables-multiport
# la commande pour envoyer des mail (ici avec sendmail ou postfix)
mta = sendmail
# le protocole a surveiller
protocol = tcp
#
# JAILS
#
[ssh]
# activé ou non (false)
enabled = true
# le port sur lequel le service écoute
port    = 1025
# le fichier .conf présent dans filter.d
filter  = sshd
# le fichier de log a analyser
logpath  = /var/log/auth.log
maxretry = 3

[xinetd-fail]

enabled   = false
filter    = xinetd-fail
port      = all
banaction = iptables-multiport-log
logpath   = /var/log/daemon.log
maxretry  = 2

[ssh-ddos]

enabled = true
port    = ssh
filter  = sshd-ddos
logpath  = /var/log/auth.log
maxretry = 1
#
# HTTP servers
#
[apache]

enabled = true
port    = http,https
filter  = apache-auth
logpath = /var/log/apache*/*error.log
maxretry = 1

[apache-multiport]

enabled   = true
port      = http,https
filter    = apache-auth
logpath   = /var/log/apache*/*error.log
maxretry  = 1

[apache-noscript]
#si true, video itheora deconnent!
enabled = false
port    = http,https
filter  = apache-noscript
logpath = /var/log/apache*/*error.log
maxretry = 1

[apache-overflows]

enabled = true
port    = http,https
filter  = apache-overflows
logpath = /var/log/apache*/*error.log
maxretry = 1
#
# FTP servers
#
[vsftpd]

enabled  = false
port     = ftp,ftp-data,ftps,ftps-data
filter   = vsftpd
logpath  = /var/log/vsftpd.log
maxretry = 6

[proftpd]

enabled  = false
port     = ftp,ftp-data,ftps,ftps-data
filter   = proftpd
logpath  = /var/log/proftpd/proftpd.log
maxretry = 6

[wuftpd]

enabled  = false
port     = ftp,ftp-data,ftps,ftps-data
filter   = wuftpd
logpath  = /var/log/auth.log
maxretry = 6
#
# Mail servers
#
[postfix]

enabled  = true
port     = smtp,ssmtp
filter   = postfix
logpath  = /var/log/mail.log

[couriersmtp]

enabled  = false
port     = smtp,ssmtp
filter   = couriersmtp
logpath  = /var/log/mail.log

[courierauth]

enabled  = false
port     = smtp,ssmtp,imap2,imap3,imaps,pop3,pop3s
filter   = courierlogin
logpath  = /var/log/mail.log

[sasl]

enabled  = false
port     = smtp,ssmtp,imap2,imap3,imaps,pop3,pop3s
filter   = sasl
logpath  = /var/log/mail.log

# DNS Servers

[named-refused-udp]

enabled  = false
port     = domain,953
protocol = udp
filter   = named-refused
logpath  = /var/log/named/security.log

[named-refused-tcp]

enabled  = false
port     = domain,953
protocol = tcp
filter   = named-refused
logpath  = /var/log/named/security.log

#MES REGLES

[apache-w00tw00t]
enabled = true
filter = apache-w00tw00t
action = iptables[name=Apache-w00tw00t,port=80,protocol=tcp]
logpath = /var/log/apache2/access*.log
maxretry = 1

[apache-scan]
enabled = true
filter = apache-scan
action = iptables[name=Apache-scan,port=80,protocol=tcp]
logpath = /var/log/apache2/access*.log
maxretry = 1

[dos]
enabled = true
port = 80,49152
filter = dos
logpath = /var/log/kern.log
maxretry = 1

[apache-admin]
enabled = true
port = http,https
filter = apache-admin
logpath = /var/log/apache2/*error.log
maxretry = 1

[apache-headers]
enabled = true
port = http,https
filter = apache-headers
logpath = /var/log/apache2/*error.log
maxretry = 1

[apache-invalid]
enabled = true
port = http,https
filter = apache-invalid
logpath = /var/log/apache2/*error.log
maxretry = 1

[dovecot-pop3imap]
enabled = true
filter = dovecot-pop3imap
action = iptables-multiport[name=dovecot-pop3imap, port="pop3,imap", protocol=tcp]
logpath = /var/log/maillog
maxretry = 20
findtime = 1200
bantime = 1200

Jail.conf est le fichier de définitions des services a surveiller. Il s’appuie sur des filtres préalablement définis dans /etc/fail2ban/filter.d

apache-w00tw00t.conf :

[Definition]
failregex = ^<HOST> -.*"GET \/w00tw00t\.at\.ISC\.SANS\.DFind\:\).*".*
ignoreregex =
apache-scan.conf :
[Definition]
failregex = ^<HOST> -.*"GET \/nonexistenshit.*".*
		^<HOST> -.*"GET .*xmlrpc\.php.*".*
		^<HOST> -.*"GET .*html2text\.php.*".*
ignoreregex =

dos.conf :

[Definition]
failregex = TCP: Treason uncloaked! Peer
ignoreregex =

apache-admin.conf :

[Definition]
failregex = [[]client <HOST>[]] File does not exist: .*(admin|PMA|mysql)
ignoreregex =

apache-headers.conf :

[Definition]
failregex = [[]client <HOST>[]] request failed: error reading the headers
ignoreregex =

apache-invalid.conf :

[Definition]
failregex = [[]client <HOST>[]] Invalid URI in request .*
ignoreregex =

dovecot-pop3imap.conf :

[Definition]
failregex = (?: pop3-login|imap-login): (?:Authentication failure|Aborted login \(auth failed|Disconnected \(auth failed).*rip=(?P<host>\S*),.*
ignoreregex =


À suivre…

mercredi, 15 septembre 2010

Serveur internet @ la maison -4-

Suite du troisième épisode

Continuons cette série de billets de notes d'installation et configuration du serveur, avec l'installation et la configuration du serveur e-mail (Postfix+dovecot)

Installation :

#apt-get install postfix dovecot-imapd mailutils


Configurer postfix :

#dpkg-reconfigure postfix

Répondre aux questions posées :

Configuration type du serveur de messagerie : Site Internet
Nom de courrier : mondomaine.fr (votre nom de domaine)
Destinataire des courriels de « root » et de « postmaster » : toto (un user unix)
Autres destinations pour lesquelles le courrier sera accepté : mondomaine.fr
Forcer des mises à jour synchronisées de la file d’attente des courriels : non (laisser par défaut)
Réseaux internes : 127.0.0.0/8, 192.168.0.0/24 (si votre réseau local est 192.168.0.x )
Utiliser procmail pour la distribution locale : non
Taille maximale des boîtes aux lettres (en octets) : (5Gio)
Caractère d’extension pour les adresse locales : + (laisser par défaut)
Protocoles internet à utiliser : ipv4

  • Fichier de Configuration : /etc/postfix/main.cf
# Nom de domaine de messagerie principal
mydomain = mondomaine.fr
# Nom d'hôte machine
myhostname = debianbox
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
# Nom de domaine utilisé pour les adresses incomplètes
#/etc/mailname doit contenir la valeur de mydomain
myorigin = /etc/mailname
mydestination = mondomaine.fr, debianbox, localhost.localdomain, localhost
relayhost =
mynetworks = 127.0.0.0/8, 192.168.0.0/24
mailbox_size_limit = 5368709120
recipient_delimiter = +
inet_interfaces = all
inet_protocols = ipv4
home_mailbox = Mail/

Ajouter home_mailbox = Maildir/ à la fin.

Relancer le serveur SMTP :

#/etc/init.d/postfix restart


  • Configuration en cas de refus des messages à destination de Gmail :

Éditer et ajouter dans : /etc/postfix/main.cf

transport_maps = hash:/etc/postfix/maps/transport

Créer le fichier : /etc/postfix/maps/transport

google.com smtp:smtp.monfai.fr
.google.com smtp:smtp.monfai.fr
gmail.com smtp:smtp.monfai.fr
.gmail.com smtp:smtp.monfai.fr

Relancer les démons :

#postmap /etc/postfix/maps/transport && postfix reload


Configurer dovecot :

  • Fichier de Configuration : /etc/dovecot/dovecot.conf
protocols = imap
mail_location = maildir:~/ Mail

Créer le dossier et les sous-dossiers (/usr/bin/maildirmake.dovecot ~/Maildir)

$maildirmake ~/Maildir
$maildirmake -f Sent ~/Mail
$maildirmake -f Queue ~/Mail
$maildirmake -f junkmail ~/Mail
$maildirmake -f Drafts ~/Mail
$maildirmake -f Trash ~/Mail

Relancer le serveur IMAP :

#/etc/init.d/dovecot restart


Configurer un client :

Réception :

Type de serveur : IMAP
Serveur : imap.mondomaine.fr
Nom d’utilisateur : user unix
Sécurité : Chiffrement TLS
Type d’authentification : Mot de passe

Envoi :

Type de serveur : SMTP
Serveur : smtp.mondomaine.fr
Nom d’utilisateur : votre login sur le serveur
Sécurité : Chiffrement TLS
Pas d’authentification.


Configuration pour webmail https : (par exemple roundcube)

Activer le mod ssl d’apache :

#a2enmod ssl

Modifier dans le fichier de config : /etc/php5/apache2/php.ini

date.timezone = 'Europe/Paris'

Créer un VirtualHost qui décrit à Apache le site qu’il doit héberger (le nom du site sur lequel il répond en http, quels répertoires doivent être accessibles, etc.).
Voici un modèle (qui correspond à mon VirtualHost), qui permet :

  • d’afficher le site contenu dans /var/www/webmail lorsqu’une requête arrive sur le port 443 (https), c’est-à-dire quand je tape https://mondomaine.fr dans un navigateur;
  • d’interdire l’accès aux répertoires config, temp et logs;
  • de rediriger automatiquement http://mondomaine.fr vers https://mondomaine.fr.

Fichier de config : /etc/apache2/sites-available/mondomaine.fr

NameVirtualHost *:443

<VirtualHost *:80>
         DocumentRoot    /var/www/webmail
         ServerName      mondomaine.fr
         Redirect        / https://mondomaine.fr/
</VirtualHost>

<VirtualHost *:443>
        DocumentRoot    /var/www/webmail
        ServerName      mondomaine.fr
        SSLEngine on
        SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
        SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

        <Directory /var/www/webmail/>
                Options FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>

        <Directory /var/www/webmail/config>
                Options -FollowSymLinks
                AllowOverride None
        </Directory>

        <Directory /var/www/webmail/temp>
                Options -FollowSymLinks
                AllowOverride None
        </Directory>

        <Directory /var/www/webmail/logs>
                Options -FollowSymLinks
                AllowOverride None
                Order allow,deny
                Deny from all
        </Directory>

        ErrorLog        /var/log/apache2/mail_error.log
        CustomLog       /var/log/apache2/mail_access.log combined

</VirtualHost>

Activer ce VirtualHost  :

#a2ensite mondomaine.fr

À suivre…

- page 4 de 8 -