User Tools

Site Tools


linux:ispconfig

ISPConfig

aws ec2 run-instances \
  --instance-type t4g.small \
  --image-id ami-0e15cd9cd8e225753 \
  --security-groups MySecurityGroup \
  --key-name My-key-pair
  --credit-specification "CpuCredits=standard"

AWS Ports

TCP

21,22,25,53,80,110,143,443,465,587,993,995,4190,8080,8081,40110:40210

UDP

53

RSpamD fix signal 11

touch /etc/rspamd/local.d/history_redis.conf

servers = localhost:6379;
nrows = 450;
key_prefix = "rs_history";
compress = true;

PolyChaCha Cipher

/usr/local/ispconfig/server/conf-custom/nginx_vhost.conf.master

ssl_ciphers !aNULL:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256;

ARM Graviton Install

Enable swap

sudo /bin/dd if=/dev/zero of=/swap.1 bs=1M count=1024
sudo chmod 600 /swap.1
sudo /sbin/mkswap /swap.1
sudo /sbin/swapon /swap.1

/etc/fstab

/swap.1   swap    swap    defaults        0   0
su sudo
echo "172.0.1.1 hostname.domainname hostname" >>/etc/hosts
echo "hostname" >/etc/hostname
sudo apt update && sudo apt upgrade
sudo apt install linux-modules-extra-aws -y

and reboot!

install.sh
#!/bin/bash
# make sure locales are set
sudo sed -i '/^#.* en_US.UTF-8* /s/^#//' /etc/locale.gen
sudo locale-gen
sudo apt update -y
sudo apt install php-fpm ssl-cert curl gnupg software-properties-common rsync pigz php-net-idna2 php7.4-bcmath php8.1-bcmath php7.4-gmp php8.1-gmp -y
 
mkdir /tmp/ispconfig
cd /tmp/ispconfig
sudo wget -O /tmp/ispconfig/ispconfig.tar.gz https://www.ispconfig.org/downloads/ispconfig-ai.tar.gz
sudo tar xvfz /tmp/ispconfig/ispconfig.tar.gz -C /tmp/ispconfig
 
sed -i.bak -e '24d' /tmp/ispconfig/lib/os/class.ISPConfigUbuntu2004OS.inc.php #no repositories
sed -i.bak -e '141d' /tmp/ispconfig/lib/os/class.ISPConfigDebianOS.inc.php #no rar package on ARM
php "ispconfig.ai.php" --use-nginx --use-php=7.4,8.1 --use-ftp-ports=40110-40210 --lang=en --no-ntp
--no-mailman
systemctl stop clamav-daemon
systemctl disable clamav-daemon
systemctl stop clamav-freshclam
systemctl disable clamav-freshclam
sudo rm /etc/rspamd/local.d/antivirus.conf
 
sudo sed -i 's/^\(After\s*=\s*\).*$/\1network-online.target/' /usr/lib/systemd/system/nginx.service
 
sudo chown root:ispapps /etc/roundcube/debian-db.php
sudo chmod 640 /etc/roundcube/debian-db.php
sudo chown root:ispapps /etc/roundcube/config.inc.php
sudo chmod 640 /etc/roundcube/config.inc.php
sudo chown -R ispapps:adm /var/log/roundcube
sudo chmod -R 750 /var/log/roundcube
sudo chown -R ispapps:ispapps /var/lib/roundcube/temp
sudo chmod -R 750 /var/lib/roundcube/temp

Replace SH with BASH (select NO)

dpkg-reconfigure dash

Clamav OOM

ReadTimeout 10
MaxThreads 3
ConcurrentDatabaseReload no

Nexcloud inside ISPConfig with NGINX

php.ini

opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.max_accelerated_files=10000
opcache.revalidate_freq=120
opcache.validate_timestamps = 0
opcache.save_comments=1
memory_limit = 512M
post_max_size = 300M
upload_max_filesize = 200M
clear_env = no

in config.php

'htaccess.RewriteBase' => '/',
'htaccess.IgnoreFrontController' => true,

nginx upload

copy /usr/local/ispconfig/server/conf/nginx_vhost.conf.master to conf-custom and change

