Installazione Nextcloud 27 su Raspberry pi 4

Installazione Nextcloud 27 su Raspberry pi 4

Installazione Nextcloud 27 su Raspberry pi 4

 

UPDATE: 14/10/23

con la versione bookworm, php8.2 è gia incluso.

Guida su come installare Nextcloud 27 su Raspberry pi 4. Per installare Nextcloud a differenza delle versioni precedenti è indispensabile avere php8.2

Nota: Assicurati di avere un Raspberry Pi 4 funzionante con Raspberry pi OS al momento bullseye.

1) Aggiornare il sistema:
$ sudo apt update
$ sudo apt upgrade -y
$ sudo reboot
2) Aggiungere i repository per ottenere le ultime versioni di php:
$ curl https://packages.sury.org/php/apt.gpg | sudo tee /usr/share/keyrings/suryphp-archive-keyring.gpg >/dev/null
$ echo "deb [signed-by=/usr/share/keyrings/suryphp-archive-keyring.gpg] https://packages.sury.org/php/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/sury-php.list
$ sudo apt update; sudo apt upgrade -y
3) Installazione di Apache2, Mysql, php8.2, certbot:
$ sudo apt install apache2 php8.2 php8.2-gd php8.2-sqlite3 php8.2-curl php8.2-zip php8.2-xml php8.2-mbstring php8.2-mysql php8.2-bz2 php8.2-intl php8.2-imap php8.2-gmp libapache2-mod-php8.2 mariadb-server python3-certbot-apache php8.2-fpm php8.2-apcu php8.2-imagick php8.2-bcmath libmagickcore-6.q16-6-extra ffmpeg redis-server php8.2-redis
4) Verifica Apache2
$ sudo a2enmod proxy_fcgi setenvif
$ sudo a2enconf php8.2-fpm
$ sudo systemctl restart apache2
$ sudo systemctl status apache2
5) Creazione utente nextcloud e db
$ sudo mysql -u root -p

ed invio

create database nextcloud_db;
create user nextclouduser@localhost identified by 'YOUR-STRONG-PWD';
grant all privileges on nextcloud_db.* to nextclouduser@localhost identified by 'YOU-STRONG-PWD';
flush privileges;
exit;
6) Download Nextcloud
$ cd /var/www/
$ sudo wget -v https://download.nextcloud.com/server/releases/latest.zip
$ sudo unzip latest.zip
$ sudo rm latest.zip

creazione  della directory di storage, quest’ultima può essere creata anche all’esterno della cartella Nextcloud o su unità esterna.

$ sudo mkdir -p /var/www/nextcloud/data
$ sudo chown -R www-data:www-data /var/www/nextcloud/
$ sudo chmod 750 /var/www/nextcloud/data
7) Configurazione Apache2
$ sudo nano /etc/apache2/sites-available/nextcloud.conf

ed incollare questa semplice configurazione, che punterà a [IPADDRESS]/nextcloud

Alias /nextcloud "/var/www/nextcloud/"

<Directory /var/www/nextcloud/>
Require all granted
AllowOverride All
Options FollowSymLinks MultiViews

<IfModule mod_dav.c>
Dav off
</IfModule>

</Directory>
$ sudo a2ensite nextcloud.conf
$ sudo systemctl reload apache2

se si volesse utilizzare invece un proprio dominio:

<VirtualHost *:80>
DocumentRoot /var/www/nextcloud/
ServerName your.domain.com

<Directory /var/www/nextcloud/>
Require all granted
AllowOverride All
Options FollowSymLinks MultiViews

<IfModule mod_dav.c>
Dav off
</IfModule>
</Directory>
</VirtualHost>
$ sudo a2ensite nextcloud.conf
$ sudo systemctl reload apache2
8) Nextcloud installazione e post installazione

 

Nextcloud Server su Raspberry Piandare all’indirizzo del server: [IPADDRESS]/nextcloud

$ hostname -I

creare username e password per l’accesso via web, e poi inserire nextclouduser e nextcloud_db. I dati di default saranno in /var/www/nextcloud/data, ma si possono anche spostare successivamente.

9) Problemi accesso al server Nextcloud

se non si accede più al server andare a verificare i 2 files principali di apache2, 000-default.conf e default-ssl.conf, che puntano alla directory sbagliata:

$ sudo nano /etc/apache2/sites-available/000-default.conf
$ sudo nano /etc/apache2/sites-available/default-ssl.conf

da

DocumentRoot /var/www/html

a

DocumentRoot /var/www/
10) Tuning Apache2

alcune essenziali modifiche:

$ sudo nano /etc/php/8.2/fpm/php.ini

trovare queste tre stringhe e modificarle da così:

memory_limit = 128M
post_max_size = 8M
upload_max_filesize = 2M

a così:

memory_limit = 1024M
post_max_size = 1024M
upload_max_filesize = 1024M
$ sudo systemctl restart apache2
$ sudo systemctl restart php8.2-fpm.service

Modificare anche le porte, come sotto:

$ sudo nano /etc/apache2/ports.conf
Listen 0.0.0.0:80

<IfModule ssl_module>
Listen 0.0.0.0:443
</IfModule>

