Compare commits

...

15 Commits

16 changed files with 89 additions and 144 deletions

View File

@ -7,7 +7,7 @@ Ce document décrit les divers élements du projet GSB du BTS SIO utilisé pour
Le projet GSB décrit les diférents playbooks permttant d'installer les Le projet GSB décrit les diférents playbooks permttant d'installer les
machines du projet GSB machines du projet GSB
Les répertoires : Les répertoires :
- roles : les roles - roles : les roles
- goss : les outils de test - goss : les outils de test

View File

@ -28,7 +28,7 @@
192.168.99.103 s-lb-web3.gsb.adm 192.168.99.103 s-lb-web3.gsb.adm
192.168.99.112 r-vp1.gsb.adm 192.168.99.112 r-vp1.gsb.adm
192.168.99.102 r-vp2.gsb.adm 192.168.99.102 r-vp2.gsb.adm
192.168.99.120 s-peertube.gsb.adm
192.168.99.8 syslog.gsb.adm 192.168.99.8 syslog.gsb.adm

View File

@ -27,6 +27,6 @@
192.168.99.103 s-lb-web3.gsb.adm 192.168.99.103 s-lb-web3.gsb.adm
192.168.99.112 r-vp1.gsb.adm 192.168.99.112 r-vp1.gsb.adm
192.168.99.102 r-vp2.gsb.adm 192.168.99.102 r-vp2.gsb.adm
192.168.99.120 s-peertube.gsb.adm
192.168.99.8 syslog.gsb.adm 192.168.99.8 syslog.gsb.adm

View File

