linuxaddict:administrer:securite

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
linuxaddict:administrer:securite [24/04/2018, 18:49] Claude Clerclinuxaddict:administrer:securite [10/02/2024, 19:09] (Version actuelle) Claude Clerc
Ligne 1: Ligne 1:
-{{tag>sécurité serveur Linux Fail2ban}}+{{tag>sécurité serveur Linux Fail2ban bash firewall}}
 ====== Sécuriser un serveur Linux ====== ====== Sécuriser un serveur Linux ======
 +
 +===== Commandes (très) utiles =====
 +
 +==== Quels sont les ports ouverts ? ====
 +  nmap -v localhost
 +Cette liste de ports ouverts sera nécessaire pour concevoir le firewall.
 +
 +==== Quel programme utilise un port donné ? ====
 +  lsof -i tcp:NUMERO_DU_PORT
 +Une liste de commandes, avec n° PID, utilisateur, etc apparaît.
 +
 +==== Que fait le programme de PID donné ? ====
 +  lsof -p NUMERO_PID
 +Les dernières lignes de cette longue liste permettent de déterminer précisément ce que fait le programme.
 +
 +Pour obtenir le PID (//Process IDentifier//) de tout ce qui tourne sur votre machine :
 +  ps auxwww
 +
 +Par exemple, pour trouver le PID de geany (qui est affiché à l'écran) :
 +  ps auxwww | grep geany
 +retourne :
 +  <nom d'utilisateur>      4967  0.6  0.8 103446360 136824 ?    Sl   déc.20   5:00 geany
 +Le PID de geany est donc actuellement de 4967. Il changera à chaque lancement de geany.
 +
 +==== Quels sont les paquets concernés par ce programme ? ====
 +  dpkg -S UNE_PARTIE_DU_NOM_DU_PROGRAMME
 +
 +===== Firewall =====
 +<sxh bash>
 +#!/bin/sh
 +### Firewall ###
 +
 +case "$1" in
 +
 +start|restart|reload|force-reload)
 +# 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 toute connexion avec l'IP VOTRE_IP_PUBLIQUE_PERSO
 +iptables -t filter -A INPUT -s VOTRE_IP_PUBLIQUE_PERSO -j ACCEPT
 +iptables -t filter -A OUTPUT -d VOTRE_IP_PUBLIQUE_PERSO -j ACCEPT
 +
 +# Limiter les risques de flood (limite à 1 connexion par seconde)
 +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
 +
 +# 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) On autorise le ping
 +iptables -t filter -A INPUT -p icmp -j ACCEPT
 +iptables -t filter -A OUTPUT -p icmp -j ACCEPT
 +
 +# SSH (port 22)
 +iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
 +iptables -t filter -A OUTPUT -p tcp --dport 22 -j ACCEPT
 +
 +# DNS sortant
 +iptables -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT
 +iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT
 +# DNS entrant
 +#iptables -t filter -A INPUT -p tcp --dport 53 -j ACCEPT
 +#iptables -t filter -A INPUT -p udp --dport 53 -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
 +
 +# HTTPS
 +iptables -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT
 +iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT
 +
 +# MySQL
 +iptables -t filter -A OUTPUT -p tcp --dport 3306 -j ACCEPT
 +#iptables -t filter -A INPUT -p tcp --dport 3306 -j ACCEPT
 +iptables -t filter -A OUTPUT -p udp --dport 3306 -j ACCEPT
 +#iptables -t filter -A INPUT -p udp --dport 3306 -j ACCEPT
 +
 +# MySQL-proxy
 +#iptables -t filter -A OUTPUT -p tcp --dport 6446 -j ACCEPT
 +#iptables -t filter -A INPUT -p tcp --dport 6446 -j ACCEPT
 +#iptables -t filter -A OUTPUT -p udp --dport 6446 -j ACCEPT
 +#iptables -t filter -A INPUT -p udp --dport 6446 -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
 +
 +# Mail sSMTP
 +#iptables -t filter -A INPUT -p tcp --dport 465 -j ACCEPT
 +iptables -t filter -A OUTPUT -p tcp --dport 465 -j ACCEPT
 +#iptables -t filter -A INPUT -p tcp --dport 587 -j ACCEPT
 +iptables -t filter -A OUTPUT -p tcp --dport 587 -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
 +
 +# Mail sPOP3
 +#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 143 -j ACCEPT
 +#iptables -t filter -A OUTPUT -p tcp --dport 143 -j ACCEPT
 +
 +# Mail sIMAP
 +#iptables -t filter -A INPUT -p tcp --dport 993 -j ACCEPT
 +#iptables -t filter -A OUTPUT -p tcp --dport 993 -j ACCEPT
 +
 +# NTP (horloge du serveur)
 +iptables -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT
 +;;
 +
 +stop)
 +# Réinitialise les règles
 +iptables -t filter -F
 +iptables -t filter -X
 +
 +# Autorise tout le trafic
 +iptables -t filter -P INPUT ACCEPT
 +iptables -t filter -P FORWARD ACCEPT
 +iptables -t filter -P OUTPUT ACCEPT
 +;;
 +
 +status)
 +RES=$(iptables -L | grep INPUT | awk '{print $4}' | sed 's/)//g')
 +[ "$RES" != "ACCEPT" ] && echo "Firewall actif" || echo "Firewall inactif"
 +;;
 +
 +*) echo "Usage: service firewall {start|stop|status|restart|reload|force-reload}"
 +;;
 +esac
 +exit 0
 +
 +</sxh>
  
 ===== Fail2ban ===== ===== Fail2ban =====
   * [[https://doc.ubuntu-fr.org/fail2ban]]   * [[https://doc.ubuntu-fr.org/fail2ban]]
  
 +==== Fignolage ====
 +
 +Après installation de fail2ban et paramétrage pour sshd :
 +
 +Se connecter en root.
 +
 +Installer, si ce n'est déjà fait le paquet ''util-linux'' :
 +  apt install util-linux
 +
 +Créer le fichier ''/root/byebye.sh'' contenant :
 +<sxh bash>
 +#!/bin/bash
 +
 +for ip in $(lastb -i -s -5min | awk '{print $3}'); do {
 + if [[ $ip =~ ^[0-9] ]]; then
 + #echo $ip
 + /usr/bin/fail2ban-client set sshd banip $ip > /dev/null || true
 + fi
 +}; done
 +exit 0
 +</sxh>
 +Le rendre exécutable :
 +  chmod +x /root/byebye.sh
 +
 +Éditer la crontab :
 +  crontab -e
 +  
 +Ajouter les lignes :
 +  # Bye bye importuns !
 +  */5 * * * * /root/byebye.sh
 +
 +Quitter. La crontab se met en place.
 +
 +Lister les IP bloquées (et leur nombre) avec :
 +  fail2ban-client status sshd
 ===== Liens ===== ===== Liens =====
   * [[https://openclassrooms.com/courses/securiser-son-serveur-linux|Sécuriser un serveur Linux (OpenClassRooms)]]   * [[https://openclassrooms.com/courses/securiser-son-serveur-linux|Sécuriser un serveur Linux (OpenClassRooms)]]
 +  * [[https://doc.ubuntu-fr.org/fail2ban|Bannir des IP avec fail2ban - v2020]]
 +  * [[https://manpages.ubuntu.com/manpages/bionic/fr/man1/last.1.html|last, lastb - Afficher une liste des derniers utilisateurs connectés]]
 +  * [[https://blog.bandinelli.net/index.php?post/2015/01/02/Entretenir-et-s%C3%A9curiser-ownCloud-avec-logrotate-et-fail2ban|Entretenir et sécuriser Nextcloud/ownCloud avec logrotate et fail2ban]]
 +
 +----
 +
 +{{counter|today| personne a visité cette page aujourd'hui| personnes ont visité cette page aujourd'hui}} et {{counter}} en tout.
  • linuxaddict/administrer/securite.1524588592.txt.gz
  • Dernière modification : 24/04/2018, 18:49
  • de Claude Clerc