<IfModule mod_gnutls.c>
Listen 443
</IfModule>
$ sudo systemctl restart apache2
11) Certificato SSL auto-firmato

nell’esempio sotto, userò un certificato auto-firmato, ma è consigliato un certificato del tipo  Let’s Encrypt (vedi capitolo 12)

$ sudo mkdir -p /etc/apache2/ssl
£ sudo openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt
$ sudo a2enmod ssl
$ sudo systemctl restart apache2

inserire i dati per la creazione del certificato:

Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:
Email Address []:

poi trovare queste due stringhe:

$ sudo nano /etc/apache2/sites-available/default-ssl.conf

e modificarle da così:

SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

a così:

SSLCertificateFile /etc/apache2/ssl/apache.crt
SSLCertificateKeyFile /etc/apache2/ssl/apache.key
$ sudo a2ensite default-ssl.conf
$ sudo systemctl reload apache2
12) Installazione certificato con Let’s Encrypt
  • Il raspberry dovrà avere come dominio/hostname l’equivalente di example.com. Questo può essere modificato in /etc/hostname e poi riavviare.
  • Il vostro ip pubblico dovrà puntare quindi al dominio, nel caso non si avesse un ip pubblico, utilizzare un servizio di DNS.
  • Assicurarsi prima, di aprire la porte 80  verso il proprio server, altrimenti non si potranno ottenere i certificati. Successivamente bisognerà aprire la 443.

con certbot già installato in precedenza basta:

$ sudo certbot --webroot -w /var/www/nextcloud -i apache --agree-tos --redirect --hsts --staple-ocsp --email your@mail.com -d server.example.com

se tutto è andato bene vedremo:

IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/example.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/example.com/privkey.pem
Your cert will expire on 2021-03-07. To obtain a new or tweaked
version of this certificate in the future, simply run certbot
again. To non-interactively renew *all* of your certificates, run
"certbot renew"
- If you like Certbot, please consider supporting our work by:

Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le

affinchè il server sia sempre raggiungibile a [IPADDRESS]/nextcloud  verificare che sia presente la stringa <Alias /nextcloud “/var/www/nextcloud/”>

$ sudo nano /etc/apache2/sites-available/nextcloud.conf

come sotto:

Alias /nextcloud "/var/www/nextcloud/"
<VirtualHost *:80>
DocumentRoot /var/www/nextcloud/
ServerName server.example.com
13) Sicurezza

13.1) Installazione e configurazione firewall ufw:

$ sudo apt install ufw
$ sudo ufw enable

bloccare tutte le connessioni in ingresso:

$ sudo ufw default allow outgoing
$ sudo ufw default deny incoming

aprire solo le porte interessate, come quella ssh o https, ad ogni modo mai utilizzare porte standard:

$ sudo ufw allow 22
$ sudo ufw allow 443/tcp
$ sudo ufw allow 80/tcp

verifica:

$ sudo ufw status verbose
$ sudo iptables -S

13.2) Installazione e configurazione fail2ban:

$ sudo apt install fail2ban
$ sudo systemctl enable fail2ban
$ sudo systemctl status fail2ban

proteggere tutti i servizi usati, utilizzando /etc/fail2ban/jail.local, fail2ban arriva già con dei filtri predefiniti che possono essere abilitati:

$ ls /etc/fail2ban/filter.d/

quindi:

$ sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
$ sudo nano /etc/fail2ban/jail.local

dove si trovano gia i filtri che si possono abilitare con “enabled = true

esempio:

[sshd]
enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 120
ignoreip = whitelist-IP

# detect password authentication failures
[apache]
enabled = true
port = http,https
filter = apache-auth
logpath = /var/log/apache*/*error.log
maxretry = 6

# detect potential search for exploits and php vulnerabilities
[apache-noscript]
enabled = true
port = http,https
filter = apache-noscript
logpath = /var/log/apache*/*error.log
maxretry = 6

# detect Apache overflow attempts
[apache-overflows]
enabled = true
port = http,https
filter = apache-overflows
logpath = /var/log/apache*/*error.log
maxretry = 2

# detect failures to find a home directory on a server
[apache-nohome]
enabled = true
port = http,https
filter = apache-nohome
logpath = /var/log/apache*/*error.log
maxretry = 2
$ sudo systemctl restart fail2ban 
$ sudo fail2ban-client status

13.3) Integrazione Nextcloud in fail2ban:

$ sudo nano /etc/fail2ban/filter.d/nextcloud.conf

ed inserire il codice sotto:

[Definition]
_groupsre = (?:(?:,?\s*"\w+":(?:"[^"]+"|\w+))*)
failregex = ^\{%(_groupsre)s,?\s*"remoteAddr":"<HOST>"%(_groupsre)s,?\s*"messag>
^\{%(_groupsre)s,?\s*"remoteAddr":"<HOST>"%(_groupsre)s,?\s*"messag>
datepattern = ,?\s*"time"\s*:\s*"%%Y-%%m-%%d[T ]%%H:%%M:%%S(%%z)?"

a questo punto inserire nella sezione Jail il filtro specifico per Nextcloud:

$ sudo nano /etc/fail2ban/jail.local

ed inserire:

[nextcloud]
backend = auto
enabled = true
port = 80,443
protocol = tcp
filter = nextcloud
maxretry = 3
bantime = 86400
findtime = 43200
logpath = /var/www/nextcloud/data/nextcloud.log

verifica con:

$ sudo systemctl restart fail2ban
$ sudo fail2ban-client status nextcloud

errore avvio fail2ban:

$ sudo nano /etc/fail2ban/jail.local

ed impostare:

backend = systemd
14) Trusted Domain

indicare solo gli ip ed i domini che possono accedere:

$ sudo nano /var/www/nextcloud/config/config.php
'trusted_domains' => 
array (
0 => '192.168.1.122',
1 => 'my-domain.com',
15) Abilitare Memory Caching, Redis e default phone region
$ sudo nano /var/www/nextcloud/config/config.php

ed inserire prima della voce trusted_domains

'memcache.local' => '\OC\Memcache\APCu',

poi inserire dopo la voce installed’ => true

'memcache.local' => '\OC\Memcache\APCu',
'memcache.locking' => '\OC\Memcache\Redis',
'memcache.distributed' => '\OC\Memcache\Redis',
'redis' => [
'host' => 'localhost',
'port' => 6379,
],

e a seguire:

'default_phone_region' => 'IT',
16) Background Job

nextcloud richiede un cronjob per allegerire il carico, di default è settato in AJAX, andare nel menu Basic Settings ed impostare a cron:

Background Job

poi creare un crob job che parte in backgroung ogni 5 minuti:

$ sudo crontab -u www-data -e

ed inserire in fondo:

*/5 * * * * php8.2 --define apc.enable_cli=1 /var/www/nextcloud/cron.php

verificare con:

$ sudo crontab -u www-data -l
17) Forzare la connessione via SSL con certificato auto-firmato
$ sudo nano /etc/apache2/sites-available/000-default.conf

sostituire tutto con quello sotto, che reindirizza tutte le richieste a https:

Alias /nextcloud "/var/www/nextcloud/"

<VirtualHost *:80>
ServerAdmin admin@example

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
</VirtualHost>
18) Aggiornamenti di sicurezza automatici giornalieri:
$ sudo apt install unattended-upgrades
$ sudo nano /etc/apt/apt.conf.d/02periodic

inserire:

APT::Periodic::Enable "1";
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::Unattended-Upgrade "1";
APT::Periodic::AutocleanInterval "1";
APT::Periodic::Verbose "2";

aggiornare:

$ sudo unattended-upgrades -d
19) Sudo DEVE sempre chiedere la password:
$ sudo nano /etc/sudoers.d/010_pi-nopasswd

diventa da così:

YOUR-USER ALL=(ALL) NOPASSWD: ALL

a così:

YOUR-USER ALL=(ALL) PASSWD: ALL
20) Mysql in sicurezza
$ sudo mysql_secure_installation
Enter current password for root (enter for none): Press Enter
Set root password? [Y/n] Y 
Remove anonymous users? [Y/n] Y 
Disallow root login remotely? [Y/n] Y 
Remove test database and access to it? [Y/n] Y 
Reload privilege tables now? [Y/n] Y
21) SSH in sicurezza

cambiare subito la porta di default e verificare che non sia abilitato il login come root, ma soprattutto usare una chiave ssh:

$ sudo nano /etc/ssh/sshd_config
#PermitRootLogin prohibit-password
Port 2223
22) Backup

backup da eseguire periodicamente su supporti esterni ed in remoto. Si può utilizzare rsync (guida), tar (guida), dd (guida), scp (guida), lsyncd (guida).

23) VPN

il sistema più sicuro per accedere da remoto è tramite vpn, se si ha un router che supporta ipSec o Wireguard (fritzbox 7590) il tutto è semplice, in alternativa si può creare un server vpn, utilizzando openvpn o wireguard

 

Installazione Nextcloud 27 su Raspberry pi 4

enjoy 😉

 

Monitorare Raspberry Pi con RPI-Monitor

 

Monitorare Raspberry Pi con RPI-Monitor

Monitorare Raspberry Pi con RPI-Monitor

 

Guida su come monitorare via Web UI un server Raspberry Pi utilizzando RPI-Monitor.

sudo apt update
sudo apt install dirmngr -y
sudo wget http://goo.gl/vewCLL -O /etc/apt/sources.list.d/rpimonitor.list
sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com E4E362DE2C0D3C0F
sudo apt update
sudo apt install rpimonitor
sudo /etc/init.d/rpimonitor update

abilitare rpi-monitor allo startup come servizio:

sudo nano /etc/systemd/system/rpimonitor.service

ed inserire le righe sotto:

[Unit]
Description=RPi-Monitor daemon
Before=multi-user.target
After=remote-fs.target
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
Restart=on-failure
KillMode=mixed
Nice=19
ExecStartPre=/bin/sleep 10
ExecStart=/usr/bin/rpimonitord
ExecStop=/bin/kill $MAINPID
StandardOutput=append:/var/log/rpimonitor.log
StandardError=append:/var/log/rpimonitor.log