@ -5,7 +5,7 @@
; ;
$TTL 604800 $TTL 604800
@ IN SOA s-infra.gsb.lan. root.s-infra.gsb.lan. ( @ IN SOA s-infra.gsb.lan. root.s-infra.gsb.lan. (
2023012500 ; Serial 2023040501 ; Serial
7200 ; Refresh 7200 ; Refresh
86400 ; Retry 86400 ; Retry
8419200 ; Expire 8419200 ; Expire
@ -35,4 +35,5 @@ s-web1 IN A 192.168.101.1
s-web2 IN A 192.168.101.2 s-web2 IN A 192.168.101.2
s-lb.gsb.lan IN A 192.168.100.10 s-lb.gsb.lan IN A 192.168.100.10
ns IN CNAME s-infra.gsb.lan. ns IN CNAME s-infra.gsb.lan.
wpad IN CNAME s-infra.gsb.lan. wpad IN CNAME s-infra.gsb.lan.
peertube IN A 192.168.100.20

View File

@ -5,7 +5,7 @@
; ;
$TTL 604800 $TTL 604800
@ IN SOA s-infra.gsb.lan. root.s-infra.gsb.lan. ( @ IN SOA s-infra.gsb.lan. root.s-infra.gsb.lan. (
2023012500 ; Serial 2023040501 ; Serial
7200 ; Refresh 7200 ; Refresh
86400 ; Retry 86400 ; Retry
8419200 ; Expire 8419200 ; Expire
@ -28,4 +28,4 @@ $TTL 604800
11.0 IN PTR s-elk.gsb.lan. 11.0 IN PTR s-elk.gsb.lan.
17.0 IN PTR s-gestsup.lan 17.0 IN PTR s-gestsup.lan
254.0 IN PTR r-int.gsb.lan. 254.0 IN PTR r-int.gsb.lan.
100.20 IN PTR s-peertube

View File

@ -4,10 +4,12 @@
@def $DEV_PRIVATE = enp0s8; @def $DEV_PRIVATE = enp0s8;
@def $DEV_WORLD = enp0s9; @def $DEV_WORLD = enp0s9;
@def $DEV_WORLD = enp0s9;
@def $DEV_VPN= wg0; @def $DEV_VPN= wg0;
@def $NET_PRIVATE = 172.16.0.0/24; @def $NET_PRIVATE = 172.16.0.0/24;
table filter { table filter {
chain (INPUT OUTPUT){ chain (INPUT OUTPUT){
# allow VPN # allow VPN
proto udp dport 51820 ACCEPT; proto udp dport 51820 ACCEPT;
@ -28,22 +30,22 @@ table filter {
# allow SSH connections from the private network and from some # allow SSH connections from the private network and from some
# well-known internet hosts # well-known internet hosts
saddr ($NET_PRIVATE 81.209.165.42) proto tcp dport ssh ACCEPT; saddr ($NET_PRIVATE) proto tcp dport ssh ACCEPT;
# we provide DNS and SMTP services for the internal net # we provide DNS and SMTP services for the internal net
interface $DEV_PRIVATE saddr $NET_PRIVATE { interface $DEV_PRIVATE saddr $NET_PRIVATE {
proto (udp tcp) dport domain ACCEPT; proto (udp tcp) dport domain ACCEPT;
proto udp dport bootps ACCEPT; proto udp dport bootps ACCEPT;
} }
# interface réseau
# the rest is dropped by the above policy # the rest is dropped by the above policy
}#FIN INPUT }#FIN INPUT
# outgoing connections are not limited # outgoing connections are not limited
chain OUTPUT { chain OUTPUT {
policy ACCEPT; policy ACCEPT;
# interface $DEV_VPN proto ssh dport 22 ACCEPT;
}#FIN OUTPUT }#FIN OUTPUT
@ -59,6 +61,9 @@ table filter {
# internal nets are allowed # internal nets are allowed
interface $DEV_PRIVATE ACCEPT; interface $DEV_PRIVATE ACCEPT;
interface $DEV_VPN daddr $NET_PRIVATE {
proto tcp dport ssh DROP;
}
# the rest is dropped by the above policy # the rest is dropped by the above policy
} }
} }

View File

@ -27,19 +27,15 @@ table filter {
# allow SSH connections from the private network and from some # allow SSH connections from the private network and from some
# well-known internet hosts # well-known internet hosts
saddr ($NET_PRIVATE 81.209.165.42) proto tcp dport ssh ACCEPT; saddr ($NET_PRIVATE) proto tcp dport ssh ACCEPT;
# we provide DNS and SMTP services for the internal net # we provide DNS and SMTP services for the internal net
interface $DEV_PRIVATE saddr $NET_PRIVATE { interface $DEV_PRIVATE saddr $NET_PRIVATE {
proto (udp tcp) dport domain ACCEPT; proto (udp tcp) dport domain ACCEPT;
proto udp dport bootps ACCEPT; proto udp dport bootps ACCEPT;
} }
interface $DEV_VPN{
# respond to ping
proto icmp icmp-type echo-request ACCEPT;
# disallow ssh
saddr proto tcp dport ssh ACCEPT;
}
# interface réseau # interface réseau
interface $DEV_WORLD { interface $DEV_WORLD {
@ -49,17 +45,13 @@ table filter {
}#FIN INPUT }#FIN INPUT
# outgoing connections are not limited # outgoing connections are not limited
chain OUTPUT {policy ACCEPT; chain OUTPUT {
interface $DEV_VPN{ policy ACCEPT;
# allow ssh
daddr proto tcp dport ssh DROP;
# respond to ping
proto icmp icmp-type echo-request ACCEPT;
}
} }
chain FORWARD { chain FORWARD {
policy ACCEPT; policy ACCEPT;
proto icmp icmp-type echo-request ACCEPT;
# connection tracking # connection tracking
mod state state INVALID DROP; mod state state INVALID DROP;
mod state state (ESTABLISHED RELATED) ACCEPT; mod state state (ESTABLISHED RELATED) ACCEPT;
@ -68,6 +60,9 @@ table filter {
# internal nets are allowed # internal nets are allowed
interface $DEV_PRIVATE ACCEPT; interface $DEV_PRIVATE ACCEPT;
interface $DEV_VPN daddr $NET_PRIVATE {
proto tcp dport ssh DROP;
}
# the rest is dropped by the above policy # the rest is dropped by the above policy
} }
} }

View File

@ -1,43 +0,0 @@
# Définir la politique par défaut
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
# Autoriser le trafic pour le VPN
iptables -A INPUT -p udp --dport 51820 -j ACCEPT
# Autoriser les connexions établies et connexes
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Autoriser les connexions sur l'interface loopback
iptables -A INPUT -i lo -j ACCEPT
# Autoriser les requêtes ping
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
# Autoriser les connexions SSH depuis le réseau privé et depuis certains hôtes internet
iptables -A INPUT -p tcp -s 172.16.0.0/24,81.209.165.42 --dport ssh -j ACCEPT
# Autoriser les connexions DNS et SMTP sur l'interface privée
iptables -A INPUT -i enp0s9 -s 172.16.0.0/24 -p udp --dport domain -j ACCEPT
iptables -A INPUT -i enp0s9 -s 172.16.0.0/24 -p tcp --dport domain -j ACCEPT
iptables -A INPUT -i enp0s9 -s 172.16.0.0/24 -p udp --dport bootps -j ACCEPT
# Autoriser les requêtes ping sur l'interface VPN
iptables -A INPUT -i wg0 -p icmp --icmp-type echo-request -j ACCEPT
# Interdire les connexions SSH sur l'interface VPN
iptables -A INPUT -i wg0 -s 0.0.0.0/0 -p tcp --dport ssh -j DROP
# Interdire les connexions SSH sortantes sur l'interface VPN
iptables -A OUTPUT -o wg0 -d 0.0.0.0/0 -p tcp --dport ssh -j DROP
# Autoriser le trafic sur l'interface publique
iptables -A INPUT -i enp0s8 -j ACCEPT
# Autoriser les connexions depuis l'interface privée vers l'interface publique ou une autre interface privée
iptables -A FORWARD -i enp0s9 -o enp0s8 -j ACCEPT
iptables -A FORWARD -i enp0s9 -o enp0s9 -j ACCEPT
# Interdire toutes les autres connexions de forwarding
iptables -A FORWARD -j DROP

View File

@ -1,50 +0,0 @@
# Politique par défaut : DROP
iptables -P INPUT DROP
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
# Autoriser les connexions VPN entrantes
iptables -A INPUT -p udp --dport 51820 -j ACCEPT
# Autoriser les connexions établies et apparentées
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Autoriser les connexions depuis l'interface locale
iptables -A INPUT -i lo -j ACCEPT
# Autoriser les requêtes ping
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
# Autoriser les connexions SSH depuis le réseau privé et depuis certains hôtes Internet
iptables -A INPUT -s 172.16.0.0/24 -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -s 81.209.165.42 -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
# Autoriser les connexions DNS et SMTP depuis le réseau privé
iptables -A INPUT -i enp0s8 -s 172.16.0.0/24 -p udp --dport 53 -j ACCEPT
iptables -A INPUT -i enp0s8 -s 172.16.0.0/24 -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -i enp0s8 -s 172.16.0.0/24 -p udp --dport 67 -j ACCEPT
# Autoriser le trafic sortant
iptables -A OUTPUT -j ACCEPT
# Autoriser les requêtes ping sortantes
iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
# Autoriser les connexions SSH sortantes
iptables -A OUTPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
# Autoriser les connexions VPN sortantes
iptables -A FORWARD -i wg0 -o enp0s9 -j ACCEPT
iptables -A FORWARD -i enp0s9 -o wg0 -j ACCEPT
# Interdire les connexions SSH entrantes depuis l'interface VPN
iptables -A FORWARD -i wg0 -p tcp --dport 22 -j DROP
# Autoriser les connexions SSH sortantes vers l'interface VPN
iptables -A FORWARD -o wg0 -p tcp --dport 22 -j ACCEPT
# Autoriser les connexions établies et apparentées
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
# Autoriser le trafic depuis le réseau privé
iptables -A FORWARD -i enp0s8 -o enp0s9 -j ACCEPT

View File

@ -35,3 +35,24 @@ Nextcloud est alors fonctionnel avec le proxy inverse **traefik** assurant la re
ATTENTION : Après avoir relancé la VM, executez le script "nxc-start.sh" afin d'installer les piles applicatives. ATTENTION : Après avoir relancé la VM, executez le script "nxc-start.sh" afin d'installer les piles applicatives.
Une fois le script terminé, le site est disponible ici : https://s-nxc.gsb.lan Une fois le script terminé, le site est disponible ici : https://s-nxc.gsb.lan
## 5. Ajout authentification LDAP
Pour ajouter l'authentification LDAP au Nextcloud, il faut :
* Une fois l'installation de Nextcloud terminé, cliquez sur le profil et Application
* Dans vos applications, descendre et activer "LDAP user and group backend"
* Puis cliquer sur le profil, puis Paramètres d'administration et dans Administration cliquer sur Intégration LDAP/AD
* Une fois sur la page d'intégration LDAP/AD :
* Dans Hôte mettre :
> ldap://s-win.gsb.lan
* Cliquer sur Détecter le port (normalement le port 389 apparait)
* Dans DN Utilisateur mettre :
> CN=nextcloud,CN=Users,DC=GSB,DC=LAN
* Mot de passe :
> Azerty1+
* Et dans Un DN de base par ligne :
> DC=GSB,DC=LAN
* Après la configuration passe OK
* Une fois la configuration finie, cliquer 3 fois sur continuer
* Une fois arrivé sur Groupes, vous pouvez vous déconnecter du compte Admin et vous connecter avec un compte qui est dans l'AD.

View File

@ -8,7 +8,7 @@
- name: installation de docker... - name: installation de docker...
shell: curl https://releases.rancher.com/install-docker/20.10.sh | sh shell: curl https://releases.rancher.com/install-docker/20.10.sh | sh
- name: attente de l'installation... - name: attente de l'installation de docker...
wait_for: wait_for:
timeout: 30 timeout: 30
host: localhost host: localhost
@ -16,8 +16,7 @@
- name: installation de k3s... - name: installation de k3s...
shell: curl -sfL https://get.k3s.io | sh -s - --docker shell: curl -sfL https://get.k3s.io | sh -s - --docker
- name: mise a jour de resolv.conf... - name: attente de l'installation de k3s...
copy: wait_for:
src: /root/tools/ansible/gsb2023/roles/peertube/files/resolv.conf timeout: 25
dest: /etc/ host: localhost
mode: '0644'

View File

@ -0,0 +1,12 @@
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml;
helm upgrade --install ingress-nginx ingress-nginx \
--repo https://kubernetes.github.io/ingress-nginx \
--namespace ingress-nginx --create-namespace;
sleep 15;
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ${KEY_FILE} -out ${CERT_FILE} -subj "/CN=${HOST}/O=${HOST}" -addext "subjectAltName = DNS:${HOST}";
kubectl create secret tls tls-peertube --key ${KEY_FILE} --cert ${CERT_FILE};
helm repo add postgresql https://charts.bitnami.com/bitnami;
helm repo add redis https://charts.bitnami.com/bitnami;
helm repo add mail https://bokysan.github.io/docker-postfix;
helm install --create-namespace -n peertube peertube-gsb /root/tools/peertube/helm/ ;
kubectl config view --raw > ~/.kube/config

View File

@ -44,16 +44,16 @@ peertube:
dbUser: user # must be consistent with postgresql configuration dbUser: user # must be consistent with postgresql configuration
dbPasswd: user # must be consistent with postgresql configuration dbPasswd: user # must be consistent with postgresql configuration
dbSsl: false # disabled by default WARNING: ssl connection feature not tested, use at your own risk dbSsl: false # disabled by default WARNING: ssl connection feature not tested, use at your own risk
dbHostname: peertube-postgresql # must be consistent with postgresql configuration dbHostname: peertube-gsb-postgresql # must be consistent with postgresql configuration
webHostname: peertube # must be changed to your local setup webHostname: s-peertube.gsb.lan # must be changed to your local setup
secret: b2753b0f37444974de0e81f04815e6a889fcf8960bd203a01b624d8fa8a37683 secret: b2753b0f37444974de0e81f04815e6a889fcf8960bd203a01b624d8fa8a37683
smtpHostname: peertube-mail # must be consistent with mail configuration smtpHostname: peertube-gsb-mail # must be consistent with mail configuration
smtpPort: 587 # must be consistent with mail configuration smtpPort: 587 # must be consistent with mail configuration
smtpFrom: noreply@lan.lan # not configured by default, add something meaningfull if you want smtpFrom: noreply@lan.lan # not configured by default, add something meaningfull if you want
smtpTls: false # disabled by default WARNING: tls connection feature not tested, use at your own risk smtpTls: false # disabled by default WARNING: tls connection feature not tested, use at your own risk
smtpDisableStartTls: false # unless crashes related to tls/ssl, this should be unchanged smtpDisableStartTls: false # unless crashes related to tls/ssl, this should be unchanged
adminEmail: root@localhost.lan # use this if you want peopleto be able to reach you adminEmail: root@localhost.lan # use this if you want peopleto be able to reach you
redisHostname: peertube-redis-master # must be consistent with redis configuration redisHostname: peertube-gsb-redis-master # must be consistent with redis configuration
redisAuth: peertube # must be consistent with redis configuration redisAuth: peertube # must be consistent with redis configuration
app: app:
userCanRegister: true # control if people can register by themselves userCanRegister: true # control if people can register by themselves
@ -98,25 +98,25 @@ redis:
## ingress configuration is very specific this part must be configured or else you'll get 503 or 404 errors ## ingress configuration is very specific this part must be configured or else you'll get 503 or 404 errors
ingress: ingress:
enabled: false enabled: true
className: "" className: ""
annotations: annotations:
kubernetes.io/ingress.class: nginx kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/proxy-body-size: 4G # this caps the size of imported videos, if set low this might prevent you from uploading videos nginx.ingress.kubernetes.io/proxy-body-size: 4G # this caps the size of imported videos, if set low this might prevent you from uploading videos
# kubernetes.io/tls-acme: "true" # kubernetes.io/tls-acme: "true"
hosts: hosts:
- host: # your domain here - host: s-peertube.gsb.lan
paths: paths:
- path: / - path: /
pathType: ImplementationSpecific pathType: ImplementationSpecific
tls: tls:
# - secretName: chart-example-tls - secretName: tls-peertube
- hosts: - hosts:
- # your domain here - s-peertube.gsb.lan
resources: {} resources: {}
autoscaling: autoscaling:
enabled: true enabled: false
minimumReplicas: 3 minimumReplicas: 3
maximumReplicas: 20 maximumReplicas: 20
targetCPUUtilizationPercentage: 90 targetCPUUtilizationPercentage: 90

View File

@ -18,14 +18,11 @@
dest: /root/tools/peertube/helm/ dest: /root/tools/peertube/helm/
mode: '0644' mode: '0644'
- name: copie du script finish...
copy:
src: /root/tools/ansible/gsb2023/roles/peertube/files/finish
dest: /root
mode: '0644'
- name: installation de helm... - name: installation de helm...
shell: curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash shell: curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
- name: installation de peertube...
shell: helm repo add postgresql https://charts.bitnami.com/bitnami && helm repo add redis https://charts.bitnami.com/bitnami && helm repo add mail https://bokysan.github.io/docker-postfix
- name: exposition du cluster...
shell: export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
- name: lancement du helm chart peertube...
shell: helm install --create-namespace -n peertube peertube-gsb /root/tools/peertube/helm

View File

@ -14,4 +14,4 @@ iface enp0s3 inet static
allow-hotplug enp0s8 allow-hotplug enp0s8
iface enp0s8 inet static iface enp0s8 inet static
address 192.168.100.20/24 address 192.168.100.20/24
post-up systemctl start k3s && sleep 20 && export KUBECONFIG=/etc/rancher/k3s/k3s.yaml post-up systemctl start k3s

View File

@ -14,7 +14,15 @@
name: wireguard-tools name: wireguard-tools
state: present state: present
- name: delais 2 secondes isc-dhcp-service
become: yes
lineinfile:
path: /etc/init.d/isc-dhcp-server
insertafter: '^\s+start\)$'
line: " sleep 2"
firstmatch: yes
state: present
backup: yes
#- name: renommage du fichier de configuration #- name: renommage du fichier de configuration
# command: "mv /etc/wireguard/wg0-b.conf /etc/wireguard/wg0.conf" # command: "mv /etc/wireguard/wg0-b.conf /etc/wireguard/wg0.conf"