Modifications mineures des zones

master
Pierre Coimbra 2020-02-28 17:19:26 +01:00
parent 7824c5b8a4
commit 320fdf8b0d
No known key found for this signature in database
GPG Key ID: F9C449C78F6FAEE6
5 changed files with 128 additions and 87 deletions

View File

@ -87,7 +87,7 @@ Les services de la zone CTF devront avoir les interfaces réseau suivantes :
### Zone DIRTY ### Zone DIRTY
Cette zone ne regroupe rien de spécial mis à part d'éventuels containers de test. Elle ne sera d'ailleurs pas documentée ici. Cette zone ne regroupe rien de spécial mis à part d'éventuels conteneurs de test. Elle ne sera d'ailleurs pas documentée ici.
Les services de la zone DIRTY devront avoir les interfaces réseau suivantes : Les services de la zone DIRTY devront avoir les interfaces réseau suivantes :
- Bridge Interne VLAN 50 (DIRTY) - Bridge Interne VLAN 50 (DIRTY)

View File

@ -1,7 +1,7 @@
# Zone INT # Zone INT
Vous trouverez ici toute la documentation relative au fonctionnement et à la configuration applicative des services de la zone INT. Vous trouverez ici toute la documentation relative au fonctionnement et à la configuration applicative des services de la zone INT.
Cela comprend tous les containers des services sensibles permanents (Nextcloud, Gitea...) et les services internes nécessaires au fonctionnement des services sensibles comme l'annuaire LDAP. Cela comprend tous les container des services sensibles permanents (Nextcloud, Gitea...) et les services internes nécessaires au fonctionnement des services sensibles comme l'annuaire LDAP.
## Réseau ## Réseau
Les services de la zone PROXY devront avoir les interfaces réseau suivantes : Les services de la zone PROXY devront avoir les interfaces réseau suivantes :

View File

