Ceci est une ancienne révision du document !


Sécuriser un serveur Linux

nmap -v localhost

Cette liste de ports ouverts sera nécessaire pour concevoir le firewall.

lsof -i tcp:NUMERO_DU_PORT

Une liste de commandes, avec n° PID, utilisateur, etc apparaît.

lsof -p NUMERO_PID

Les dernières lignes de cette longue liste permettent de déterminer précisément ce que fait le programme.

dpkg -S UNE_PARTIE_DU_NOM_DU_PROGRAMME

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#!/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

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 :

1
2
3
4
5
6
7
8
9
#!/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
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
  • linuxaddict/administrer/securite.1551307831.txt.gz
  • Dernière modification : 27/02/2019, 23:50
  • de Claude Clerc