Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[howto] sécurité
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index French
View previous topic :: View next topic  
Author Message
bouleetbil
Guru
Guru


Joined: 06 Jul 2004
Posts: 456
Location: Montpellier

PostPosted: Thu Mar 02, 2006 9:48 pm    Post subject: [howto] sécurité Reply with quote

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 :
Code:

# 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 :
Code:

# 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.
Code:

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.
Code:

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.
Code:

Port 666 ou ListenAddress 192.168.0.1:666

Interdire les mots de passe vides.
Code:

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é.
Code:

AllowUsers harry

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

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.
Code:

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 :
Code:

#!/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 :
Code:

# emerge snort

Pour la configuration voir ce thread : https://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 :
Code:

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 :
Code:

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 :
Code:

/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).
Code:

net/ipv4/tcp_syncookies = 1

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


Donc après cela le système est déjà un peu plus sécurisé ;-)
_________________
L'homme n'est pas fait pour travailler ça le fatigue.
LiveCD Gentoo : http://www.frogdev.info
Gentoo/Freebsd : http://www.frogdev.info/gentoo_freebsd.php
Back to top
View user's profile Send private message
sireyessire
Advocate
Advocate


Joined: 20 Mar 2003
Posts: 2991
Location: back in Paris, France

PostPosted: Fri Mar 03, 2006 7:38 am    Post subject: Reply with quote

quelques remarques:

pour les rootkits il y a aussi rkhunter qui est un équivalent de chrootkit.

pour le firewall, moi je conseille l'excellent firehol qui génére à partir de scripts bash les règles iptables en fonction de la configuration demandé dans le fichier de conf, très facile à mettre en oeuvre.

mentionnons aussi l'excellent fail2ban qui banne les hôtes qui font trop de tentatives ssh pendant un laps de temps via iptables.

et j'en oublie surement d'autres encore :wink:
_________________
I never think of the future. It comes soon enough.
Albert Einstein

Try simpler first
Shockley
Back to top
View user's profile Send private message
TGL
Bodhisattva
Bodhisattva


Joined: 02 Jun 2002
Posts: 1978
Location: Rennes, France

PostPosted: Fri Mar 03, 2006 9:44 am    Post subject: Reply with quote

Décidément bouleetbill, c'est la forme ! Merci à toi ;)

Et histoire de faire un commentaire utile, une lecture sur le sujet que je recommande chaudement à ceux qui l'auraient ratée : Manuel de la sécurité pour Gentoo
Back to top
View user's profile Send private message
Mickael
Advocate
Advocate


Joined: 05 Sep 2005
Posts: 2383
Location: ~Belfort! - France - EU

PostPosted: Fri Mar 03, 2006 10:25 am    Post subject: Reply with quote

Merci à toi Bouleetbil,

je poste uniquement pour "compléter" un peu tes explications : en effet, je suis sur que sous Linux, nous ne sommes pas tous issu d'une formation à vocation informatique. Donc, rootkit et compagnie ça parle pas beaucoup, et on se pert très vite sur ces notions de ports, sécurité, et autres..... (Ca arrive) Pour les nuls, comme moi, un lien sur les rootkits sur Wikipedia (on en parlera jamais assez, soit dit en passant) pour comprendre, un peu plus. :wink:

Merci encore, je vais continuer à déchiffrer, et rendre mon portable beaucoup plus sûr, et là y'a du boulot. :roll:
Back to top
View user's profile Send private message
letoff
Apprentice
Apprentice


Joined: 04 Mar 2004
Posts: 163
Location: root in Paris, windsurfer in Brest

PostPosted: Fri Mar 03, 2006 12:59 pm    Post subject: Reply with quote

Très sympa ce post. J'en profite pour donner également quelques petits conseils que je pense utiles.
Comme indiqué plus haut par sireyessire, fail2ban est un script python dont je ne pourrais plus me passer: il scan les tentatives d'accès ssh (mais aussi Apache) et bloque l'IP pendant un temps définit au bout d'un nombre de tentatives paramétrable. En plus il est maintenant dans portage. A mon avis ça évite d'avoir à changer le port de ssh. Il existe également la possibilité fort utile de compiler openssh avec le flag skey qui ouvre les voies de l'opie c'est à dire les mots de passe jetables. Indispensable quand on doit accéder à un serveur depuis des environnements non sécurisés avec d'éventuels keylogger. :evil:

D'autre part, nombre de tentatives d'intrusion via Apache/php tentent de récupérer un soft et de l'exécuter dans /tmp. Il est donc impératif d'avoir cette partition en noexec nodev et nosuid.

Certains rootkits tentent également de se servir de la possibilité de charger un module: il peut donc aussi être utile de désactiver cette possibilité (sur un serveur évidémment) en recompilant son kernel avec tous les modules en dur et CONFIG_MODULES=n

Quand à rkhunter et chkrootkit il est souhaitable de les mettre dans un crontab en exécution journalière avec un rapport pour root (d'office avec rkhunter il me semble).

Enfin il ne faut pas oublier de vérifier régulièrement que son système n'a aucune faille: glsa-check est fait pour ça. Je me suis fait le petit alias suivant:

Code:
alias secure='glsa-check --list|grep '\''\[N'\'''


Voilà, c'était mes 0.02€
_________________
Gentoo won't be suitable for server's use until GLEP 19 is alive.


Last edited by letoff on Sat Mar 04, 2006 11:45 am; edited 1 time in total
Back to top
View user's profile Send private message
bouleetbil
Guru
Guru


Joined: 06 Jul 2004
Posts: 456
Location: Montpellier

PostPosted: Fri Mar 03, 2006 8:42 pm    Post subject: Reply with quote

Je me doutais qu'un post sur la sécurité attirerait du monde :D
Ce qui est sympa c'est de voir les logiciels utilisés par les autres.
Pour le firewall sur mon portable j'utilise firestarter très simple à utiliser et suffit amplement.
_________________
L'homme n'est pas fait pour travailler ça le fatigue.
LiveCD Gentoo : http://www.frogdev.info
Gentoo/Freebsd : http://www.frogdev.info/gentoo_freebsd.php
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index French All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum