frogdev site francophone sur Gentoo
Vous êtes ici : Sécurité
Dernière modification : February 15 2007 19:35:35.

Sécuriser son système
Tous les ordinateurs connecté à internet subissent en moyenne un scan toutes les 1 à 5 min par d'autres machine infectées par des vers ou virus, très très souvent destiné à Microsoft et non aux systèmes GNU/Linux. Ces ordinateurs cherchent a savoir si certains ports sont vulnérables, par exemple: le port 445 pour Microsoft-ds, 139 pour samba, ce sont les trous de sécurité standards de Windows XP. Et il y a environ 700 essais de login avec ssh par semaine sur un serveur, sans compter les refus de relay smtp (mail) !
Pour garder un système sécurisé, pensez à mettre Gentoo à jour régulièrement :


# emerge sync
# emerge -uDaN world
# etc-update


rootkit
chkrootkit pour detecter un RootKit, chkrootkit est un logiciel libre sous licence GNU GPL permettant de détecter si un système UNIX n'a pas été compromis par un rootkit. Il permet de détecter les traces d'une attaque et de rechercher la présence d'un rootkit sur un système Unix/Linux en vérifiant, si des fichiers exécutables du système ont été modifiés, si la carte réseau est en mode « promiscuous », et si un ou des vers LKM (Linux Kernel Module) sont présents.
Installation :

# emerge chkrootkit
Lancer chkrootkit sans argument pour vérifier l'ensemble du système. Si vous avez un démon cron décommenter le fichier /etc/cron.weekly/chkrootkit pour lancer une analyse toute les semaines.

Sécurisé ssh
OpenSSH est une version libre de la suite d'outils du protocole SSH de connexion réseau utilisée par un nombre croissant de personnes sur l'Internet. De nombreux utilisateurs de telnet, rlogin, ftp et autres programmes identiques ne réalisent pas que leur mot de passe est transmis non chiffré à travers l'Internet. OpenSSH chiffre tout le trafic (mots de passe inclus) de façon à déjouer les écoutes réseau, les prises de contrôle de connexion, et autres attaques. De plus, OpenSSH fournit toute une palette de possibilités de création de tunnels TCP et de méthodes d'authentification.

Configurer SSH
Editer /etc/ssh/sshd_config
Pour faire écouter ssh que sur une interface donnée.

ListenAddress 192.168.0.1

Ne pas autoriser de connexion en tant que root. Si quelqu'un veut devenir root via ssh, deux logins sont maintenant nécessaires et le mot de passe root ne peut être attaqué par la force brute via SSH.

PermitRootLogin no

Changer le port d'écoute, ainsi l'intrus ne peut être complètement sûr de l'exécution d'un démon sshd.

Port 666 ou ListenAddress 192.168.0.1:666

Interdire les mots de passe vides.

PermitEmptyPasswords no

Autorise seulement certains utilisateurs à avoir accès via ssh à cette machine. user@host peut également être utilisé pour n'autoriser l'accès qu'à un utilisateur donné depuis un hôte donné.
AllowUsers harry

Autorise seulement certains membres de groupes à avoir accès via ssh à cette machine.

AllowGroups wheel admin

Pour refuser des groupes ou des utilisateurs : « DenyUsers » et « DenyGroups ».
Il vous appartient complètement de décider ce que vous voulez faire. Il est plus sûr
d'autoriser l'accès à la machine uniquement aux utilisateurs avec des clés ssh placées dans le fichier ~/.ssh/authorized_keys.

PasswordAuthentication no

Désactiver toute forme d'autorisation dont vous n'avez pas réellement besoin si vous n'utilisez pas, par exemple, RhostsRSAAuthentication, HostbasedAuthentication, KerberosAuthentication ou RhostsAuthentication, vous devriez les désactiver. Désactiver le protocole version 1.

iptables
Voici quelques règles :