[Install]
WantedBy=multi-user.target

sudo systemctl daemon-reload
sudo systemctl enable rpimonitor

a questo punto si può accedere ad rpi-monitor all’indirizzo:

http://ip_address:8888

Monitorare Raspberry Pi con RPI-Monitor

enjoy 😉

 

TorrentBox con qBittorrent su Raspberry Pi

Torrentbox con qBittorrent su Raspberry Pi

TorrentBox con qBittorrent su Raspberry Pi

Guida su come installare qBittorrent su Raspberry Pi, per ottenere un server Torrent e scaricare files h24 in sicurezza.

Login via ssh su Raspberry Pi

sudo apt update
sudo apt install qbittorrent-nox -y

Aggiungere l’utente qbitorrent al sistema come non root

sudo useradd -r -m qbittorrent
sudo usermod -a -G qbittorrent $USER

Creazione servizio:

sudo nano /etc/systemd/system/qbittorrent.service

ed inserire:

[Unit]
Description=BitTorrent Client
After=network.target

[Service]
Type=forking
User=qbittorrent
Group=qbittorrent
UMask=002
ExecStart=/usr/bin/qbittorrent-nox -d --webui-port=8080
Restart=on-failure

[Install]
WantedBy=multi-user.target

Avvio qBittorrent:

sudo systemctl start qbittorrent
sudo systemctl enable qbittorrent

Adesso abbiamo Accesso alla WEB UI con utente admin e password adminadmin

http://ip_address:8080

1) cambiare user e password

TorrentBox con qBittorrent su Raspberry Pi

2) installare una vpn

TorrentBox con qBittorrent su Raspberry Pi

enjoy 😉

 

Nextcloud Server su Raspberry Pi

 

 Nextcloud Server su Raspberry Pi

Nextcloud Server su Raspberry Pi

 

Guida su come installare un server, utilizzando Nextcloud su Raspberry Pi 3/4. A differenza della guida precedente, dove ho utilizzato Nginx come web server, adesso utilizzerò Apache2.  Ci saranno anche 10 consigli per rendere più sicuro il server.

Prerequisiti ed info
  • Raspberry Pi 3/4
  • Raspberry Pi OS Bullseye già installato con accesso ssh.
  • Consiglio di utilizzare rpi-imager per preparare la sd card, e nelle impostazioni abilitare subito ssh, e sopratutto creare un nuovo utente.
  • La guida è stata testata su una installazione pulita di Raspberry Pi OS Lite.
1) Accedere al Raspberry via ssh ed aggiornare
sudo apt update; sudo apt upgrade -y
sudo reboot
2) Installazione php8.0 Mariadb Apache2
sudo apt install apache2 php8.0 php8.0-gd php8.0-sqlite3 php8.0-curl php8.0-zip php8.0-xml php8.0-mbstring php8.0-mysql php8.0-bz2 php8.0-intl php-smbclient php8.0-imap php8.0-gmp libapache2-mod-php8.0 mariadb-server python3-certbot-apache
3) Verifica Apache2
sudo systemctl restart apache2
sudo systemctl status apache2
4) Creazione utente nextcloud e db
sudo mysql -u root -p

ed invio

create database nextcloud_db;
create user nextclouduser@localhost identified by 'YOUR-STRONG-PWD';
grant all privileges on nextcloud_db.* to nextclouduser@localhost identified by 'YOU-STRONG-PWD';
flush privileges;
exit
5) Download Nextcloud
cd /var/www/
sudo wget -v https://download.nextcloud.com/server/releases/latest.zip
sudo unzip latest.zip
sudo rm latest.zip

creazione  della directory di storage, quest’ultima può essere creata anche all’esterno della cartella Nextcloud o su unità esterna.

sudo mkdir -p /var/www/nextcloud/data
sudo chown -R www-data:www-data /var/www/nextcloud/
sudo chmod 750 /var/www/nextcloud/data
6) Configurazione Apache2
sudo nano /etc/apache2/sites-available/nextcloud.conf

ed incollare questa semplice configurazione, che punterà a http://ip-server/nextcloud/

<Directory /var/www/nextcloud/>
Require all granted
AllowOverride All
Options FollowSymLinks MultiViews

<IfModule mod_dav.c>
Dav off
</IfModule>

</Directory>
sudo a2ensite nextcloud.conf
sudo systemctl reload apache2

se si volesse utilizzare invece un proprio dominio:

<VirtualHost *:80>
DocumentRoot /var/www/nextcloud/
ServerName your.domain.com

<Directory /var/www/nextcloud/>
Require all granted
AllowOverride All
Options FollowSymLinks MultiViews

<IfModule mod_dav.c>
Dav off
</IfModule>
</Directory>
</VirtualHost>
sudo a2ensite nextcloud.conf
sudo systemctl reload apache2
7) Nextcloud post installazione

 

Nextcloud Server su Raspberry Piandare all’indirizzo del server: http://my-ip-address/nextcloud/

# hostname -I

creare username e password per l’accesso via web, e poi inserire nextclouduser e nextclouddb. I dati di default saranno in /var/www/nextcloud/data, ma si possono anche spostare successivamente.

