Documents for Baguette infrastructure.

master
Karchnu 2022-04-24 11:44:20 +02:00
commit 6da92a1b46
6 changed files with 805 additions and 0 deletions

144
Makefile Normal file
View File

@ -0,0 +1,144 @@
PACKAGE = 'infra-baguette'
VERSION = '0.1.0'
PREFIX := /usr/local
BINDIR := $(PREFIX)/bin
LIBDIR := $(PREFIX)/lib
SHAREDIR := $(PREFIX)/share
INCLUDEDIR := $(PREFIX)/include
MANDIR := $(SHAREDIR)/man
Q := @
all: man/certificats.7 man/infra.7
@:
man/certificats.7: man/certificats.7.scd man
@echo ' MAN > man/certificats.7'
$(Q)scdoc < 'man/certificats.7.scd' > 'man/certificats.7'
man/certificats.7.install: man/certificats.7
@echo ' IN > $(MANDIR)/man7/certificats.7'
$(Q)mkdir -p '$(DESTDIR)$(MANDIR)/man7'
$(Q)install -m0644 man/certificats.7 $(DESTDIR)$(MANDIR)/man7/certificats.7
man/certificats.7.clean:
@echo ' RM > man/certificats.7'
$(Q)rm -f man/certificats.7
man/certificats.7.uninstall:
@echo ' RM > $(MANDIR)/man7/certificats.7'
$(Q)rm -f '$(DESTDIR)$(MANDIR)/man7/certificats.7'
man/infra.7: man/infra.7.scd man
@echo ' MAN > man/infra.7'
$(Q)scdoc < 'man/infra.7.scd' > 'man/infra.7'
man/infra.7.install: man/infra.7
@echo ' IN > $(MANDIR)/man7/infra.7'
$(Q)mkdir -p '$(DESTDIR)$(MANDIR)/man7'
$(Q)install -m0644 man/infra.7 $(DESTDIR)$(MANDIR)/man7/infra.7
man/infra.7.clean:
@echo ' RM > man/infra.7'
$(Q)rm -f man/infra.7
man/infra.7.uninstall:
@echo ' RM > $(MANDIR)/man7/infra.7'
$(Q)rm -f '$(DESTDIR)$(MANDIR)/man7/infra.7'
man:
$(Q)mkdir -p man
$(DESTDIR)$(PREFIX):
@echo ' DIR > $(PREFIX)'
$(Q)mkdir -p $(DESTDIR)$(PREFIX)
$(DESTDIR)$(BINDIR):
@echo ' DIR > $(BINDIR)'
$(Q)mkdir -p $(DESTDIR)$(BINDIR)
$(DESTDIR)$(LIBDIR):
@echo ' DIR > $(LIBDIR)'
$(Q)mkdir -p $(DESTDIR)$(LIBDIR)
$(DESTDIR)$(SHAREDIR):
@echo ' DIR > $(SHAREDIR)'
$(Q)mkdir -p $(DESTDIR)$(SHAREDIR)
$(DESTDIR)$(INCLUDEDIR):
@echo ' DIR > $(INCLUDEDIR)'
$(Q)mkdir -p $(DESTDIR)$(INCLUDEDIR)
$(DESTDIR)$(MANDIR):
@echo ' DIR > $(MANDIR)'
$(Q)mkdir -p $(DESTDIR)$(MANDIR)
install: man/certificats.7.install man/infra.7.install
@:
uninstall: man/certificats.7.uninstall man/infra.7.uninstall
@:
clean: man/certificats.7.clean man/infra.7.clean
distclean: clean
dist: dist-gz dist-xz dist-bz2
$(Q)rm -- $(PACKAGE)-$(VERSION)
distdir:
$(Q)rm -rf -- $(PACKAGE)-$(VERSION)
$(Q)ln -s -- . $(PACKAGE)-$(VERSION)
dist-gz: $(PACKAGE)-$(VERSION).tar.gz
$(PACKAGE)-$(VERSION).tar.gz: distdir
@echo ' TAR > $(PACKAGE)-$(VERSION).tar.gz'
$(Q)tar czf $(PACKAGE)-$(VERSION).tar.gz \
$(PACKAGE)-$(VERSION)/Makefile \
$(PACKAGE)-$(VERSION)/project.zsh \
$(PACKAGE)-$(VERSION)/man/certificats.7.scd \
$(PACKAGE)-$(VERSION)/man/infra.7.scd
dist-xz: $(PACKAGE)-$(VERSION).tar.xz
$(PACKAGE)-$(VERSION).tar.xz: distdir
@echo ' TAR > $(PACKAGE)-$(VERSION).tar.xz'
$(Q)tar cJf $(PACKAGE)-$(VERSION).tar.xz \
$(PACKAGE)-$(VERSION)/Makefile \
$(PACKAGE)-$(VERSION)/project.zsh \
$(PACKAGE)-$(VERSION)/man/certificats.7.scd \
$(PACKAGE)-$(VERSION)/man/infra.7.scd
dist-bz2: $(PACKAGE)-$(VERSION).tar.bz2
$(PACKAGE)-$(VERSION).tar.bz2: distdir
@echo ' TAR > $(PACKAGE)-$(VERSION).tar.bz2'
$(Q)tar cjf $(PACKAGE)-$(VERSION).tar.bz2 \
$(PACKAGE)-$(VERSION)/Makefile \
$(PACKAGE)-$(VERSION)/project.zsh \
$(PACKAGE)-$(VERSION)/man/certificats.7.scd \
$(PACKAGE)-$(VERSION)/man/infra.7.scd
help:
@echo ' :: infra-baguette-0.1.0'
@echo ''
@echo 'Generic targets:'
@echo ' - help  Prints this help message.'
@echo ' - all  Builds all targets.'
@echo ' - dist  Creates tarballs of the files of the project.'
@echo ' - install  Installs the project.'
@echo ' - clean  Removes compiled files.'
@echo ' - uninstall  Deinstalls the project.'
@echo ''
@echo 'CLI-modifiable variables:'
@echo ' - PREFIX  ${PREFIX}'
@echo ' - BINDIR  ${BINDIR}'
@echo ' - LIBDIR  ${LIBDIR}'
@echo ' - SHAREDIR  ${SHAREDIR}'
@echo ' - INCLUDEDIR  ${INCLUDEDIR}'
@echo ' - MANDIR  ${MANDIR}'
@echo ''
@echo 'Project targets: '
@echo ' - man/certificats.7  scdocman'
@echo ' - man/infra.7  scdocman'
@echo ''
@echo 'Makefile options:'
@echo ' - gnu: false'
@echo ' - colors: true'
@echo ''
@echo 'Rebuild the Makefile with:'
@echo ' zsh ./build.zsh -c'
.PHONY: all clean distclean dist install uninstall help