#!/bin/sh
# mettez ici l'emplacement d'iptables :
IPTABLES=/sbin/iptables
# mettez ici le nom de l'interface réseau vers internet :
EXTERNAL_IF="ppp0"
# mettez ici le nom de l'interface réseau vers votre lan :
INTERNAL_IF="eth0"
#charge les modules
modprobe ip_nat_ftp
modprobe ip_nat_irc
modprobe iptable_filter
modprobe iptable_mangle
modprobe iptable_nat
modprobe ip_masq_ftp
modprobe ip_masq_user
echo "Module Chargé"
#partage de connexion
echo 1 > /proc/sys/net/ipv4/ip_forward
#autorise le reseau a envoye des donnees sur internet
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
echo "Partage de connexion actif"
#masque les machines local
$IPTABLES -A POSTROUTING -t nat -o $EXTERNAL_IF -j MASQUERADE

#liste des modules possible
#ls /lib/modules/`uname -r`/kernel/net/ipv4/netfilter/

#refus de tout
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP
echo "Refus de toutes les connexions"

# DROP des paquets NETBIOS
iptables -A INPUT -i $EXTERNAL_IF -p udp --dport 137:139 -j DROP
iptables -A INPUT -i $EXTERNAL_IF -p tcp --dport 137:139 -j DROP
echo "Netbios actif"$IPTABLES -A tcp_inbound -p TCP -s 0/0 --destination-port 6891:6900 -j ACCEPT

#regles reseau local on accepte tous
# "On accepte le traffic sur 'lo'"
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A OUTPUT -o lo -j ACCEPT
$IPTABLES -A FORWARD -i lo -j ACCEPT
$IPTABLES -A FORWARD -o lo -j ACCEPT
echo "Toutes les connexions internes sont actives"

# "On accepte le traffic sur le réseau local"
# Vous pouvez personaliser cette règle en s'appuyant sur les regles du traffic vers internet
$IPTABLES -A INPUT -i $INTERNAL_IF -j ACCEPT
$IPTABLES -A OUTPUT -o $INTERNAL_IF -j ACCEPT
$IPTABLES -A FORWARD -i $INTERNAL_IF -j ACCEPT
$IPTABLES -A FORWARD -o $INTERNAL_IF -j ACCEPT
echo "Réseau local actif"

#Logguer les packets DROPés
#Logguer les packets au début afin de vérifier que tous fonctionne
#Apres commentez ces lignes car cela prend beaucoup de place
$IPTABLES -N LOG_DROP
$IPTABLES -A LOG_DROP -j LOG --log-prefix "[FIREWALL refus] "
$IPTABLES -A LOG_DROP -j DROP
echo "Prépare les log"

#pour la resolution des dns
$IPTABLES -A INPUT -i $EXTERNAL_IF --protocol udp --source-port 53 -j ACCEPT
$IPTABLES -A OUTPUT -o $EXTERNAL_IF --protocol udp --destination-port 53 -j ACCEPT
$IPTABLES -A INPUT -i $EXTERNAL_IF --protocol tcp --source-port 53 -j ACCEPT
$IPTABLES -A OUTPUT -o $EXTERNAL_IF --protocol tcp --destination-port 53 -j ACCEPT
echo "DNS accordé"

#pour accepter de sufer sur le web
$IPTABLES -A INPUT -i $EXTERNAL_IF -p tcp --sport www -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A OUTPUT -o $EXTERNAL_IF -p tcp --dport www -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
echo "Surf possible"

#pour le serveur web sur le routeur
$IPTABLES -A OUTPUT -o $EXTERNAL_IF -p tcp --sport www -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -i $EXTERNAL_IF -p tcp --dport www -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
echo "Serveur WEB accordé"

#Pour serveur pop3
$IPTABLES -A OUTPUT -o $EXTERNAL_IF -p tcp --dport pop-3 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
echo "Réception de mail"
#pour seveur smtp
#$IPTABLES -A INPUT -i $EXTERNAL_IF -p tcp --sport smtp -m state --state ESTABLISHED,RELATED -j ACCEPT
#pour l'envoi de mail

$IPTABLES -A OUTPUT -o $EXTERNAL_IF -p tcp --dport smtp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
echo "Envoi de mail"