8) Tuning Apache2

alcune essenziali modifiche:

sudo nano /etc/php/8.0/apache2/php.ini

trovare queste tre stringhe e modificarle da così:

memory_limit = 128M
post_max_size = 8M
upload_max_filesize = 2M

a così:

memory_limit = 512M
post_max_size = 1024M
upload_max_filesize = 1024M
sudo systemctl restart apache2
9) Certificato SSL

nell’esempio sotto, userò un auto-certificato, ma è consigliato un certificato del tipo Let’s Encrypt, come mostrato nella guida precedente.

sudo mkdir -p /etc/apache2/ssl
sudo openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt
sudo a2enmod ssl
sudo systemctl restart apache2

trovare queste due stringhe:

sudo nano /etc/apache2/sites-available/default-ssl.conf

e modificarle da così:

SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

a così:

SSLCertificateFile /etc/apache2/ssl/apache.crt
SSLCertificateKeyFile /etc/apache2/ssl/apache.key
sudo a2ensite default-ssl.conf
sudo systemctl reload apache2
10) Sicurezza

10.1) Installazione e configurazione firewall ufw:

sudo apt install ufw
sudo ufw enable

bloccare tutte le connessioni in ingresso:

sudo ufw default allow outgoing
sudo ufw default deny incoming

aprire solo le porte interessate, come quella ssh o https, ad ogni modo mai utilizzare porte standard:

sudo ufw allow 22
sudo ufw allow 443/tcp

verifica:

sudo ufw status verbose
sudo iptables -S

10.2) Installazione e configurazione fail2ban:

sudo apt install fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

proteggere tutti i servizi usati, utilizzando /etc/fail2ban/jail.local, fail2ban arriva già con dei filtri predefiniti che possono essere abilitati:

ls /etc/fail2ban/filter.d/

esempio:

[sshd]
enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 120
ignoreip = whitelist-IP

# detect password authentication failures
[apache]
enabled = true
port = http,https
filter = apache-auth
logpath = /var/log/apache*/*error.log
maxretry = 6

# detect potential search for exploits and php vulnerabilities
[apache-noscript]
enabled = true
port = http,https
filter = apache-noscript
logpath = /var/log/apache*/*error.log
maxretry = 6

# detect Apache overflow attempts
[apache-overflows]
enabled = true
port = http,https
filter = apache-overflows
logpath = /var/log/apache*/*error.log
maxretry = 2

# detect failures to find a home directory on a server
[apache-nohome]
enabled = true
port = http,https
filter = apache-nohome
logpath = /var/log/apache*/*error.log
maxretry = 2
sudo systemctl restart fail2ban 
sudo fail2ban-client status

10.3) Trusted Domain

indicare solo gli ip ed i domini che possono accedere:

sudo nano /var/www/nextcloud/config/config.php
'trusted_domains' => 
array (
0 => '192.168.1.122',
1 => 'my-domain.com',

10.4) Forzare la connessione via SSL

sudo nano /etc/apache2/sites-available/000-default.conf

sostituire http con https:

<VirtualHost *:80>
ServerAdmin admin@example

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
</VirtualHost>

10.5) Aggiornamenti di sicurezza automatici giornalieri:

sudo apt install unattended-upgrades
sudo nano /etc/apt/apt.conf.d/02periodic

inserire:

APT::Periodic::Enable "1";
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::Unattended-Upgrade "1";
APT::Periodic::AutocleanInterval "1";
APT::Periodic::Verbose "2";

aggiornare:

sudo unattended-upgrades -d

10.6) Sudo DEVE sempre chiedere la password:

sudo nano /etc/sudoers.d/010_pi-nopasswd

diventa da così:

YOUR-USER ALL=(ALL) NOPASSWD: ALL

a così:

YOUR-USER ALL=(ALL) PASSWD: ALL

10.7) Mysql in sicurezza

sudo mysql_secure_installation
Enter current password for root (enter for none): Press Enter
Set root password? [Y/n] Y 
Remove anonymous users? [Y/n] Y 
Disallow root login remotely? [Y/n] Y 
Remove test database and access to it? [Y/n] Y 
Reload privilege tables now? [Y/n] Y

10.8) SSH in sicurezza

cambiare subito la porta di default e verificare che non sia abilitato il login come root, ma soprattutto usare una chiave ssh:

sudo nano /etc/ssh/sshd_config
#PermitRootLogin prohibit-password
Port 2223
10.9) Backup

backup da eseguire periodicamente su supporti esterni ed in remoto. Si può utilizzare rsync (guida), tar (guida), dd (guida), scp (guida), lsyncd (guida).

10.10) VPN

il sistema più sicuro per accedere da remoto è tramite vpn, se si ha un router che supporta ipSec o Wireguard (fritzbox 7590) il tutto è semplice, in alternativa si può creare un server vpn, utilizzando openvpn o wireguard

Nextcloud Server su Raspberry Pi

enjoy 😉

FreePBX Trunk Pjsip su FRITZBox

 FreePBX Trunk Pjsip su FRITZ!Box