72
man/certificats.7 Normal file
View File

@ -0,0 +1,72 @@
.\" Generated by scdoc 1.11.1
.\" Complete documentation for this program is not available as a GNU info page
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.nh
.ad l
.\" Begin generated content:
.TH "INFRA" "7" "2022-04-23" "Infrastructure Baguette" "Manuel de l'infra de Baguette"
.P
.SH Liste des machines à toucher lors d'une mise à jour des certificats
.P
.P
.TS
allbox;c c c
c c c
c c c.
T{
\fBMachine\fR
T} T{
\fISystème\fR
T} T{
\fIApplications nécessitant des certificats
T}
T{
team
T} T{
OpenBSD
T} T{
smptd
T}
T{
alpha
T} T{
Alpine
T} T{
nginx
T}
.TE
.sp 1
\fRLa machine \fBteam\fR gère les certificats avec \fIacme-client\fR.\&
.P
.SH Certificats gérés
.P
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.IP \(bu 4
.\}
\fI*.\&baguette.\&netlib.\&re\fR
.RE
.P
.SH Comment mettre à jour
.P
Si les machines \fIteam\fR et \fIalpha\fR sont dans le \fB.\&ssh/config\fR, un copier/coller fonctionne.\&
.P
.nf
.RS 4
ssh team acme-client baguette\&.netlib\&.re
NOW=`date "+%Y-%m-%d_%H-%M-%S"`
ssh team tar czvf crypto-$NOW\&.tar\&.gz /etc/ssl/bag* /etc/ssl/private/b*
scp team:crypto-$NOW\&.tar\&.gz \&.
scp crypto-$NOW\&.tar\&.gz alpha:/
ssh alpha "cd / && tar xf crypto-$NOW\&.tar\&.gz"
ssh alpha "rm /crypto-$NOW\&.tar\&.gz"
ssh alpha "pkill -1 nginx" # TODO: réparer le lancement de nginx
ssh team "rcctl restart smtpd"
ssh team "rcctl restart dovecot"
.fi
.RE