#on accepte les requete ftp entrantes
$IPTABLES -t filter -A INPUT -p tcp --source-port ftp -j ACCEPT
$IPTABLES -t filter -A INPUT -p tcp --destination-port ftp -j ACCEPT
echo "Ftp entrant ok"

#msn transfert de fichier
$IPTABLES -A INPUT -p TCP --sport 6891:6900 -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 6891:6900 -j ACCEPT
#msn communication
#$IPTABLES -A INPUT -p tcp --sport 1863 -j ACCEPT
$IPTABLES -A INPUT -i $EXTERNAL_IF --protocol tcp --sport 1863 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A OUTPUT -o $EXTERNAL_IF --protocol tcp --dport 1863 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
echo "Msn accorde"

#limite du ping
$IPTABLES -A INPUT -p icmp -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -A INPUT -p icmp -m state --state NEW -m limit --limit 10/min -j ACCEPT
echo "ping ok"

#reseau donkey udp:4672 tcp:4662
#on accept sur les port entrants par défault d'eMULE
$IPTABLES -A INPUT -p tcp --dport 4662 -j ACCEPT
$IPTABLES -A INPUT -p tcp --dport 34037 -j ACCEPT
$IPTABLES -A INPUT -p tcp --dport 34038 -j ACCEPT
echo "Emule ouverture du port entrant 4662 "
$IPTABLES -A INPUT -p udp --dport 4672 -j ACCEPT
echo "Emule ouverture du port entrant 4672 "
# on accepte les sorties pour emule
$IPTABLES -A INPUT -p tcp --sport 4662 -j ACCEPT
echo "Emule ouverture du port sortant 4662 "
$IPTABLES -A INPUT -p udp --sport 4672 -j ACCEPT
echo "Emule ouverture du port sortant 4672 "

# On accepte de le laisser sortir du firewall et on accpete les connexions entrantes que l'on a initiées
$IPTABLES -A OUTPUT -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A INPUT -m state --state ESTABLISHED -j ACCEPT
echo "connexion ouverte ok"

#accord ssh
$IPTABLES -t filter -A INPUT -i $INTERNAL_IF -s 0.0.0.0/0 -d 192.168.0.2 -p tcp --dport 22 -j ACCEPT
echo "ssh accorde"

#pour rediriger vers un serveur web si besoin sur le reseau local
#iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.0.3:80

# Décommentez la ligne suivante pour que le serveur CUPS éventuel
# soit joignable de l'extérieur
#$IPTABLES -A INPUT -p tcp --sport 631 -j ACCEPT

# Décommentez les deux lignes suivantes pour que le serveur Samba éventuel
# soit joignable de l'extérieur
#$IPTABLES -A INPUT -p tcp --dport 139 -j ACCEPT
#$IPTABLES -A INPUT -p udp --dport 139 -j ACCEPT

# Décommentez la ligne suivante pour que des clients puissent se connecter
# à l'ordinateur par XDMCP)
#$IPTABLES -A INPUT -p ucp --dport 177 -j ACCEPT

# Décommentez la ligne suivante pour que l'odinateur puisse se connecter
# par XDMCP à une machine distante)
#$IPTABLES -A INPUT -p tcp --dport 6001 -j ACCEPT
# Décommentez la ligne suivante pour que le serveur CVS éventuel
# soit joignable de l'extérieur via le mécanisme de "pserver"
# (si les utilisateurs accèdent au serveur CVS exclusivement via SSH,
# seule la ligne concernant le serveur SSH doit être décommentée)
#$IPTABLES -A INPUT -p tcp --dport 2401 -j ACCEPT

# Décommentez la ligne suivante pour pouvoir reçevoir des flux VideoLAN
# (ce sont des flux UDP entrants sur le port 1234)
#$IPTABLES -A INPUT -p udp --dport 1234 -j ACCEPT

# Décommentez la ligne suivante pour pouvoir reçevoir des annonces SAP
# (ce sont des annonces de session multicast)
#$IPTABLES -A INPUT -p udp -d 224.2.127.254 --dport 9875 -j ACCEPT