FreePBX Trunk Pjsip su FRITZ!Box

 

Guida su come configurare un FreePBX Trunk Pjsip su FRITZBox, per funzionare in parallelo ad un centralino FreePBX/Asterisk. Io ho una connessione dati e voce con Vodafone, ed il mio numero si registra correttamente attraverso il router FRITZ!Box, utilizzando dei dect. I router FRITZ!Box, hanno un centralino incorporato, che in maniera semplice registrano sia i telefoni analogici che i telefoni voip, ma se si volesse  aumentare di molto i telefoni, ed avere un centralino più strutturato, con un IVR per esempio, bisogna affidarsi al centralino Asterisk/FreePBX. Questa guida parte dal presupposto, che il FRITZ!Box ed il server PBX sono gia configurati e funzionanti.

1) Creare interno server FreePBX direttamente sul FRITZ!Box:

Menù Telefonia > Dispositivi di telefonia > Configurazione nuovo dispositivo, e poi seguire le immagini:

FreePBX Trunk Pjsip su FRITZ!BoxFreePBX Trunk Pjsip su FRITZ!BoxFreePBX Trunk Pjsip su FRITZ!BoxNotare che il nome utente è numerico e queste credenziali andranno inserite successivamente nel Trunk pjsip in FreePBX.

 

2) Creazione Trunk pjsip in FreePBX

Esempio delle immagini:

Trunk Name=FreePBX
Outbound caller ID=numero telefonico
CID Options=Force Trunk CID
Maximum Channels=2

 

Trunk Pjsip Settings:

username=15051948
password=PasswordDifficile
server=192.168.1.1 (ip FRITZ!Box)
porta=5060 udp

 

Trunk Pjsip Settings Advanced:

Contact User=15051948
From User=15051948

 

Trunk Codecs:

 

In conclusione, con questo tipo di configurazione abbiamo integrato il nostro centralino Asterisk/FreePBX, con la robustezza di un router FRITZ!Box.

FreePBX Trunk Pjsip su FRITZ!Box

enjoy 😉

 

Asterisk 18 FreePBX 16 su Raspberry Pi 4 e Raspberry Pi OS Bullseye

 

Asterisk 18 FreePBX 16 su Raspberry Pi 4 e Raspberry Pi OS BullseyeAsterisk 18 FreePbx 16 su Raspberry Pi 4 e Raspberry Pi OS Bullseye

 

In questa guida aggiornata, scriverò di una installazione su single board Raspberri py 4 con Raspberry Pi OS Bullseye 11, di Asterisk 18 e Freepbx 16. FreePBX 16 funziona bene, e la novità principale è il supporto a php7.4. Esiste anche una versione già pronta, raspbx, ma io preferisco installare tutto da me, poichè il sistema risulta molto più fluido. I passaggi successivi saranno eseguiti come utente root, su una nuova installazione di Raspberry Pi OS Bullseye lite. L’installazione prenderà circa 90 minuti, e prevede che il sistema sia già stato installato e che si abbia un accesso ssh.

1) Aggiornare il sistema

$ sudo su
# apt update
# apt upgrade -y
# reboot
2) Scaricare le dipendenze ed i servizi necessari
# apt install -y wget bison flex php php-pear php-cgi php-common php-curl php-mbstring php-gd php-mysql php-php-gettext php-bcmath php-zip php-xml php-imap php-json php-snmp php-fpm libapache2-mod-php git curl libnewt-dev libssl-dev libncurses5-dev subversion libsqlite3-dev build-essential libedit-dev libjansson-dev libxml2-dev uuid-dev dh-make libssl-dev sox mariadb-client-10.5 mariadb-server-10.5

3) Installare nodejs

# curl -sL https://deb.nodesource.com/setup_18.x | sudo -E bash -
# apt install -y nodejs

4) Reboot server

# reboot

5) Scaricare Asterisk 18 e FreePBX 16

$ sudo su
# cd /usr/src
# wget https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-18-current.tar.gz
# wget https://mirror.freepbx.org/modules/packages/freepbx/freepbx-16.0-latest.tgz

6) Installare Asterisk 18

# tar xvfz asterisk-18-current.tar.gz
# rm -rf asterisk-18-current.tar.gz
# cd asterisk-18.*
# contrib/scripts/get_mp3_source.sh
# ./contrib/scripts/install_prereq install
# ./configure --with-jansson-bundled
# make menuselect

 

inserire il prefisso internazionale, nel nostro caso 39:

Asterisk 14 Freepbx 14 su Debian Stretch 9.1abilitare format_mp3:

abilitare “macro” in make menuselect > Application > app_macro:

Asterisk 18 FreePBX 16 su Raspberry Pi 4 e Raspberry Pi OS Bullseye

quindi:

# make -j8
# make install
# make samples
# make config

7) Creazione utente Asterisk e permessi

