Ceci est une ancienne révision du document !
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.
Quels paquets ont permis l'installation de ce programme ?
dpkg -S UNE_PARTIE_DU_NOM_DU_PROGRAMME
Firewall
#!/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 78.201.137.113 (Claude)
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