37
man/certificats.7.scd Normal file
View File

@ -0,0 +1,37 @@
INFRA(7) "Infrastructure Baguette" "Manuel de l'infra de Baguette"
# Liste des machines à toucher lors d'une mise à jour des certificats
[- *Machine*
:- _Système_
:- _Applications nécessitant des certificats
|- team
:- OpenBSD
:- smptd
|- alpha
:- Alpine
:- nginx
_La machine *team* gère les certificats avec _acme-client_.
# Certificats gérés
- _\*.baguette.netlib.re_
# Comment mettre à jour
Si les machines _team_ et _alpha_ sont dans le *.ssh/config*, un copier/coller fonctionne.
```
ssh team acme-client baguette.netlib.re
NOW=`date "+%Y-%m-%d_%H-%M-%S"`
ssh team tar czvf crypto-$NOW.tar.gz /etc/ssl/bag* /etc/ssl/private/b*
scp team:crypto-$NOW.tar.gz .
scp crypto-$NOW.tar.gz alpha:/
ssh alpha "cd / && tar xf crypto-$NOW.tar.gz"
ssh alpha "rm /crypto-$NOW.tar.gz"
ssh alpha "pkill -1 nginx" # TODO: réparer le lancement de nginx
ssh team "rcctl restart smtpd"
ssh team "rcctl restart dovecot"
```

398
man/infra.7 Normal file
View File

@ -0,0 +1,398 @@
.\" Generated by scdoc 1.11.1
.\" Complete documentation for this program is not available as a GNU info page
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.nh
.ad l
.\" Begin generated content:
.TH "INFRA" "7" "2022-04-23" "Infrastructure de Baguette" "Manuel de l'infra de Baguette"
.P
.SH Liste des machines
.P
Pour les services : \fBtrès important\fR, \fIplutôt important\fR
.P
.TS
allbox;c c c c c
c c l c l
c c l c l
c c l c l
c c l c l
c c l c l
c c l c l.
T{
\fBARN\fR
T} T{
\fISystème\fR
T} T{
\fIAdresse\fR
T} T{
\fIPort SSH\fR
T} T{
\fIServices\fR
T}
T{
\fBPhysique\fR
T} T{
Alpine 3.\&15
T} T{
89.\&234.\&141.\&125
T} T{
22
T} T{
\fBfirewall\fR
T}
T{
team
T} T{
OpenBSD 6.\&6
T} T{
192.\&168.\&122.\&132
T} T{
2210
T} T{
\fBgitea\fR \fImattermost\fR \fBsmtpd\fR
T}
T{
alpha
T} T{
Alpine 3.\&15
T} T{
192.\&168.\&122.\&84
T} T{
2203
T} T{
\fIalpha\fR \fBwebsocketd\fR \fBnginx\fR todod arpenteurs
T}
T{
bsdbuild
T} T{
OpenBSD 6.\&6
T} T{
192.\&168.\&122.\&165
T} T{
2265
T} T{
builds (weechat)
T}
T{
R&D
T} T{
Alpine 3.\&1X
T} T{
192.\&168.\&122.\&211
T} T{
2205
T} T{
expérimental
T}
T{
CEIUS
T} T{
Alpine 3.\&1X
T} T{
192.\&168.\&122.\&30
T} T{
2230
T} T{
CEIUS (?\&?\&)
T}
.TE
.sp 1
.P
.P
\fINotes\fR :
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.IP \(bu 4
.\}
Les machines pourraient être renommées.\&
.br
Les adresses et les ports sont aléatoires.\&
.RE
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.IP \(bu 4
.\}
Le serveur physique a plusieurs disques, mais un seul est utilisé pour le moment.\&
.br
Un RAID serait envisageable.\&
.RE
.P
.SH phy0
.P
La machine `phy0` redémarre sur son disque `/dev/sdb`.\&
.P
.SS procédure après redémarrage
.P
Il faut supprimer la règle iptables empêchant les connexions extérieures vers les machines virtuelles.\&
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.IP \(bu 4
.\}
iptables -D FORWARD 2
.RE
.P
.SH VM Alpha
.P
.SS NGINX
.P
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.IP \(bu 4
.\}
gère toutes les connexions entrantes sur les ports 80, 443
.RE
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.IP \(bu 4
.\}
configuration dans \fI/srv/root/nginx/\fR, attention au rewrite de service (voir \fBTODO\fR)
.RE
.P
.TS
allbox;c c c
c c c
c c c
c c c
c c c.
T{
\fIDomaine\fR
T} T{
\fIService\fR
T} T{
\fIPort\fR
T}
T{
\fBgit.\&baguette.\&netlib.\&re\fR
T} T{
gitea
T} T{
443 (80 redirigé)
T}
T{
\fBteam.\&baguette.\&netlib.\&re\fR
T} T{
mattermost
T} T{
443 (80 redirigé)
T}
T{
\fItodo.\&baguette.\&netlib.\&re\fR
T} T{
todo
T} T{
443 (80 redirigé), 9999
T}
T{
arpenteurs.\&netlib.\&re
T} T{
kemal
T} T{
80
T}
.TE
.sp 1
.SH VM team
.P
.SS {git,team}.baguette.netlib.re
.P
Les services `gitea` et `mattermost` sont \fIouvert\fR au public, notamment pour le projet `Baguette`.\&
.P
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.IP \(bu 4
.\}
gitea et mattermost utilisent \fIpostgresql\fR
.RE
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.IP \(bu 4
.\}
gitea
.RS 4
.RE
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.IP \(bu 4
.\}
configuration: \fI/etc/gitea/\fR = la base, \fI/var/gitea/\fR = les données + personnalisation
.RE
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.IP \(bu 4
.\}
\fI/etc/gitea/gitea.\&conf\fR = psql, mails, droits
.RE
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.IP \(bu 4
.\}
\fI/var/gitea/\fR = dépôts, avatars, personnalisation de l'apparence
.RE
.RE
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.IP \(bu 4
.\}
mattermost pour le développement
.RE
.P
Les certificats ont été générés par \fIacme.\&sh\fR.\& Voir section \fBTODO\fR.\&
.P
.SS opensmtpd
.P
Le serveur smtpd gère les domaines :
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.IP \(bu 4
.\}
baguette.\&netlib.\&re (requis par gitea et mattermost)
.RE
.P
\fBDebug potentiel\fR
.P
En cas de \fB\fRAUTH LOGIN failed\fB\fR dans les logs, vérifier que \fBrspamd\fR est lancé.\&
.P
.P
.SH VM bsdbuild (toujours active ?)
.P
Actuellement : zone de jeu, on peut tester des outils dessus, lancer des compilations.\&
.P
.P
.SH TODO pour le développement d'outils à déployer sur l'infra
.P
.SS Pare-feu
.P
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.IP \(bu 4
.\}
pourrait imposer un rate limit
.RE
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.IP \(bu 4
.\}
l'accès à un service depuis une autre VM est compromis pour l'instant, il faut des règles DNAT+SNAT
.RE
.P
.SS Déploiement
.P
Le déploiement devrait être effectué de manière automatique depuis les sources.\&
Actuellement un problème réseau nous en empêche : il faut se plonger dans `iptables`.\&
.P
\fBservice\fR
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.IP \(bu 4
.\}
pourrait (devrait ?\&) être utilisé à terme
.RE
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.IP \(bu 4
.\}
manque la gestion correcte des groupes au lancement d'un processus
.RE
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.IP \(bu 4
.\}
lance actuellement nginx \fBmais sa configuration est réécrite avec de mauvaises valeurs\fR, à revoir
.RE
.P
\fBlibipc\fR doit être patché pour les sockets unix qu'il crée :
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.IP \(bu 4
.\}
changer le propriétaire et le groupe
.RE
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.IP \(bu 4
.\}
changer les permissions
.RE
.P
.SS Certificats à maintenir
.P
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.IP \(bu 4
.\}
baguette.\&netlib.\&re (+ git, team et todo sur le même domaine)
.RE
.P
.SS Adresse IPv6
.P
Pour le moment tout est en v4, y compris sur la machine physique.\&

140
man/infra.7.scd Normal file
View File

@ -0,0 +1,140 @@
INFRA(7) "Infrastructure de Baguette" "Manuel de l'infra de Baguette"
# Liste des machines
Pour les services : *très important*, _plutôt important_
[- *ARN*
:- _Système_
:- _Adresse_
:- _Port SSH_
:- _Services_
|- *Physique*
:- Alpine 3.15
:[ 89.234.141.125
:- 22
:[ *firewall*
|- team
:- OpenBSD 6.6
:[ 192.168.122.132
:- 2210
:[ *gitea* _mattermost_ *smtpd*
|- alpha
:- Alpine 3.15
:[ 192.168.122.84
:- 2203
:[ _alpha_ *websocketd* *nginx* todod arpenteurs
|- bsdbuild
:- OpenBSD 6.6
:[ 192.168.122.165
:- 2265
:[ builds (weechat)
|- R&D
:- Alpine 3.1X
:[ 192.168.122.211
:- 2205
:[ expérimental
|- CEIUS
:- Alpine 3.1X
:[ 192.168.122.30
:- 2230
:[ CEIUS (??)
_Notes_ :
- Les machines pourraient être renommées.++
Les adresses et les ports sont aléatoires.
- Le serveur physique a plusieurs disques, mais un seul est utilisé pour le moment.++
Un RAID serait envisageable.
# phy0
La machine `phy0` redémarre sur son disque `/dev/sdb`.
## procédure après redémarrage
Il faut supprimer la règle iptables empêchant les connexions extérieures vers les machines virtuelles.
- iptables -D FORWARD 2
# VM Alpha
## NGINX
- gère toutes les connexions entrantes sur les ports 80, 443
- configuration dans _/srv/root/nginx/_, attention au rewrite de service (voir *TODO*)
[- _Domaine_
:- _Service_
:- _Port_
|- *git.baguette.netlib.re*
:- gitea
:- 443 (80 redirigé)
|- *team.baguette.netlib.re*
:- mattermost
:- 443 (80 redirigé)
|- _todo.baguette.netlib.re_
:- todo
:- 443 (80 redirigé), 9999
|- arpenteurs.netlib.re
:- kemal
:- 80
# VM team
## {git,team}.baguette.netlib.re
Les services `gitea` et `mattermost` sont _ouvert_ au public, notamment pour le projet `Baguette`.
- gitea et mattermost utilisent _postgresql_
- gitea
- configuration: _/etc/gitea/_ = la base, _/var/gitea/_ = les données + personnalisation
- _/etc/gitea/gitea.conf_ = psql, mails, droits
- _/var/gitea/_ = dépôts, avatars, personnalisation de l'apparence
- mattermost pour le développement
Les certificats ont été générés par _acme.sh_. Voir section *TODO*.
## opensmtpd
Le serveur smtpd gère les domaines :
- baguette.netlib.re (requis par gitea et mattermost)
*Debug potentiel*
En cas de **AUTH LOGIN failed** dans les logs, vérifier que *rspamd* est lancé.
# VM bsdbuild (toujours active ?)
Actuellement : zone de jeu, on peut tester des outils dessus, lancer des compilations.
# TODO pour le développement d'outils à déployer sur l'infra
## Pare-feu
- pourrait imposer un rate limit
- l'accès à un service depuis une autre VM est compromis pour l'instant, il faut des règles DNAT+SNAT
## Déploiement
Le déploiement devrait être effectué de manière automatique depuis les sources.
Actuellement un problème réseau nous en empêche : il faut se plonger dans `iptables`.
*service*
- pourrait (devrait ?) être utilisé à terme
- manque la gestion correcte des groupes au lancement d'un processus
- lance actuellement nginx *mais sa configuration est réécrite avec de mauvaises valeurs*, à revoir
*libipc* doit être patché pour les sockets unix qu'il crée :
- changer le propriétaire et le groupe
- changer les permissions
## Certificats à maintenir
- baguette.netlib.re (+ git, team et todo sur le même domaine)
## Adresse IPv6
Pour le moment tout est en v4, y compris sur la machine physique.

14
project.zsh Normal file
View File

@ -0,0 +1,14 @@
package=infra-baguette
version=0.1.0
echo "Manuals:"
for i in man/*.scd; do
v="$(echo $i | sed 's/.scd$//')"
echo "- $v"
targets+=($v)
type[$v]=scdocman
done
dist=(Makefile project.zsh man/*.scd)