# groupadd asterisk
# useradd -r -d /var/lib/asterisk -g asterisk asterisk
# usermod -aG audio,dialout asterisk
# chown -R asterisk.asterisk /etc/asterisk
# chown -R asterisk.asterisk /var/{lib,log,run,spool}/asterisk
# chown -R asterisk.asterisk /usr/lib/asterisk
# sed -i 's/#AST_USER="asterisk"/AST_USER="asterisk"/g' /etc/default/asterisk
# sed -i 's/#AST_GROUP="asterisk"/AST_GROUP="asterisk"/g' /etc/default/asterisk
# systemctl restart asterisk
# /lib/systemd/systemd-sysv-install enable asterisk

verificare che asterisk funzioni correttamente:

# asterisk -rvvv

8) Configurazione Apache2

# cp /etc/apache2/apache2.conf /etc/apache2/apache2.conf_orig
# sed -i 's/AllowOverride None/AllowOverride All/' /etc/apache2/apache2.conf
# sed -i 's/^\(User\|Group\).*/\1 asterisk/' /etc/apache2/apache2.conf
# mv /var/www/html /var/www/html.bak
# a2enmod rewrite
# systemctl restart apache2

9) Installare FreePBX 16

# cd /usr/src/
# tar xvfz freepbx-16.0-latest.tgz
# rm -rf freepbx-16.0-latest.tgz
# cd freepbx
# ./install -n
# fwconsole chown
# fwconsole ma refreshsignatures
# fwconsole ma installall
# fwconsole reload
# fwconsole restart

In conclusione, se tutto è andato bene il server Asterisk è raggiungibile all’indirizzo http://ip_raspberry. La prima cosa da fare è quella di scegliere nome utente, password e mail, per accedere al pannello di amministrazione. Andare poi nel menu Admin-Module Admin e scaricare ed aggiornare i moduli rimanenti.

 

enjoy 😉

 

(Solved) Certbot error could not bind to IPv4

(Solved) Certbot error could not bind to IPv4
(Solved) Certbot error could not bind to IPv4

 

Su un mio server ho avuto un problema con il rinnovo del certificato Let’s Encrypt, tramite certbot. L’errore è il seguente:

Attempting to renew cert (mio_server.com) from /etc/letsencrypt/renewal/mio_server.com.conf produced an unexpected error: Problem binding to port 80: Could not bind to IPv4 or IPv6.. Skipping.
All renewal attempts failed. The following certs could not be renewed:
/etc/letsencrypt/live/mio_server.com/fullchain.pem (failure)

come si evince da questo tipo di errore, il tutto mi ha portato a verificare le regole di nat, non trovando però nulla di anomalo. Per aggiornare manualmente Lets’Encrypt, i passi che mi ricordo di avere sempre fatto, sono i seguenti:

# systemctl stop nginx
# certbot renew --dry-run #(come test)

quindi:

# certbot renew

ma l’errore era sempre lo stesso, quindi sono andato a verificare quale programma andava ad utilizzare la porta 80:

# sudo ss -tlpn | grep -E ":(80|443)"

e con mia sorpresa ho notato che nginx, che io avevo stoppato, la utilizzava ancora:

LISTEN 0 511 0.0.0.0:8080 0.0.0.0:* users:(("nginx",pid=21906,fd=12),("nginx",pid=21905,fd=12),("nginx",pid=21904,fd=12),("nginx",pid=21903,fd=12),("nginx",pid=21902,fd=12))
LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=21906,fd=8),("nginx",pid=21905,fd=8),("nginx",pid=21904,fd=8),("nginx",pid=21903,fd=8),("nginx",pid=21902,fd=8))
LISTEN 0 511 [::]:8001 [::]:* users:(("nginx",pid=21906,fd=9),("nginx",pid=21905,fd=9),("nginx",pid=21904,fd=9),("nginx",pid=21903,fd=9),("nginx",pid=21902,fd=9))

non so per quale motivo e nemmeno ho indagato a fondo, ma dopo aver stoppato nginx, se davo 2 comandi “certbot” di seguito, automaticamente nginx ripartiva automaticamente. Quindi per risolvere basta:

# systemctl stop nginx
# certbot renew
# systemctl start nginx
(Solved) Certbot error could not bind to IPv4

enjoy 😉

 

Fast-cli speedtest da terminale Debian 10

 

Fast-cli speedtest da terminale Debian 10

Fast-cli speedtest da terminale Debian 10

Il sito Fast.com per misurare la connessione internet, è un servizo a cui provvede Netflix per far verificare se si è in grado di visualizzare i loro contenuti. Anche in questo caso, con fast-cli, come per speedtest-cli, la misurazione si può fare anche da terminale. Quello che serve è una installazione aggiornata di nodejs, poichè la versione nei repository, la v10.24.0, non va bene.

Rimozione ed Installazione nodejs:

$ sudo apt purge npm
$ sudo apt-get install curl software-properties-common
$ curl -sL https://deb.nodesource.com/setup_15.x | sudo bash -
$ sudo apt-get install nodejs

Installazione fast-cli:

$ sudo npm install --global fast-cli

Utilizzo:

$ fast -u
Fast-cli speedtest da terminale Debian 10

enjoy 😉

Raspberry Pi backup veloce sd card

 

Raspberry Pi backup veloce sd card

Raspberry Pi backup veloce sd card

 