-location ~ /\. { deny all
+location ~ /\.(?!file).* { deny all
add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";
add_header X-Content-Type-Options nosniff;
add_header Referrer-Policy "no-referrer";
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Robots-Tag "noindex, nofollow";
add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none;

location = /robots.txt {
  allow all;
  log_not_found off;
  access_log off;
}

location ~ \.php$ {
  try_files /b615814d8f2c19dbcb25b1fbae07ce38.htm @php2;
  }

location ^~ /.well-known {
  location = /.well-known/carddav { return 301 /remote.php/dav/; }
  location = /.well-known/caldav  { return 301 /remote.php/dav/; }
  location /.well-known/acme-challenge    { try_files $uri $uri/ =404; }
  location /.well-known/pki-validation    { try_files $uri $uri/ =404; }
  return 301 /index.php$request_uri;
}

# set max upload size
client_max_body_size 20G;
fastcgi_buffers 64 4K;
# Disable gzip to avoid the removal of the ETag header
gzip off;
# Uncomment if your server is build with the ngx_pagespeed module
# This module is currently not supported.
# pagespeed off;
error_page 403 /core/templates/403.php;
error_page 404 /core/templates/404.php;
location / {
  rewrite ^ /index.php$uri;
}

location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {
  return 404;
}

location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {
  return 404;
}

location ~ ^(.+?\.php)(/.*)?$ {
  try_files $1 =404;
  include fastcgi_params;
  fastcgi_param SCRIPT_FILENAME $document_root$1;
  fastcgi_param PATH_INFO $2;
  fastcgi_param HTTPS $https;
  {FASTCGIPASS}
  fastcgi_intercept_errors on;
  fastcgi_index index.php;
  fastcgi_buffers 64 64K;
  fastcgi_buffer_size 256k;
  fastcgi_param modHeadersAvailable true;
  fastcgi_read_timeout 7200; 
}

location @php2 {
  fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
  include fastcgi_params;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  fastcgi_param PATH_INFO $fastcgi_path_info;
  fastcgi_param HTTPS $https;
  {FASTCGIPASS}
  fastcgi_intercept_errors on;
  fastcgi_index index.php;
  fastcgi_buffers 64 64K;
  fastcgi_buffer_size 256k;
  fastcgi_param modHeadersAvailable true;
  fastcgi_read_timeout 7200; 
}

location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|oc[ms]-provider/.+|core/templates/40[34])\.php(?:$|/) {
  fastcgi_split_path_info ^(.+\.php)(/.*)$;
  include fastcgi_params;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  fastcgi_param PATH_INFO $fastcgi_path_info;
  fastcgi_param HTTPS on;
  fastcgi_param modHeadersAvailable true; #Avoid sending the security headers twice
  fastcgi_param front_controller_active true;
  #fastcgi_pass php-handler;
  {FASTCGIPASS}
  fastcgi_intercept_errors on;
  fastcgi_request_buffering off;
}

location ~ ^/(?:updater|oc[ms]-provider)(?:$|/) {
  try_files $uri/ =404;
  index index.php;
}

# Adding the cache control header for js and css files
# Make sure it is BELOW the PHP block
location ~* \.(?:css|js|mjs|map)$ {
  try_files $uri /index.php$uri$is_args$args;
  add_header Cache-Control "public, max-age=604800";
  # Add headers to serve security related headers (It is intended to have those duplicated to the ones above)
  # Before enabling Strict-Transport-Security headers please read into this topic first.
  # add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";
  add_header X-Content-Type-Options nosniff;
  add_header X-Frame-Options "SAMEORIGIN";
  add_header X-XSS-Protection "1; mode=block";
  add_header X-Robots-Tag none;
  add_header X-Download-Options noopen;
  add_header X-Permitted-Cross-Domain-Policies none;
  # Optional: Don't log access to assets
  access_log off;
}

location ~* \.(?:svg|gif|ico|jpg|png|webp|wasm|tflite|map|ogg|flac|otf|woff2)$ {
  add_header Cache-Control "public, max-age=604800";
  try_files $uri /index.php$uri$is_args$args;
  # Optional: Don't log access to other assets
  access_log off;
}
location = /data/htaccesstest.txt {
  allow all;
  log_not_found off;
  access_log off;
}

Dokuwiki

location ~ /(conf/|bin/|inc/|vendor/|install.php) { deny all; }
location ~ ^/data/ { internal ; }
location ~ ^/lib.*\.(js|css|gif|png|ico|jpg|jpeg)$ { expires 365d; add_header Cache-Control "public"; }

index doku.php;
location / { try_files $uri $uri/ @dokuwiki; }

location @dokuwiki {
        rewrite ^/_media/(.*) /lib/exe/fetch.php?media=$1 last;
        rewrite ^/_detail/(.*) /lib/exe/detail.php?media=$1 last;
        rewrite ^/_export/([^/]+)/(.*) /doku.php?do=export_$1&id=$2 last;
        rewrite ^/(.*) /doku.php?id=$1&$args last;
}

location ~ \.php$ {
 fastcgi_split_path_info ^(.+\.php)(/.*)$;
 fastcgi_param HTTPS on;
 include fastcgi_params;
 {FASTCGIPASS}
 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 fastcgi_param REDIRECT_STATUS 200;
}

Postfix on Amazon EC2

online Resize FS

sudo resize2fs /dev/nvme1n1
FTP config

echo “YOUR_EXTERNAL_IP_ADDR” > /etc/pure-ftpd/conf/ForcePassiveIP

MariaDB

182 + 18.7×25 = ~650MB

key_buffer_size         = 512K
max_connections         = 25
tmp_table_size          = 10M
max_heap_table_size     = 10M
table_definition_cache  = 768
wait_timeout            = 14400
interactive_timeout     = 14400
innodb_log_file_size    = 18M
innodb_buffer_pool_size = 20M
innodb_log_file_size    = 5M
query_cache_size        = 8M
query_cache_limit       = 2M
query_cache_type        = 1
sort_buffer_size        = 1M
join_buffer_size        = 1M
dbispconfig.sys_ini.custom_logo
echo "data:image/png;base64,`base64 < path/to/your/custom_logo.png | tr -d '\n'`"​

Recalculate mail quota

sudo doveadm quota recalc -A
linux/ispconfig.txt · Last modified: 2024/11/11 15:22 by Jan Forman