# Décommentez les 3 lignes suivantes pour pouvoir utiliser GnomeMeeting
#$IPTABLES -A INPUT -p tcp --dport 30000:33000 -j ACCEPT
#$IPTABLES -A INPUT -p tcp --dport 1720 -j ACCEPT
#$IPTABLES -A INPUT -p udp --dport 5000:5006 -j ACCEPT

#on log tout
$IPTABLES -A FORWARD -j LOG_DROP
$IPTABLES -A INPUT -j LOG_DROP
$IPTABLES -A OUTPUT -j LOG_DROP

echo "firewall actif"
echo "log dans /var/log/messages"


Détection d'intrusion provenant du réseau
Les outils de détection d'intrusions provenant du réseau scrutent le trafic sur un segment de réseau et utilisent cette information comme source de données. Spécifiquement, les paquets du réseau sont examinés et ils sont vérifiés pour voir s'ils correspondent à une certaine signature.
Snort est un renifleur flexible de paquets ou un logueur qui détecte les attaques selon un dictionnaire de signature d'attaques. Il détecte une variété d'attaques et de sondes, tels que des débordements de capacité, les scans dissimulés de ports, les attaques CGI, les sondes SMB, et bien d'autres. Snort dispose également d'une capacité d'alerte en temps réel. Vous pouvez utiliser snort pour un certain nombre d'hôtes de votre réseau ainsi que pour votre propre hôte. C'est un outil qui peut être installé sur n'importe quel routeur pour garder un ½il sur le réseau.
Installation :
# emerge snort

Pour la configuration voir ce thread : http://forums.gentoo.org/viewtopic-t-399801.html

Sécurisations des accès réseau
Beaucoup de fonctionnalités du noyau peuvent être modifiées en cours de fonctionnement en envoyant quelque chose (via la commande echo) dans le système de fichiers /proc ou en utilisant sysctl. En entrant sysctl -A, vous pouvez voir ce que vous pouvez configurer et quelles sont les options, elles peuvent être modifiées en exécutant /sbin/sysctl -w variable=valeur
Par exemple :

net/ipv4/icmp_echo_ignore_broadcasts = 1

C'est un « émulateur Windows » parce que ça agit comme Windows sur les ping de broadcast si celui-ci est positionné à 1. C'est-à-dire que les requêtes ICMP_ECHO envoyées à l'adresse broadcast seront ignorées. Sinon, cela ne fait rien.
Si vous voulez empêcher votre système de répondre aux requêtes d'echo ICMP, activez cette Option de configuration :

net/ipv4/icmp_echo_ignore_all = 1

Pour enregistrer les paquets avec des adresses impossibles (à cause de routes erronées) sur votre réseau, utilisez :

/proc/sys/net/ipv4/conf/all/log_martians = 1

Configurer syncookies
Elle protège votre système contre le syn packet flooding mais viole les standards définis (RFCs).

net/ipv4/tcp_syncookies = 1

Outils antivirus
Clamav est un antivirus libre, pur installer le fronted voir ici :
http://bugs.gentoo.org/show_bug.cgi?id=98976

Donc après cela le système est déjà un peu plus sécurisé.

Voir les commentairesAjouter un commentaire

Imprimer cette page Imprimer cette page

Liste de diffusion

Valider 


Espace téléchargement

Téléchargement
Livres (pdf)
Howto



Promouvoir et soutenir le logiciel libre
Go Frugalware, Go

Get Firefox

Gentoo

Logo Apache

Logo Mysql

Logo PHP



nobrevet

Read and comment at the BadVista.org blog

L'Association Francophone des Utilisateurs de Linux et des logiciels libres (AFUL)

Logo greenpeace


grenouille

Me contacter / Mes expériences GNU/Linux

- [ Basé sur Itseasy | Thème : Frogdev ] -
Les informations ne sont données qu'à titre indicatif.
© frogdev site francophone sur Gentoo, Licence FDL 2008

[ Page générée en 0.01563 secondes | Compression gZip active ]
Poids XHTML : 29.7 ko (33.72 ko non compressé) - CSS : 5.92 ko
Eléments chargés : 14.89 ko