Sécuriser le système
Gestion des ports
Le but est de fermer les ports ouverts par divers dæmons après installation du système.
Ce sont en général des dæmons qui ouvrent des ports. Pour fermer un port, vous devez soit désactiver le dæmon du démarrage pour ne pas qu'il se lance, soit le désinstaller (en supprimant le package).
Pour visualiser les ports ouverts (LISTEN), utilisez la commande suivante :
Code : Tout sélectionner
demonux:/# netstat -lp
Connexions Internet actives (seulement serveurs)
Proto Recv-Q Send-Q Adresse locale Adresse distante Etat PID/Program name
tcp 0 0 *:4427 *:* LISTEN 2016/rpc.statd
tcp 0 0 *:sunrpc *:* LISTEN 1644/portmap
tcp 0 0 *:auth *:* LISTEN 1996/inetd
tcp 0 0 localhost:smtp *:* LISTEN 1984/exim4
tcp6 0 0 *:ssh *:* LISTEN 2204/sshd
udp 0 0 *:3072 *:* 2016/rpc.statd
udp 0 0 *:920 *:* 2016/rpc.statd
udp 0 0 *:bootpc *:* 1807/dhclient3
udp 0 0 *:sunrpc *:* 1644/portmap
NOTE : la commande netstat -taupe donne des infos supplémentaires tel que le PID du programme etc...
Si vous avez à killer un programme.
inetd
tcp 0 0 *:auth *:* LISTEN 1996/inetd
inetd est un service réseau qui écoute les ports pour démarrer le service adéquat en fonction de la connexion sur le port.
Cela permet d'éviter d'avoir des services qui tournent en permanence afin de gagner en ressources.
Si vous n'en avez pas besoin, vous pouvez le supprimer : dpkg -P inetd
Par défaut le port auth (113) est ouvert, pour le fermer, éditez le fichier /etc/inetd.conf et commentez la ligne
ident stream tcp wait identd /usr/sbin/identd identd
Relancez la conf d'inetd par la commande :
RPC
Les RPC (développées par sun) permettent l’exécution de procédures sur une machine distante.
Les RPC sont utilisées par NFS, NID etc... si vous ne comptez pas utiliser ces programmes, vous pouvez les supprimer.
(plus d'infos :
http://coredump.developpez.com/nfs/)
tcp 0 0 *:sunrpc *:* LISTEN 1644/portmap
tcp 0 0 *:4427 *:* LISTEN 2016/rpc.statd
udp 0 0 *:3072 *:* 2016/rpc.statd
udp 0 0 *:920 *:* 2016/rpc.statd
Vous pouvez désinstaller portmap & nfs-common:
exim4 est le dæmon mail par défaut de Debian, et il écoute sur localhost.
Si ce n'est pas le cas, vous pouvez le reconfigurer, tapez la commande : dpkg-reconfigure exim4-config
Si votre serveur ne fait pas serveur mail, laissez la distribution en local, Il vous demandera alors sur quelle adresse écouter, laissez l'adresse: 127.0.0.1
Après installation d'Apache et MySQL, vous devez obtenir ceci :
Proto Recv-Q Send-Q Adresse locale Adresse distante Etat PID/Program name
tcp 0 0 localhost:mysql *:* LISTEN 2480/mysqld
tcp 0 0 localhost:smtp *:* LISTEN 7160/exim4
tcp6 0 0 *:www *:* LISTEN 6830/apache2
tcp6 0 0 *:ssh *:* LISTEN 1971/sshd
udp 0 0 *:bootpc *:* 1952/dhclient3
Sécuriser SSHD
Il peut être intéressant d'interdire de se logguer directement en root pour plus de sécurité.
Pour cela dans le fichier /etc/ssh/sshd_config, mettez la valeur PermitRootLogin à no
PermitRootLogin no
et pour encore plus de sécurité, vous pouvez restreindre l'accès SSH à certains utilisateurs ou groupes, via les paramètres : AllowUsers et AllowGroups
Vous pouvez aussi utiliser fail2ban pour filtrer les tentatives de connexions SSH (voir dans le paragraphe pour aller plus loin).
Firewall / Iptables
La dernière opération consiste à installer un pare-feu via un script iptables.
NOTE : Si vous n'êtes pas à l'aise avec les scripts iptables et que vous avez un accès graphiques à votre serveur (sic), vous pouvez utiliser les programmes suivants :
firestarter:
http://doc.ubuntu-fr.org/firestarter
FirewallBuilder :
http://www.fwbuilder.org/
Un peu de documentation sur iptables :
http://doc.ubuntu-fr.org/iptables
http://www.linux-france.org/prj/inetdoc ... -tutorial/
Voici un script de départ que vous pouvez modifier :
https://www.malekal.com/fichiers/secure ... irewall.sh
Ce dernier n'ouvre que les ports 22 et 80, à vous de le customizer selon les ports à ouvrir sur votre serveur.
Dans le cas d'un serveur distant, il peut être dangereux d'effectuer des tests. Si vous fermez le port SSH, vous perdez la main sur le serveur.
Vous pouvez alors utiliser ce script qui reset toutes les tables iptables :
https://www.malekal.com/fichiers/secure ... irewall.sh
Après avoir mis les scripts en exécution (chmod +x), pour effectuer un test, il suffit de lancer la commande suivante :
/root/firewall && sleep 120 && /root/no-firewall.sh
Le pare-feu sera alors lancé pendant 120s puis tout sera remis à zéro, dans le cas où vous avez fait une erreur de script, tout sera à nouveau accessible après ces 120s.
De quoi effectuer autant de test que vous voulez.
Une fois le script firewall OK, copiez le dans /etc/init.d et lancez la commande suivante pour que le script se charge au démarrage :
Vous pouvez scanner votre serveur depuis une machine distance avec nmap :
http://nmap.org/
ou éventuellement depuis un site testant les pare-feu.
https://www.grc.com/x/ne.dll?bh0bkyd2
http://www.auditmypc.com/firewall-test.asp
Note pour les utilisateurs Dedibox :
Dedibox utilise un système de monitoring qui se connecte sur le port 161, vous devez donc ouvrir ce port, pour cela, rajoutez les lignes suivantes :
# Monitoring Dedibox
iptables -A INPUT -i $wlan -s 88.191.254.0/24 -p tcp --dport 161 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i $wlan -s 88.191.254.0/24 -p udp --dport 161 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o $wlan -d 88.191.254.0/24 -p tcp --sport 161 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o $wlan -d 88.191.254.0/24 -p udp --sport 161 -m state --state ESTABLISHED -j ACCEPT
Firewall et DoS
On peux aussi définir des règles pour limiter le nombre de connexion sur le port 80.
Pour tester, vous pouvez utiliser le programme ab qui est fournit avec le package Apache.
Exemple :
Voici un exemple de script qui permet de filtrer le nombre de connexions sur le port 80 :
#!/bin/bash
IPT=/sbin/iptables
# Max connection in seconds
SECONDS=10
# Max connections per IP
BLOCKCOUNT=10
# ....
# ..
# default action can be DROP or REJECT
DACTION="DROP"
$IPT -F
$IPT -N LOGDROP
$IPT -A LOGGING -j LOG -m limit --limit 10/m --log-prefix "Possible-DoS: " --log-level 4
$IPT -A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --set
$IPT -A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --update --seconds ${SECONDS} --hitcount ${BLOCKCOUNT} -j LOGGING
$IPT -A LOGDROP -j ${DACTION}
# ....
Je vous donne aussi ce script qui peut être interressant pour bloquer des IP sur des requêtes identiques :
https://www.malekal.com/fichiers/secure ... /ban_ip.sh
Par exemple, si l'on prend cette portion de log d'attaque.
Code : Tout sélectionner
62.163.251.181 - - [27/Feb/2008:09:14:57 +0100] "GET https://www.malekal.com//search/index.php?action=go&blork=743hbvysbtVTRVDRW^%^F^VF^WF^D$%WD$%DWC$#WDF$%WFDW%^T&GYHU*@T^VDT^R HTTP/1.1" 403 219 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Hotbar 4.3.1.0)"
80.200.13.7 - - [27/Feb/2008:09:14:57 +0100] "GET https://www.malekal.com//search/index.php?action=go&blork=743hbvysbtVTRVDRW^%^F^VF^WF^D$%WD$%DWC$#WDF$%WFDW%^T&GYHU*@T^VDT^R HTTP/1.1" 403 219 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.5) Gecko/20031007"
91.64.5.214 - - [27/Feb/2008:09:14:57 +0100] "GET https://www.malekal.com//search/index.php?action=go&blork=743hbvysbtVTRVDRW^%^F^VF^WF^D$%WD$%DWC$#WDF$%WFDW%^T&GYHU*@T^VDT^R HTTP/1.1" 403 219 "-" "Microsoft-WebDAV-MiniRedir/5.1.2600"
81.241.161.172 - - [27/Feb/2008:09:14:57 +0100] "GET https://www.malekal.com//search/index.php?action=go&blork=743hbvysbtVTRVDRW^%^F^VF^WF^D$%WD$%DWC$#WDF$%WFDW%^T&GYHU*@T^VDT^R HTTP/1.1" 403 219 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.5a) Gecko/20030728 Mozilla Firebird/0.6.1"
77.250.132.166 - - [27/Feb/2008:09:14:57 +0100] "GET https://www.malekal.com//search/index.php?action=go&blork=743hbvysbtVTRVDRW^%^F^VF^WF^D$%WD$%DWC$#WDF$%WFDW%^T&GYHU*@T^VDT^R HTTP/1.1" 403 219 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Q312461)"
89.3.137.76 - - [27/Feb/2008:09:14:57 +0100] "GET https://www.malekal.com//search/index.php?action=go&blork=743hbvysbtVTRVDRW^%^F^VF^WF^D$%WD$%DWC$#WDF$%WFDW%^T&GYHU*@T^VDT^R HTTP/1.1" 403 219 "-" "Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.5) Gecko/20031021"
On peut voir que c'est la même page avec la même string qui est envoyée (
https://www.malekal.com//search/index.p ... U*@T^VDT^R ).
Le script fait un grep sur les logs pour récupérer cette string et récupère les IP des attaquants pour les bloquer.
A customisez selon le type d'attaque :
DoS.png
iptables et strings :
iptables est capable de filtrer sur les strings - exemple pour les attaques :
GET /w00tw00t.at.ISC.SANS
Vous pouvez utiliser la commande :
iptables -I INPUT -d xxx.xxx.xxx.xxx -p tcp --dport 80 -m string --to 70 --algo bm --string 'GET /w00tw00t.at.ISC.SANS.' -j DROP
On limite la recherche aux strings de 70 octets maximum (sinon cela peux faire ramer le serveur).
Cette commande peux donc être utile sur les attaques avec des stings spécifiques.
Encore une fois, cela est suffisant pour certains DoS, plus le nombre d'IP est grand plus difficile l'attaque sera à bloquer.
Enfin dans le cas d'un syn flood, cela ne marche pas.
Firewall DOS et IPSET
IPSET peux aussi s'avérer utile pour bannir un nombre assez conséquent d'IPs.
IPSET nécessite des modules dans le kernel, par exemple, sur les kernel OVH ce dernier n'est pas disponible.
modprobe ip_set_hash_net
modprobe ip_set_list_set
Créer une chain ipset et la bloquer sur ipatbles :
ipset -N attaquant iphash --hashsize 4096 --probes 2 --resize 50
iptables -I INPUT -p tcp -m multiport --dport 80,443 -m set --match-set attaquant src -j DROP
Ajouter une IP à la chain ipset :
ipset -! add attaquant $i
On peux aussi ajouter des subnets etc.
Lister les IPs dans IPset :
ipset list
Vider une chain :
ipset -F attaquant
Sécuriser le service FTP
Dans un tout autre registre, il est fortement conseiller de renforcer la sécurité de votre serveur FTP en filtrant les connexions extérieures.
Dans la mesure du possible, créez des règles iptables pour filtrer les connexions et ne laisser passer que votre adresse IP fixe (ou vos classes d'IP si vous êtes en IP dynamique).
Certains infections volent les informations de connexion FTP, je vous conseille de lire cette page afin d'avoir un aperçu sur ces infections :
http://forum.malekal.com/hack-web-site-t22837.html
Pour aller plus loin contre les attaques DoS
Voici un programme Floodmon qui permet d'aider à bloquer les attaques Syn Flood :
http://spamcleaner.org/fr/misc/floodmon.html
Si vous êtes chez OVH - Il est aussi possible de mettre un firewall matériel en amont de votre serveur dédié :
https://www.malekal.com/2013/01/01/ovh- ... isco-asdm/
DoS2.png
Quelques liens et programmes utiles et divers
Vous pouvez aussi désinstaller le package ppp qui ne sert à priori à rien : apt-get remove ppp
Enfin, vous pouvez aussi faire en sorte que seul le root puisse utiliser les programmes de compilations :
Code : Tout sélectionner
chmod o-x /usr/bin/gcc-4.1
chmod o-x /usr/bin/make
chmod o-x /usr/bin/apt-get
chmod o-x /usr/bin/dpkg
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.