Guida su come ottenere un backup veloce e funzionante del proprio sistema. Per chi utilizza un Raspberry Pi, con tutto il sistema installato su sd card, è buona regola avere un backup completo, per poter ovviare velocemente ad una ipotetica perdita/rottura dei dati sulla sd card. A difesa delle sd card, io posso tetimoniare, essendo possessore di tanti Raspberry Pi, fin da  maggio 2012, che se si acquistano le migliori, difficilmente si rompono. Io per i vari utilizzi, ho speso di più per la sd card che per il Raspberry Pi. I metodi di backup a cui io mi riferisco utilizzano i comandi dd e rsync.  Il classico metodo più utilizzato e sicuro è il seguente:

 

Metodo 1)

Estrarre dal Raspberry Pi la sd card di origine e creare un file img

sudo dd bs=4M if=/dev/sdx of=PiOS.img

Ripristinare su sd card di backup:

sudo dd bs=4M if=PiOS.img of=/dev/sdx

Con il metodo sopra i tempi sono più lunghi, poichè dd, clona tutto. Esistono altri metodi simili, aggiungendo la compressione, ma a me non soddisfano.

 

Metodo 2)

Questo metodo è quello che utilizzo io, e può essere eseguito sia a caldo, sia estraendo la sd card clonandola. Per questo metodo si utilizza dd, solo per quanto riguarda le tabelle delle partizioni, e la partizione di boot, tutto il resto lo farà rsync copiando velocemente il contenuto della rootfs.

Inserire su pc la  sd card da cui effettuare il backup e raccogliere informazioni:

sudo fdisk -l

 

Raspberry Pi backup veloce sd card

 

 

esistono 2 partizioni, nel mio caso, /dev/sdc1 di boot ed /dev/sdc2 rootfs. Bisogna prendere nota delle 2 voci start, 8192 e 534528, cosicchè da creare una identica tabella delle partizioni, contenendo tutti i files di boot:

sudo dd bs=4k count=$((8192/8)) if=/dev/sdc | gzip >boot-img.gz
sudo dd bs=4k count=$((534528/8)) if=/dev/sdc | gzip >rootfs-img.gz

Adesso dobbiamo copiare in una cartella il contenuto di /dev/sdc2 utilizzando rsync:

sudo apt install rsync
sudo mkdir /mnt/{dati,rootfs}
sudo mount /dev/sdc2 /mnt/dati/
sudo rsync -aHAXSP /mnt/dati/ /mnt/rootfs/
sudo umount /dev/sdc2

Basta. Finito. Tempo totale meno di 3 minuti:

 

Raspberry Pi backup veloce sd card

 

Inserire la sd card di backup:

Azzerare tabella partizioni:

sudo dd count=1 bs=512 if=/dev/zero of=/dev/sdc

creazione della tabella delle partizione come da sd card origine:

sudo zcat boot-img.gz | sudo dd bs=4k iflag=fullblock of=/dev/sdc
sudo partprobe /dev/sdc
sudo zcat rootfs-img.gz | sudo dd bs=4k iflag=fullblock of=/dev/sdc
sudo partprobe /dev/sdc

formattare la seconda partizione in ext4:

sudo mkfs.ext4 -L rootfs /dev/sdc2

mount e copia :

sudo mount /dev/sdc2 /mnt/dati/
sudo rsync -aHAXSP /mnt/rootfs/ /mnt/dati/

umount ed attendere, può volerci qualche minuto:

sudo umount /dev/sdc2

 

Tempo totale 15 minuti circa. A questo punto se tutto è andato bene, abbiamo una copia perfetta della sd card di origine. Questo metodo funziona anche in presenza di database.

Raspberry Pi backup veloce sd card

 

enjoy 😉

 

Raspberry rimuovere utente Pi

 

Raspberry rimuovere utente Pi
Raspberry rimuovere utente Pi

Per chi utilizza il Raspberry Pi, e di conseguenza Raspberry Pi OS ex Raspbian e non solo, si deve loggare con username “pi” e password “raspberry“. Chiaramente la prima cosa che si fa è quella di cambiare la password di default, ma ancora meglio sarebbe creare un nuovo user ed eliminare quello di default. Questo è quello che io faccio al primo accesso ssh:

1) Login come user pi e creazione nuovo utente “edmond

$ sudo adduser edmond

2) aggiungere utente al gruppo visudo

$ sudo visudo

ed aggiungere

edmond ALL=(ALL:ALL) ALL

come sotto:

# User privilege specification
root ALL=(ALL:ALL) ALL
edmond ALL=(ALL:ALL) ALL

3) aggiungere il nuovo utente al gruppo sudo

$ sudo usermod -a -G sudo edmond

4) aggiungere il nuovo utente agli stessi gruppi dell’utente “pi”

$ sudo usermod -a -G adm,dialout,cdrom,sudo,audio,plugdev,games,users,input,netdev,ssh,gpio,i2c,spi edmond

5) logout ed accesso col nuovo utente:

$ sudo deluser pi
$ sudo rm -rf /home/pi/

da questo momento si può utilizzare l’utility:

$ sudo raspi-config
Raspberry rimuovere utente Pi

 

enjoy 😉