* Sun Mar 16 2025 Jean-Philippe Pialasse <jpp@koozali.org> 11.0.0-31.sme
- handle dh params with template [SME: 12826] TODO timer and event - foolproofing dummy.module
This commit is contained in:
parent
ccd94a71e2
commit
8615e569eb
16
createlinks
16
createlinks
@ -303,10 +303,11 @@ my $event = "smeserver-base-update";
|
|||||||
|
|
||||||
|
|
||||||
event_link("remove-templates-custom", $event, "02");
|
event_link("remove-templates-custom", $event, "02");
|
||||||
|
event_link("systemd-journald", $event, "02");
|
||||||
|
event_link("dhgenerator", $event, "03");
|
||||||
templates2events("/etc/smartmontools/smartd.conf", $event);
|
templates2events("/etc/smartmontools/smartd.conf", $event);
|
||||||
templates2events("/home/e-smith/ssl.pem/pem", $event);
|
templates2events("/home/e-smith/ssl.pem/pem", $event);
|
||||||
templates2events("/usr/lib/systemd/system/dhcpd.service.d/50koozali.conf", $event);
|
templates2events("/usr/lib/systemd/system/dhcpd.service.d/50koozali.conf", $event);
|
||||||
event_link("systemd-journald", $event, "02");
|
|
||||||
event_link("fix-startup", $event, "05");
|
event_link("fix-startup", $event, "05");
|
||||||
event_link("init-accounts", $event, "05");
|
event_link("init-accounts", $event, "05");
|
||||||
event_link("mail-spool-fix", $event, "05");
|
event_link("mail-spool-fix", $event, "05");
|
||||||
@ -612,13 +613,24 @@ $event = "ldap-update";
|
|||||||
templates2events("/home/e-smith/ssl.pem/pem", $event);
|
templates2events("/home/e-smith/ssl.pem/pem", $event);
|
||||||
|
|
||||||
#--------------------------------------------------
|
#--------------------------------------------------
|
||||||
# actions for ldap-update event
|
# actions for ssl-update event
|
||||||
#--------------------------------------------------
|
#--------------------------------------------------
|
||||||
|
|
||||||
$event = "ssl-update";
|
$event = "ssl-update";
|
||||||
|
|
||||||
templates2events("/home/e-smith/ssl.pem/pem", $event);
|
templates2events("/home/e-smith/ssl.pem/pem", $event);
|
||||||
|
|
||||||
|
#--------------------------------------------------
|
||||||
|
# actions for dhparam-update event
|
||||||
|
#--------------------------------------------------
|
||||||
|
|
||||||
|
$event = "dhparam-update";
|
||||||
|
|
||||||
|
event_link("dhgenerator", $event, "03");
|
||||||
|
templates2events("/etc/crontab", $event);
|
||||||
|
# add templates to expand + service to try-restart in target packages
|
||||||
|
# templates2events("/etc/dovecot/ssl/dhparam.pem", $event);
|
||||||
|
# safe_symlink("try-restart", "root/etc/e-smith/events/$event/services2adjust/dovecot");
|
||||||
|
|
||||||
#--------------------------------------------------
|
#--------------------------------------------------
|
||||||
# actions for email-update event:
|
# actions for email-update event:
|
||||||
|
27
root/etc/e-smith/events/actions/dhgenerator
Executable file
27
root/etc/e-smith/events/actions/dhgenerator
Executable file
@ -0,0 +1,27 @@
|
|||||||
|
#!/usr/bin/perl
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use esmith::ssl;
|
||||||
|
|
||||||
|
my $event=shift||"program";
|
||||||
|
my $folder="/home/e-smith/dh.pem";
|
||||||
|
my $KeySize = 2048;
|
||||||
|
# load config db
|
||||||
|
|
||||||
|
mkdir($folder, 0700) unless(-d $folder );
|
||||||
|
# if program (or during updates) we only generate the 2048 to start all programs after install without waiting too much
|
||||||
|
if ( $event eq "program" || $event eq "temp" ) {
|
||||||
|
my $exit_code=dh_exists_good_size($KeySize,"$folder/$KeySize.pem") || system("/usr/bin/openssl","dhparam","-out","$folder/$KeySize.pem", $KeySize);
|
||||||
|
exit 0;
|
||||||
|
}
|
||||||
|
# if called as event, we generate a 4096 if 2096 exist, and then expand templates for services in need of this
|
||||||
|
# then the event will restart the service to use stronger dh.pem
|
||||||
|
else {
|
||||||
|
$KeySize = 4096 if (dh_exists_good_size($KeySize,"$folder/$KeySize.pem"));
|
||||||
|
print "Key size is $KeySize\n";
|
||||||
|
exit 0 if (dh_exists_good_size($KeySize,"$folder/$KeySize.pem"));
|
||||||
|
# here we should test if uptime > 2 hours and return if not enough uptime
|
||||||
|
system("/usr/bin/openssl","dhparam","-out","$folder/$KeySize.pem", $KeySize);
|
||||||
|
exit 0;
|
||||||
|
}
|
||||||
|
|
8
root/etc/e-smith/templates/etc/crontab/dhgenerate
Normal file
8
root/etc/e-smith/templates/etc/crontab/dhgenerate
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
use esmith::ssl;
|
||||||
|
my $folder="/home/e-smith/dh.pem";
|
||||||
|
my $KeySize = 4096;
|
||||||
|
$OUT = "#4096 dhparam exists";
|
||||||
|
$OUT = '@reboot root sleep 2d && /sbin/e-smith/signal-event dhparam-update'."\n" unless (dh_exists_good_size($KeySize,"$folder/$KeySize.pem"));
|
||||||
|
}
|
||||||
|
|
35
root/etc/e-smith/templates/home/e-smith/dh.pem
Normal file
35
root/etc/e-smith/templates/home/e-smith/dh.pem
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
{
|
||||||
|
use esmith::ssl;
|
||||||
|
# for the generation of originals in /home/e-smith/dh.pem/
|
||||||
|
# we check that 4096 exist, if not we default to 2048. If not we generate it
|
||||||
|
# for replication : we copy what we have
|
||||||
|
|
||||||
|
my $DHSize = $modSSL{DHSize} ||'4096';
|
||||||
|
my $key = "/home/e-smith/dh.pem";
|
||||||
|
for my $DHSize (qw(4096 2048))
|
||||||
|
{
|
||||||
|
# if key exists and good size, we use it
|
||||||
|
if ( dh_exists_good_size($DHSize,"$key/$DHSize.pem") )
|
||||||
|
{
|
||||||
|
# Old key file is still good. Read it out - processTemplate will work
|
||||||
|
# out that it hasn't changed, and leave the old one in place
|
||||||
|
open(K, "$key/$DHSize.pem") or die "Couldn't open key file: $!";
|
||||||
|
my @key = <K>;
|
||||||
|
chomp @key;
|
||||||
|
$OUT = join "\n", @key;
|
||||||
|
close(K);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
# if nothing have ever been generated we call the action script as program
|
||||||
|
# it will generate a 2048, which 'should' be faster than 4096
|
||||||
|
# later if uptime is sufficient 4096 will be generated.
|
||||||
|
my $program = "/etc/e-smith/events/actions/dhgenerator";
|
||||||
|
system($program);
|
||||||
|
open(K, "$key/2048.pem") or die "Couldn't open dh file: $!";
|
||||||
|
my @key = <K>;
|
||||||
|
chomp @key;
|
||||||
|
$OUT = join "\n", @key;
|
||||||
|
close(K);
|
||||||
|
return;
|
||||||
|
}
|
@ -1,3 +1,4 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
/sbin/modprobe dummy
|
/sbin/modprobe dummy
|
||||||
|
$(ip link show dummy0 2>/dev/null 1>&2) || exec ip link add dummy0 type dummy
|
||||||
exec ip link set dummy0 address 10:00:01:02:03:04
|
exec ip link set dummy0 address 10:00:01:02:03:04
|
||||||
|
@ -15,12 +15,6 @@ enable networking.service
|
|||||||
enable wan.service
|
enable wan.service
|
||||||
enable masq.service
|
enable masq.service
|
||||||
enable php-fpm.service
|
enable php-fpm.service
|
||||||
enable php55-php-fpm.service
|
|
||||||
enable php56-php-fpm.service
|
|
||||||
enable php70-php-fpm.service
|
|
||||||
enable php71-php-fpm.service
|
|
||||||
enable php72-php-fpm.service
|
|
||||||
enable php73-php-fpm.service
|
|
||||||
enable php74-php-fpm.service
|
enable php74-php-fpm.service
|
||||||
enable php80-php-fpm.service
|
enable php80-php-fpm.service
|
||||||
enable httpd-e-smith.service
|
enable httpd-e-smith.service
|
||||||
@ -73,3 +67,4 @@ disable ntpdate.service
|
|||||||
disable ftp.service
|
disable ftp.service
|
||||||
disable proftpd.service
|
disable proftpd.service
|
||||||
|
|
||||||
|
enable dhparam-generator.service
|
||||||
|
24
root/usr/lib/systemd/system/dhparam-generator.service
Normal file
24
root/usr/lib/systemd/system/dhparam-generator.service
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Diffie Hellman parameter generator
|
||||||
|
#TODO: add Requires= or Wants= to those:
|
||||||
|
Before=ftp.service
|
||||||
|
Before=dovecot.service
|
||||||
|
Before=qpsmtpd.service sqpsmtpd.service uqpsmtpd.service
|
||||||
|
Before=radiusd.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
ExecStart=/etc/e-smith/events/actions/dhgenerator
|
||||||
|
# sqpsmtpd and uqpsmtpd use a symlink to /var/service/qpsmtpd/ssl
|
||||||
|
ExecStartPost=-/sbin/e-smith/expand-template /var/service/qpsmtpd/ssl/dhparam.pem
|
||||||
|
ExecStartPost=-/sbin/e-smith/expand-template /etc/dovecot/ssl/dhparam.pem
|
||||||
|
ExecStartPost=-/sbin/e-smith/expand-template /etc/raddb/certs/dh
|
||||||
|
|
||||||
|
PrivateTmp=true
|
||||||
|
ProtectSystem=no
|
||||||
|
ProtectHome=no
|
||||||
|
PrivateDevices=false
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=sme-server.target
|
||||||
|
|
@ -6,7 +6,7 @@ use esmith::ConfigDB;
|
|||||||
|
|
||||||
|
|
||||||
our @ISA = qw(Exporter);
|
our @ISA = qw(Exporter);
|
||||||
our @EXPORT = qw( key_exists_good_size cert_exists_good_size cert_is_cert key_is_key related_key_cert SSLproto SSLprotoApache SSLprotoComa SSLprotoHyphen SSLprotoMin SSLprotoLDAP SSLprotoQpsmtpd $smeCiphers $smeSSLprotocol %existingSSLprotos);
|
our @EXPORT = qw( key_exists_good_size cert_exists_good_size cert_is_cert key_is_key related_key_cert SSLproto SSLprotoApache SSLprotoComa SSLprotoHyphen SSLprotoMin SSLprotoLDAP SSLprotoQpsmtpd $smeCiphers $smeSSLprotocol %existingSSLprotos dh_exists_good_size);
|
||||||
|
|
||||||
my $configdb = esmith::ConfigDB->open_ro or die "Could not open accounts db";
|
my $configdb = esmith::ConfigDB->open_ro or die "Could not open accounts db";
|
||||||
our $SystemName = $configdb->get('SystemName')->value;
|
our $SystemName = $configdb->get('SystemName')->value;
|
||||||
@ -162,6 +162,38 @@ sub related_key_cert {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
=head2 dh_exists_good_size
|
||||||
|
# check dh exist
|
||||||
|
# check dh is indeed dh
|
||||||
|
# check dh size
|
||||||
|
# openssl rsa -noout -modulus -in domain.key | openssl md5
|
||||||
|
# openssl x509 -noout -modulus -in domain.crt | openssl md5
|
||||||
|
=cut
|
||||||
|
|
||||||
|
sub dh_exists_good_size {
|
||||||
|
my $configdb = esmith::ConfigDB->open_ro or die "Could not open accounts db";
|
||||||
|
my %modSSL = $configdb->as_hash('modSSL');
|
||||||
|
my $KeySize = shift || $modSSL{DHSize} ||'4096';
|
||||||
|
my $dh = shift || "/home/e-smith/dh.pem/$KeySize.pem";
|
||||||
|
if ( -f $dh )
|
||||||
|
{
|
||||||
|
my $signatureKeySize = `openssl dhparam -text -noout -in $dh 2>/dev/null | grep "DH Parameters:" | head -1`;
|
||||||
|
chomp $signatureKeySize;
|
||||||
|
$signatureKeySize =~ s/^.*DH Parameters: \((.*) bit\)/$1/p;
|
||||||
|
if ( $signatureKeySize == $KeySize ) {
|
||||||
|
#print "$signatureKeySize\n";
|
||||||
|
# cert is correct size and exists, we can proceed.
|
||||||
|
# next check key and cert are related
|
||||||
|
# next check cert is still valid
|
||||||
|
# next check alt name are still the same
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
##TODO write sub and migrate those actions from template fragments
|
##TODO write sub and migrate those actions from template fragments
|
||||||
# check cert is related to key
|
# check cert is related to key
|
||||||
# => /etc/e-smith/templates/home/e-smith/ssl.crt
|
# => /etc/e-smith/templates/home/e-smith/ssl.crt
|
||||||
|
@ -4,7 +4,7 @@ Summary: smeserver server and gateway - base module
|
|||||||
%define name smeserver-base
|
%define name smeserver-base
|
||||||
Name: %{name}
|
Name: %{name}
|
||||||
%define version 11.0.0
|
%define version 11.0.0
|
||||||
%define release 30
|
%define release 31
|
||||||
Version: %{version}
|
Version: %{version}
|
||||||
Release: %{release}%{?dist}
|
Release: %{release}%{?dist}
|
||||||
License: GPL
|
License: GPL
|
||||||
@ -182,6 +182,11 @@ fi
|
|||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sun Mar 16 2025 Jean-Philippe Pialasse <jpp@koozali.org> 11.0.0-31.sme
|
||||||
|
- handle dh params with template [SME: 12826]
|
||||||
|
TODO timer and event
|
||||||
|
- foolproofing dummy.module
|
||||||
|
|
||||||
* Thu Mar 06 2025 Jean-Philippe Pialasse <jpp@koozali.org> 11.0.0-30.sme
|
* Thu Mar 06 2025 Jean-Philippe Pialasse <jpp@koozali.org> 11.0.0-30.sme
|
||||||
- systemd unit for ippp [SME: 12876]
|
- systemd unit for ippp [SME: 12876]
|
||||||
- systemd unit for wan [SME: 12875]
|
- systemd unit for wan [SME: 12875]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user