Le Blog de Cyrille BORNE

Paysan de l'internet

Un peu de serveur debian mais pas trop, épisode 1

Rédigé par Cyrille BORNE 14 commentaires

Bien. J'ai donc viré mon ipfire qui ne répondait plus au besoin du contrôle parental, je vous rappelle que j'utilisais aussi Ipfire de façon détournée, à savoir serveur de fichiers et petit serveur web pour y mettre mon BoZon. Remplacement par Debian. Je vous évite l'affront de : 

  1. je vais sur le site debian pour chercher une netinstall
  2. je la colle dans multisystem
  3. je fais une installation avec 4 partitions séparées, le /, le home, le var et le swap. Je fais ce choix simplement parce qu'à partir du moment où je vais avoir du web, il vaut mieux prévoir un gros var
  4. je suis la netinstall, étape par étape pour me retrouver avec une invite. 

La première chose que je fais, je passe l'ordinateur en ipfixe de façon à pouvoir virer le clavier et l'écran et tout piloter par SSH. En root, édition du fichier /etc/network/interfaces pour avoir un truc qui ressemble à ça : 

iface eth0 inet static
address 192.168.x.x
netmask 255.255.255.0
gateway 192.168.x.x 

A partir de ce moment là je peux me connecter en SSH à mon serveur. Il est à noter que par sécurité dans debian et depuis quelques temps, on ne peut plus par défaut accéder à la machine en root, si bien qu'il faut se connecter en user puis en root. Installation de fail2ban, j'irai configurer dans un prochain épisode et application du script ci-dessous que j'ai trouvé sur le site de Rémi Poignon

créer le fichier ​nano /etc/init.d/firewall et coller y le contenu de ce qui suit en supprimant ou en rajoutant les lignes qui vont vous intéresser : 

#!/bin/sh 
# Réinitialise les règles
iptables -t filter -F 
iptables -t filter -X 
 
# Bloque tout le trafic
iptables -t filter -P INPUT DROP 
iptables -t filter -P FORWARD DROP 
iptables -t filter -P OUTPUT DROP 
 
# Autorise les connexions déjà établies et localhost
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
iptables -t filter -A INPUT -i lo -j ACCEPT 
iptables -t filter -A OUTPUT -o lo -j ACCEPT 
 
# ICMP (Ping)
iptables -t filter -A INPUT -p icmp -j ACCEPT 
iptables -t filter -A OUTPUT -p icmp -j ACCEPT 
 
# SSH
iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT    # Attention, si vous avez changé le port SSH dans le fichier /etc/ssh/sshd_config, indiquez le à la place de 22 
iptables -t filter -A OUTPUT -p tcp --dport 22 -j ACCEPT 
 
# DNS
iptables -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT 
iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT 
iptables -t filter -A INPUT -p tcp --dport 53 -j ACCEPT 
iptables -t filter -A INPUT -p udp --dport 53 -j ACCEPT 
# NTP (horloge du serveur) 
iptables -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT
 
# HTTP
iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT 
iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT 
# HTTP Caldav
iptables -t filter -A OUTPUT -p tcp --dport 8008 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 8008 -j ACCEPT
# HTTPS
iptables -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT
# HTTPS Caldav
iptables -t filter -A OUTPUT -p tcp --dport 8008 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 8443 -j ACCEPT
# FTP 
iptables -t filter -A OUTPUT -p tcp --dport 20:21 -j ACCEPT 
iptables -t filter -A INPUT -p tcp --dport 20:21 -j ACCEPT 
# Mail SMTP 
iptables -t filter -A INPUT -p tcp --dport 25 -j ACCEPT 
iptables -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT 
iptables -t filter -A INPUT -p tcp --dport 587 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 587 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 465 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 465 -j ACCEPT
 
# Mail POP3
iptables -t filter -A INPUT -p tcp --dport 110 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 110 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 995 -j ACCEPT 
iptables -t filter -A OUTPUT -p tcp --dport 995 -j ACCEPT 
 
# Mail IMAP
iptables -t filter -A INPUT -p tcp --dport 993 -j ACCEPT 
iptables -t filter -A OUTPUT -p tcp --dport 993 -j ACCEPT 
iptables -t filter -A INPUT -p tcp --dport 143 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 143 -j ACCEPT
# Anti Flood / Deni de service / scan de port
iptables -A FORWARD -p tcp --syn -m limit --limit 1/second -j ACCEPT
iptables -A FORWARD -p udp -m limit --limit 1/second -j ACCEPT
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/second -j ACCEPT
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT

donner les droits d'exécution : ​chmod +x /etc/init.d/firewall

exécuter le script : /etc/init.d/firewall

inscrit au démarrage : update-rc.d firewall defaults

​On peut vérifier en faisant un iptables -L que toutes les règles sont en place. C'est vraiment intéressant comme principe pour moi qui ne connais absolument rien à IPTABLES car en fait c'est très intuitif. A chaque redémarrage, il vire tout, il bloque tout et il applique les règles données en clair. Je sais déjà que je vais devoir ajouter les ports pour jabber par exemple, et certainement virer DAV. On voit ici juste une "faille", si on a bloqué des adresses manuellement, elles seront retirées de la machine au démarrage suivant. Néanmoins, une debian ne doit pas théoriquement rebooter chaque matin. 

Du fait d'utiliser BoZon j'ai trois choses à mettre en place : 

  • les paquets qui vont bien,
  • l'autorisation d'exploiter les fichiers htaccess,
  • limiter la bande passante en upload parce que dans cette conjecture, ça pompe tout à fond et la navigation devient difficile.

en root apt-get install php5-gd ph5p-curl php5 libapache2-mod-bw 

Les premiers sont les dépendances nécessaires au fonctionnement de BoZon, le dernier permet de limiter la bande passante. On va éditer le fichier /etc/apache2/sites-available/000-default.conf, et y coller 

BandwidthModule On
ForceBandWidthModule On
Bandwidth all 162400
<Directory /var/www/html/>
AllowOverride all
</Directory>

Il est à noter que je ne fais pas plusieurs virtualhost ne gérant pour ce serveur qu'un seul nom de domaine et certainement un seul site. La première partie concerne la limitation de la bande passante, avec la taille en bits. Il est même possible de mettre des limitations par extension de fichiers, si vous partagez par exemple avec tata Simone vos merveilleux films de vacances qui font quelques gigas. La fin c'est pour activer le htaccess. 

Voilà à l'heure actuelle où j'en suis, j'étudie tranquillement à mon rythme, c'est toujours ça de pris pour le cerveau. Pas de regret de ne pas avoir pris de solution clé en main, on apprend plus et on cadre mieux le besoin pour des performances assez intéressantes, seulement 130 Mo de RAM sont occupés. 

Fil RSS des articles de ce mot clé