Voici les hooks que j’utilise:
- Changer l’heure du diagnostique automatique (le diagnostique échoue(échouait?) parfois avec l’heure par défaut sans doute dû à une surcharge côté infra yunohost) et désactiver la mise à jour DNS avec une Ip fixe (évite les mails intempestifs quand il y a un souci sur l’infra de Yunohost)
Ces 2 modifications peuvent être dissociées, les 2 commandes sed étant séparées.
/etc/yunohost/hooks.d/conf_regen/02-yunohost_diag
#!/bin/bash
action=$1
pending_dir=$4
diag_conf=$pending_dir/../yunohost/etc/cron.d/yunohost-diagnosis
dns_conf=$pending_dir/../yunohost/etc/cron.d/yunohost-dyndns
[[ "$action" == "pre" ]] || exit 0
[[ -e $diag_conf ]] || exit 0
[[ -e $dns_conf ]] || exit 0
sed -e "s/7/9/" \
-e "s/19/21/" \
-i $diag_conf
sed -e "/#/! s/^/#/g" \
-i $dns_conf
- Permettre le relevé de mails avec les versions antérieures à Android 4.1 en autorisant les protocoles à partir de TLSv1 et lutter de ce fait contre l’obsolescence programmée. Attention, ce hook entraîne un affaiblissement de la sécurité par défaut de Yunohost. Voici une discussion qui en parle:
/etc/yunohost/hooks.d/conf_regen/26-dovecot_ssl
#!/bin/bash
action=$1
pending_dir=$4
ssl_conf_dir=$pending_dir/../dovecot/etc/dovecot/yunohost.d
mkdir -p $ssl_conf_dir/post-ext.d
ssl_conf=$ssl_conf_dir/post-ext.d/10-ssl.conf
[[ "$action" == "pre" ]] || exit 0
echo 'ssl_min_protocol = TLSv1
ssl_cipher_list = ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA
ssl_prefer_server_ciphers = yes' > $ssl_conf
- Pour ceux qui se connectent avec une clef ssh, il faut passer les valeurs de PasswordAuthentication et UsePAM à no:
Edit 21 january 2022: There’s a new setting to manage PasswordAuthentication, then you can now delete this line from the hook.
-e "s/#PasswordAuthentication.*/PasswordAuthentication no/" \
More informations on this post:
/etc/yunohost/hooks.d/conf_regen/04-ssh_pwd
#!/bin/bash
action=$1
pending_dir=$4
ssh_conf=$pending_dir/../ssh/etc/ssh/sshd_config
[[ "$action" == "pre" ]] || exit 0
[[ -e "$ssh_conf" ]] || exit 0
sed -e "s/UsePAM.*/UsePAM no/" \
-e "s/#PasswordAuthentication.*/PasswordAuthentication no/" \
-i $ssh_conf
- Résoudre les erreurs et warning visibles dans les logs concernant dovecot. Plus d’infos dans ce lien et dans la discussion crée par @zulf.
/etc/yunohost/hooks.d/conf_regen/27-dovecot_error
#!/bin/bash
action=$1
pending_dir=$4
dovecot_conf=$pending_dir/../dovecot/etc/dovecot/dovecot.conf
[[ "$action" == "pre" ]] || exit 0
[[ -e $dovecot_conf ]] || exit 0
echo '
service stats {
unix_listener stats-reader {
user = vmail
group = mail
mode = 0660
}
unix_listener stats-writer {
user = vmail
group = mail
mode = 0660
}
}' >> $dovecot_conf
- Restreindre la Web admin de yunohost au réseau local:
Edit 03 march 2023: There’s 2 new settings now (security.webadmin.webadmin_allowlist and security.webadmin.webadmin_allowlist_enabled), this hook is obsolete. Now we can do it from the webadmin in tools/setting/security.
/etc/yunohost/hooks.d/conf_regen/16-nginx_local
#!/bin/bash
##############################################
#Beware, i'm not sure this command is universal. You must test it before. If not, you can find the result with the command ip route, this one must be like 192.168.0.0/24 or similar. Then replace the variable $network_address with it.
#Attention, je ne suis pas certain que cette commande est universelle. Vous devez la tester au préalable. Si ce n'est pas le cas, vous pouvez trouver la réponse avec la commande ip route, celle-ci doit être de la forme 192.168.0.0/24 ou similaire. Remplacez alors la variable $network_address par celle-ci.
network_address=$(awk '{print $1}' <(grep src <(ip route)))
#############################################
action=$1
pending_dir=$4
nginx_dir=$pending_dir/../nginx/etc/nginx
nginx_ynh_admin=$nginx_dir/conf.d/yunohost_admin.conf.inc
nginx_ynh_api=$nginx_dir/conf.d/yunohost_api.conf.inc
[[ $action == "pre" ]] || exit 0
[[ -d $nginx_dir ]] || exit 0
[[ -e $nginx_ynh_admin ]] || exit 0
[[ -e $nginx_ynh_api ]] || exit 0
sed -i "/location/a\ allow $network_address;\n deny all;" $nginx_ynh_admin
sed -i "0,/location/a\ allow $network_address;\n deny all;" $nginx_ynh_api
- Restreindre l’accès Web du serveur par pays, voire cette discussion.
/etc/yunohost/hooks.d/conf_regen/18-nginx_geoip
#!/bin/bash
# if not present, add package geoip-database with apt install geoip-database
##############################################
#Beware, i'm not sure this command is universal. You must test it before. If not, you can find the result with the command ip route, this one must be like 192.168.0.0/24 or similar. Then replace the variable $network_address with it.
#Attention, je ne suis pas certain que cette commande est universelle. Vous devez la tester au préalable. Si ce n'est pas le cas, vous pouvez trouver la réponse avec la commande ip route, celle-ci doit être de la forme 192.168.0.0/24 ou similaire. Remplacez alors la variable $network_address par celle-ci.
network_address=$(awk '{print $1}' <(grep src <(ip route)))
################################################
action=$1
pending_dir=$4
nginx_dir=$pending_dir/../nginx/etc/nginx
nginx_security_conf=$nginx_dir/conf.d/security.conf.inc
nginx_country_conf=$nginx_dir/conf.d/country.conf
[[ $action == "pre" ]] || exit 0
[[ -d $nginx_dir ]] || exit 0
[[ -e $nginx_security_conf ]] || exit 0
echo "# GeoIP databases
geoip_country /usr/share/GeoIP/GeoIP.dat;
map \$geoip_country_code \$allowed_country {
default no;
# France
FR yes;
# Italie
#IT yes;
}
geo \$lan-ip {
default no;
$network_address yes;
}" > $nginx_country_conf
echo '
# allow local ip
if ($lan-ip = yes) {
set $allowed_country yes;
}
# block the country
if ($allowed_country = no) {
return 444;
}' >> $nginx_security_conf
##############################################################
- Résoudre le warning concernant postfix compatibility mode visible dans les logs:
/etc/yunohost/hooks.d/conf_regen/20-postfix_compatible
#!/bin/bash
action=$1
pending_dir=$4
postfix_conf=$pending_dir/../postfix/etc/postfix/main.cf
[[ "$action" == "pre" ]] || exit 0
[[ -e $postfix_conf ]] || exit 0
echo '
compatibility_level = 2' >> $postfix_conf