@ -6,7 +6,7 @@ Pour la sécurisation de LDAP nous allons utiliser LDAP avec STARTTLS.
On commence par installer le serveur ldap. On commence par installer le serveur ldap.
``` ```
apt-get update apt-get update
apt-get install slapd ldap-utils apt-get install -y slapd ldap-utils
``` ```
## Configuration de sladp ## Configuration de sladp
@ -22,13 +22,8 @@ Organization name? Kr[HACK]en
Administrator password: PASSWORD Administrator password: PASSWORD
Confirm password: PASSWORD Confirm password: PASSWORD
Database backend to use: MDB Database backend to use: MDB
Do you want the database to be removed when slapd is purged? YES Do you want the database to be removed when slapd is purged? Yes
Allow LDAPv2 protocol? No Move old database? Yes
```
### /etc/ldap/ldap.conf
```
BASE dc=krhacken,dc=org
URI ldap://IP.LDAP/
``` ```
## Centralisation des fichiers de configuration ## Centralisation des fichiers de configuration
@ -37,9 +32,16 @@ Nous allons créer un répertoire /root/ldap/conf qui va centraliser tous nos fi
mkdir -p /root/ldap/conf/ mkdir -p /root/ldap/conf/
``` ```
## Stockage du mot de passe administrateur
Mettez le mot de passe d'administration de l'annuaire LDAP.
```
echo -n "mdpadmin" > /root/pwdldap
chmod 600 /root/pwdldap
```
## Mise en place SSL ## Mise en place SSL
``` ```
apt-get install gnutls-bin ssl-cert apt-get install -y gnutls-bin ssl-cert
mkdir /etc/ssl/templates mkdir /etc/ssl/templates
``` ```
### /etc/ssl/templates/ca_server.conf ### /etc/ssl/templates/ca_server.conf
@ -79,28 +81,46 @@ chmod 640 /etc/ssl/private/ldap_server.key
``` ```
## Ajout des certificat à OpenLDAP ## Ajout des certificat à OpenLDAP
### /root/ldap/conf/addcerts.ldif ### /root/ldap/conf/addCAcerts.ldif
``` ```
dn: cn=config dn: cn=config
changetype: modify changetype: modify
replace: olcTLSCACertificateFile replace: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ssl/certs/ca_server.pem olcTLSCACertificateFile: /etc/ssl/certs/ca_server.pem
```
Application des modification et redémarrage de slapd
```
ldapmodify -H ldapi:// -Y EXTERNAL -f /root/ldap/conf/addCAcerts.ldif
service slapd force-reload
```
dn: cn=config ### /root/ldap/conf/addcerts.ldif
changetype: modify ```
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ssl/certs/ldap_server.pem
dn: cn=config dn: cn=config
changetype: modify changetype: modify
replace: olcTLSCertificateKeyFile replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ssl/private/ldap_server.key olcTLSCertificateKeyFile: /etc/ssl/private/ldap_server.key
-
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ssl/certs/ldap_server.pem
``` ```
Application des modification et redémarrage de slapd Application des modification et redémarrage de slapd
``` ```
ldapmodify -H ldapi:// -Y EXTERNAL -f addcerts.ldif ldapmodify -H ldapi:// -Y EXTERNAL -f /root/ldap/conf/addcerts.ldif
service slapd force-reload service slapd force-reload
``` ```
Le retour de la commande
```
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config | grep olcTLS
```
doit contenir les informations ci-dessous, cela confirme l'installation des certificats.
```
olcTLSCACertificateFile: /etc/ssl/certs/ca_server.pem
olcTLSCertificateFile: /etc/ssl/certs/ldap_server.pem
olcTLSCertificateKeyFile: /etc/ssl/private/ldap_server.key
```
## Sur le serveur ## Sur le serveur
``` ```
cp /etc/ssl/certs/ca_server.pem /etc/ldap/ca_certs.pem cp /etc/ssl/certs/ca_server.pem /etc/ldap/ca_certs.pem
@ -108,32 +128,19 @@ cp /etc/ssl/certs/ca_server.pem /etc/ldap/ca_certs.pem
Il faut ensuite ajuster la configuration en modifiant la ligne suivante Il faut ensuite ajuster la configuration en modifiant la ligne suivante
### /etc/ldap/ldap.conf ### /etc/ldap/ldap.conf
``` ```
... BASE dc=krhacken,dc=org
URI ldap://alpha.ldap.krhacken.org/
TLS_CACERT /etc/ldap/ca_certs.pem TLS_CACERT /etc/ldap/ca_certs.pem
...
``` ```
On redémarre le serveur slapd.
```
service slapd force-reload
```
### Vérification ### Vérification
La commande La commande `ldapsearch -xLLL -H ldap://alpha.ldap.krhacken.org -ZZ` doit retourner des informations sur l'arbre.
```
ldapsearch -xLLL -H ldap://localhost -D cn=viewer,ou=system,dc=krhacken,dc=org -w passview -b "dc=krhacken,dc=org"
```
doit retourner une erreur, si on ajout -ZZ à la fin ça doit fonctionner
## Configuration des futurs client LDAP
Sur tout les futurs client LDAP il faudra activer la connexion SSL.
Il faut commencer par copier le certificat de la CA (ca_server.pem)
```
cat ca_server.pem | tee -a /etc/ldap/ca_certs.pem
```
Il faut ensuite modifier la configuration en modifiant la ligne suivante
### /etc/ldap/ldap.conf
```
...
TLS_CACERT /etc/ldap/ca_certs.pem
...
```
## Droits d'accès pour la configuration ## Droits d'accès pour la configuration
### /root/ldap/conf/acces-conf-admin.ldif ### /root/ldap/conf/acces-conf-admin.ldif
``` ```
@ -326,6 +333,7 @@ olcPPolicyUseLockout: FALSE
Explication, Explication,
- olcPPolicyDefault : Indique le DN de configuration utilisé - olcPPolicyDefault : Indique le DN de configuration utilisé
- olcPPolicyHashCleartext : Indique si les mots de passe doivent être cryptés. - olcPPolicyHashCleartext : Indique si les mots de passe doivent être cryptés.
On applique les modifications, On applique les modifications,
``` ```
ldapadd -Q -Y EXTERNAL -H ldapi:/// -f ppolicy_act.ldif ldapadd -Q -Y EXTERNAL -H ldapi:/// -f ppolicy_act.ldif
@ -427,29 +435,30 @@ Explication rapide
## Utilisateurs ## Utilisateurs
### /root/ldap/conf/User_PSEUDO.ldif Cas de la création d'un utilisateur adminsys.
### /root/ldap/conf/adminsys.ldif
``` ```
dn: uid=PSEUDO,ou=krhacken,ou=people,dc=krhacken,dc=org dn: uid=adminsys,ou=krhacken,ou=people,dc=krhacken,dc=org
objectclass: person objectclass: person
objectclass: organizationalPerson objectclass: organizationalPerson
objectclass: inetOrgPerson objectclass: inetOrgPerson
uid: niko uid: adminsys
sn: niko sn: adminsys
givenName: Nicolas givenName: AdminSys
cn: Nicolas cn: AdminSys
displayName: Nicolas displayName: AdminSys
userPassword: password userPassword: password
mail: mail@spam.com mail: adminsys@krhacken.org
title: Admin title: Admin
initials: N initials: AS
``` ```
On ajoute l'utilisateur On ajoute l'utilisateur
``` ```
ldapadd -cxWD cn=admin,dc=krhacken,dc=org -y /root/pwdldap -f User_PSEUDO.ldif ldapadd -cxWD cn=admin,dc=krhacken,dc=org -y /root/pwdldap -f adminsys.ldif
``` ```
Commande pour la connexion à un utilisateur Commande pour la connexion à un utilisateur (ici adminsys)
``` ```
ldapsearch -xLLLH ldap://localhost -D uid=PSEUDO,ou=krhacken,ou=people,dc=krhacken,dc=org -W -b "dc=krhacken,dc=org" "uid=PSEUDO" ldapsearch -xLLLH ldap://localhost -D uid=adminsys,ou=krhacken,ou=people,dc=krhacken,dc=org -W -b "dc=krhacken,dc=org" "uid=adminsys"
``` ```
## Groupes ## Groupes
@ -461,9 +470,9 @@ Pour faire simple, lavantage des groupofnames est quavec un filtre sur un
### /root/ldap/conf/Group.ldif ### /root/ldap/conf/Group.ldif
``` ```
dn: cn=cloud,ou=sysgroup,ou=group,dc=krhacken,dc=org dn: cn=people,ou=sysgroup,ou=group,dc=krhacken,dc=org
cn: cloud cn: people
description: Cloud description: Not krkn
objectClass: groupOfNames objectClass: groupOfNames
member: cn=admin,dc=krhacken,dc=org member: cn=admin,dc=krhacken,dc=org
@ -473,7 +482,7 @@ description: krhacken
objectClass: groupOfNames objectClass: groupOfNames
member: cn=admin,dc=krhacken,dc=org member: cn=admin,dc=krhacken,dc=org
``` ```
On ajoute les On ajoute les groupes
``` ```
ldapadd -cxWD cn=admin,dc=krhacken,dc=org -y /root/pwdldap -f Group.ldif ldapadd -cxWD cn=admin,dc=krhacken,dc=org -y /root/pwdldap -f Group.ldif
``` ```
@ -482,12 +491,12 @@ On peu tester memberof pour voir si admin est bien dans les bon groupes
ldapsearch -xLLLH ldap://localhost -D cn=admin,dc=krhacken,dc=org -y /root/pwdldap -b "dc=krhacken,dc=org" "cn=admin" memberof ldapsearch -xLLLH ldap://localhost -D cn=admin,dc=krhacken,dc=org -y /root/pwdldap -b "dc=krhacken,dc=org" "cn=admin" memberof
``` ```
Pour rajouter un utilisateur dans un groupe avec un fichier ldif (addusertogroup.ldif) Exemple, pour rajouter un utilisateur dans un groupe avec un fichier ldif (addusertogroup.ldif) ici ajout de new au groupe people
``` ```
dn: cn=cloud,ou=sysgroup,ou=group,dc=krhacken,dc=org dn: cn=people,ou=sysgroup,ou=group,dc=krhacken,dc=org
changetype: modify changetype: modify
add: member add: member
member: uid=niko,ou=krhacken,ou=people,dc=krhacken,dc=org member: uid=user,ou=krhacken,ou=people,dc=krhacken,dc=org
``` ```
On ajoute l'utilisateur avec On ajoute l'utilisateur avec
``` ```
@ -555,16 +564,34 @@ Ajout des modifications et application
ldapmodify -H ldapi:// -Y EXTERNAL -f forcetls.ldif ldapmodify -H ldapi:// -Y EXTERNAL -f forcetls.ldif
systemctl restart slapd systemctl restart slapd
``` ```
Vérifions si TLS est obligatoire,
Cette commande doit retourner une erreur ### Vérification
La commande
``` ```
ldapsearch -H ldap:// -x -b "dc=krhacken,dc=org" -LLL dn ldapsearch -xLLL -H ldap://localhost -D cn=viewer,ou=system,dc=krhacken,dc=org -w passview -b "dc=krhacken,dc=org"
```
et celle la doit aboutir
```
ldapsearch -H ldap:// -x -b "dc=example,dc=com" -LLL -Z dn
``` ```
doit retourner une erreur, si on ajout -ZZ à la fin ça doit fonctionner
Voilà pour la mise en place de base du LDAP cependant il faut configuré chaque client pour se connecter au serveur avec STARTTLS. Voilà pour la mise en place de base du LDAP cependant il faut configuré chaque client pour se connecter au serveur avec STARTTLS.
NB : Il manque la réplication que nous mettrons en place plus tard. NB : Il manque la réplication que nous mettrons en place plus tard.
## Configuration des futurs client LDAP
Sur tout les futurs client LDAP il faudra activer la connexion SSL.
Il faut commencer par copier le certificat de la CA (ca_server.pem qu'il faudra copier via scp)
```
cat ca_server.pem | tee -a /etc/ldap/ca_certs.pem
```
Il faut ensuite modifier la configuration en modifiant la ligne suivante
### /etc/ldap/ldap.conf
```
...
TLS_CACERT /etc/ldap/ca_certs.pem
...
```
La commande,
```
ldapsearch -xLLL -H ldap://localhost -D cn=viewer,ou=system,dc=krhacken,dc=org -w passview -b "dc=krhacken,dc=org" -ZZ
```
doit retourner des informations sur l'arbre.

View File

@ -1,8 +1,10 @@
# Service de Mail # Service de Mail
Nous allons ici mettre en place tout un service de mail qui va utiliser LDAP, Postfix, Dovecot et Rspamd. Avant de mettre en place le serveur Mail il faut déjà avoir mis en place le serveur LDAP. Nous allons ici mettre en place tout un service de mail qui va utiliser LDAP, Postfix, Dovecot et Rspamd. Avant de mettre en place le serveur Mail il faut déjà avoir mis en place le serveur LDAP.
Il faut avoir établie une connexion TLS avec le serveur LDAP, la marche à suivre est disponible dans la partie LDAP (à la toute fin).
# Configuration du serveur LDAP # Configuration du serveur LDAP
Le serveur LDAP est déjà en place sur le container LDAP il faut cependant faire ce qu'il suit pour ajouter le support des mails sur LDAP. Le serveur LDAP est déjà en place sur le conteneur LDAP il faut cependant faire ce qu'il suit pour ajouter le support des mails sur LDAP.
## Ajout d'un schéma ## Ajout d'un schéma
@ -118,7 +120,7 @@ ldapsearch -xLLL -H ldap://localhost -D cn=admin,dc=krhacken,dc=org -y /root/pwd
``` ```
# Postfix # Postfix
Postfix et Dovecot seront dans le même container. Nous allons commencer par Postfix qui utilise le protocole SMTP pour envoyer et recevoir des mails. C'est un service très complet mais nécessaire. Postfix et Dovecot seront dans le même conteneur. Nous allons commencer par Postfix qui utilise le protocole SMTP pour envoyer et recevoir des mails. C'est un service très complet mais nécessaire.
## DNS ## DNS
Voilà les entrées à ajouter, on en rajoutera d'autres à la fin Voilà les entrées à ajouter, on en rajoutera d'autres à la fin
@ -133,14 +135,14 @@ dig krhacken.org MX +short
Doit retourner _10 mail.krhacken.org._ Doit retourner _10 mail.krhacken.org._
## Redirection de ports ## Redirection de ports
Voilà la liste des ports qui vont être utilisé par le container Mail qui contient Postfix et Dovecot. Voilà la liste des ports qui vont être utilisé par le conteneur Mail qui contient Postfix et Dovecot.
- 25 -> SMTP - 25 -> SMTP
- 465 -> SMTPS - 465 -> SMTPS
- 587 -> SUBMISSION - 587 -> SUBMISSION
- 143 -> IMAP - 143 -> IMAP
- 993 -> IMAPS - 993 -> IMAPS
- 4190 -> Managesieve - 4190 -> Managesieve
Tout c'est ports sont déjà DNAT sur le container Mail grâce à OPNSense Tout c'est ports sont déjà DNAT sur le conteneur Mail grâce à OPNSense
## Installation ## Installation
### Postfix ### Postfix
@ -166,8 +168,8 @@ git clone https://github.com/Neilpang/acme.sh.git
cd ./acme.sh cd ./acme.sh
./acme.sh --install ./acme.sh --install
``` ```
### Ajout d'un reverse proxy au niveau des containers nginx ### Ajout d'un reverse proxy au niveau des conteneurs nginx
Pour que les requêtes ACME sur le domaine mail.krhacken.org arrive sur le container Postfix il faut rajouter un reverse dans les containers Nginx Public. Pour que les requêtes ACME sur le domaine mail.krhacken.org arrive sur le conteneur Postfix il faut rajouter un reverse dans les conteneurs Nginx Public.
``` ```
server { server {
listen 80; listen 80;
@ -902,7 +904,7 @@ reject = 30;
} }
``` ```
### /etc/rspamd/local.d/milter_headers.conf ### /etc/rspamd/local.d/milter_headers.conf
Il indique dajouter des entêtes dans les mails. Grace à eux, vous pourrez voir directement dans votre logiciel ce qui a provoqué ou non le marquage en spam. Il indique dajouter des entêtes dans les mails. Grace à eux, vous pourrez voir directement dans votre logiciel ce qui a provoqué ou non le marquage en spam.
``` ```
extended_spam_headers = true; extended_spam_headers = true;
@ -1078,4 +1080,4 @@ systemclt restart postfix
systemclt restart dovecot systemclt restart dovecot
systemclt restart rspamd systemclt restart rspamd
``` ```
Nous pouvons maintenant tester que le tout marche sur http://www.appmaildev.com Nous pouvons maintenant tester que le tout marche sur http://www.appmaildev.com

View File

@ -1,30 +1,33 @@
# Reverse proxy NGINX sur le réseau public # Reverse proxy NGINX sur le réseau public
## Spécification des containers ## Spécification des conteneurs
Ce service est redondé car vital, son IP est 10.0.0.6 sur Alpha et 10.0.0.7 sur Beta. Ce service est redondé car vital, son IP est 10.0.1.3 sur Alpha et 10.0.1.4 sur Beta.
## Objectif ## Objectif
Il doit rediriger les requêtes arrivant de HAProxy vers le bon container en fonction de l'hostname. Pour cela nous allons utiliser des serveurs web HTTP avec des proxy sur Nginx sans s'occuper de l'autre serveur web. Il doit rediriger les requêtes arrivant de HAProxy vers le bon conteneur en fonction de l'hostname. Pour cela nous allons utiliser des serveurs web HTTP avec des proxy sur Nginx sans s'occuper de l'autre serveur web.
## Création d'un canal d'échange par clé entre les deux containers ## Création d'un canal d'échange par clé entre les deux conteneurs
Afin de pouvoir faire des scp de manière automatique entre les deux containers, il faut mettre en place une connexion ssh par clé en root entre les deux containers. Afin de pouvoir faire des scp de manière automatique entre les deux conteneurs, il faut mettre en place une connexion ssh par clé en root entre les deux conteneurs.
Le procédé est le même, en voici les variantes, Le procédé est le même, en voici les variantes,
- Sur Alpha le container Nginx aura comme IP 10.0.0.6 - Sur Alpha le conteneur Nginx aura comme IP 10.0.1.3
- Sur Beta le container HAProxy aura comme IP 10.0.0.7 - Sur Beta le conteneur HAProxy aura comme IP 10.0.1.4
### /etc/ssh/sshd_config ### /etc/ssh/sshd_config
Remplacer la ligne concernée par Remplacer la ligne concernée par
``` ```
PermitRootLogin yes PermitRootLogin yes
``` ```
```
systemctl restart sshd
```
### Génération et échange de la clé ### Génération et échange de la clé
``` ```
ssh-keygen -o -a 100 -t ed25519 -f /root/.ssh/id_ed25519 ssh-keygen -o -a 100 -t ed25519 -f /root/.ssh/id_ed25519
Alpha : ssh-copy-id -i /root/.ssh/id_ed25519 root@10.0.0.7 Alpha : ssh-copy-id -i /root/.ssh/id_ed25519 root@10.0.1.4
Beta : ssh-copy-id -i /root/.ssh/id_ed25519 root@10.0.0.6 Beta : ssh-copy-id -i /root/.ssh/id_ed25519 root@10.0.1.3
``` ```
### /etc/ssh/sshd_config ### /etc/ssh/sshd_config
@ -33,13 +36,21 @@ Remplacer les lignes concernées par
PermitRootLogin without-password PermitRootLogin without-password
PubkeyAuthentication yes PubkeyAuthentication yes
``` ```
Il est maintenant possible de se connecter par clé entre les containers ```
systemctl restart sshd
```
Il est maintenant possible de se connecter par clé entre les conteneurs
## Installation de Nginx sur les deux conteneurs
Faite par le playbook Ansible
## Installation de Nginx sur les deux containers
``` ```
apt-get update apt-get update
apt-get install -y nginx apt-get install -y nginx
systemctl enable nginx.service systemctl enable nginx.service
rm /etc/nginx/sites-enabled/default
rm /etc/nginx/sites-available/default
``` ```
## Mise en place d'un serveur faisant office de reverse proxy ## Mise en place d'un serveur faisant office de reverse proxy
@ -52,7 +63,7 @@ server {
listen 80; listen 80;
server_name address.fr; server_name address.fr;
location / { location / {
proxy_pass http://ip_reseau_public/; proxy_pass http://ip_reseau_interne/;
proxy_set_header Host $http_host; proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
@ -61,7 +72,8 @@ server {
} }
``` ```
Voilà un script permetant l'installation d'un serveur web présent dans /etc/nginx/sites-available. Il prend en entrée le nom du fichier du serveur à activer Voilà un script permetant l'installation d'un serveur web présent dans /etc/nginx/sites-available. Il prend en entrée le nom du fichier du serveur à activer. Disponible dans `/root/deploy-webhost.sh` si déployer avec Ansible.
``` ```
if [ "$#" -eq "0" ] if [ "$#" -eq "0" ]
then then
@ -80,4 +92,4 @@ else
fi fi
``` ```
La procédure est tout le temps la méthode générale pour ajouter un serveur à Nginx. Elle est décrite ici. Cependant, dans certains cas, il peut être nécessaire d'enlever un ou plusieurs proxy\_set\_header dans la configuration du serveur Nginx. La procédure est tout le temps la méthode générale pour ajouter un serveur à Nginx. Elle est décrite ici. Cependant, dans certains cas, il peut être nécessaire d'enlever un ou plusieurs proxy\_set\_header dans la configuration du serveur Nginx.