commit 6da92a1b46f158f80486aa840326c03c3a808805 Author: Karchnu Date: Sun Apr 24 11:44:20 2022 +0200 Documents for Baguette infrastructure. diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..073f723 --- /dev/null +++ b/Makefile @@ -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 + diff --git a/man/certificats.7 b/man/certificats.7 new file mode 100644 index 0000000..263d0dd --- /dev/null +++ b/man/certificats.7 @@ -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 diff --git a/man/certificats.7.scd b/man/certificats.7.scd new file mode 100644 index 0000000..caa982c --- /dev/null +++ b/man/certificats.7.scd @@ -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" +``` diff --git a/man/infra.7 b/man/infra.7 new file mode 100644 index 0000000..21a6dff --- /dev/null +++ b/man/infra.7 @@ -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.\& diff --git a/man/infra.7.scd b/man/infra.7.scd new file mode 100644 index 0000000..e0fd642 --- /dev/null +++ b/man/infra.7.scd @@ -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. diff --git a/project.zsh b/project.zsh new file mode 100644 index 0000000..58c9218 --- /dev/null +++ b/project.zsh @@ -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) +