Instal·lació de Dokku en VPS Debian 13

debian13
Table of Contents

Dokku converteix un servidor Linux en una espècie de plataforma per desplegar aplicacions, similar als serveis comercials com Heroku, però sense costos recurrents ni dependència de tercers.

Preparar servidor VPS Debian 13

Post instal·lació del servidor Linux Debian 13, i configuració de seguretat.

$ fastfetch
        _,met$$$$$gg.          debian@vps-58a7ea55
     ,g$$$$$$$$$$$$$$$P.       -------------------
   ,g$$P""       """Y$$.".     OS: Debian GNU/Linux 13 (trixie) x86_64
  ,$$P'              `$$$.     Host: OpenStack Nova (19.3.2)
',$$P       ,ggs.     `$$b:    Kernel: Linux 6.12.57+deb13-cloud-amd64
`d$$'     ,$P"'   .    $$$     Uptime: 55 mins
 $$P      d$'     ,    $$P     Packages: 417 (dpkg)
 $$:      $$.   -    ,d$$'     Shell: bash 5.2.37
 $$;      Y$b._   _,d$P'       Terminal: /dev/pts/1
 Y$$.    `.`"Y$$$$P"'          CPU: 4 x Intel Core (Haswell, no TSX) (4) @ 2.39 GHz
 `$$b      "-.__               GPU: Cirrus Logic GD 5446
  `Y$$b                        Memory: 409.91 MiB / 7.58 GiB (5%)
   `Y$$.                       Swap: Disabled
     `$$b.                     Disk (/): 1.59 GiB / 73.62 GiB (2%) - ext4
       `Y$$b.                  Local IP (ens3): **.**.***.*/32
         `"Y$b._               Locale: es_ES.UTF-8
             `""""

Actualitzar

sudo apt update && sudo apt upgrade

Instal·lar locales

sudo dpkg-reconfigure locales
sudo apt-get install locales-all

rsyslog

sudo apt-get install --reinstall rsyslog

ssh

Canvi de port

sudo vim /etc/ssh/sshd_config

- # Port 22
+ Port 3333 # El que vulguis en realitat.

Reiniciem servei:

sudo systemctl restart sshd

Ara per entrar de nou haurem d'especificar el port.

ssh -p port user@server

Fins i tot afegir-lo al ~/.ssh/config per no haver d'especificar-lo tot el
moment.

Host server
    IdentityFile ~/.ssh/id_rsa
    User ubuntu
    Hostname server.com
    Port 1111

Clau ssh

Copiar clau pública al servidor per poder entrar sense contrasenya.

ssh-copy-id -i ~/.ssh/LLAVE USUARI@SERVIDOR

sshd_config

Configuració més que recomanada:

Si activem aquestes regles tenir en compte que heu de tenir configurat
prèviament la clau ssh al vostre ordinador i afegida al servidor.

PermitRootLogin no        # No es permet accés a root des de ssh.
AllowUsers USER1 USER2    # Llista d'usuaris que sí poden entrar.
PasswordAuthentication no # Només permetem entrar amb clau ssh.

Actualitzacions de seguretat automàtiques

sudo dpkg-reconfigure --priority=low unattended-upgrades

Tallafocs

sudo apt install ufw

sudo ufw allow http
sudo ufw allow https
sudo ufw allow [SSH PORT]
sudo ufw disable && sudo ufw enable

Status

sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
80/tcp                     ALLOW       Anywhere
443                        ALLOW       Anywhere
22/tcp                     ALLOW       Anywhere
80/tcp (v6)                ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)
22/tcp (v6)                ALLOW       Anywhere (v6)

Veure regles del tallafocs:

sudo iptables -L -n --line-numbers

Veure IPs bloquejades:

sudo iptables -L -n --line-numbers | grep REJECT

Servidor de correu

sudo apt install postfix

Seleccionem "Internet site"

Configuració de postfix

Configurem servidor de correu per poder rebre correus d'avís.

/etc/postfix/main.cf

Modifiquem configuració perquè no accepti correu de l'exterior.

inet_interfaces = loopback-only

/etc/aliases

mailer-daemon: postmaster
postmaster: root
root: EL_TEU_EMAIL
logcheck: root
nobody: root
hostmaster: root
usenet: root
news: root
webmaster: root
www: root
ftp: root
abuse: root
noc: root
security: root

Activem els nous àlies i reiniciem servidor postfix.

sudo newaliases
sudo systemctl restart postfix

Enviar correu.

sudo apt-get install mpack
echo "Test" > /tmp/test.txt
mpack -s 'test' /tmp/test.txt EL_TEU_EMAIL

logcheck

sudo apt install logcheck

Configuració de logcheck

sudo vim /etc/logcheck/logcheck.conf

Modifiquem:

SENDMAILTO="EL_TEU_EMAIL"
MAILASATTACH=1

Editarem el fitxer /etc/logcheck/ignore.d.server/custom

Tot i que es pot posar el nom que es vulgui.

.*.from\ 251.red-79-157-159.dynamicip.rima-tde.net*
.*Synchronized\ to\ time\ server*
.*.\[UFW\ BLOCK\]*
.*filtering\ via\ arp/ip/ip6tables\ is\ no\ longer\ available*
.*Initializing\ XFRM\ netlink\ socket*
.*Netfilter\ messages\ via\ NETLINK*
.*ctnetlink\ v0.93:\ registering\ with\ nfnetlink.*
.*systemd-udevd*
.*networkd-dispatcher*
.*systemd-networkd*
.*IPv6:*
.*Link\ UP*
.*entered\ promiscuous\ mode*
.*entered\ blocking\ state*
.*can\ be\ used\ to\ set\ a\ preferred\ IP\ address*
.*Network\ configuration\ changed*
.*docker0*
.*eth0*
.*snapd*
.*containerd*
.*ovpn-server.*peer\ info*
.*ovpn-server.*VERIFY\ OK*
.*ovpn-server.*Initial\ packet*
.*ovpn-server.*Connection\ Initiated*
.*ovpn-server.*Control\ Channel*

Provem la sortida:

sudo -u logcheck logcheck -o -t

Referències:

http://somebooks.es/recibir-informes-sobre-sucesos-de-ubuntu-server-18-04-lts-con-logcheck/

fail2ban

Evitar accessos no autoritzats al servidor.

sudo apt-get install fail2ban

Copiem configuració per defecte a fitxer personalitzat.

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

Editar configuració:

sudo vim /etc/fail2ban/jail.local

Podem afegir una llista d'IPs perquè siguin ignorades:

ignoreip = 127.0.0.1/8 ::1

Afegim regles per als wordpress:

[ssh]
enabled  = true
port     = ssh
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 3
bantime  = 1h

[wordpress]
enabled  = true
filter   = wordpress
logpath  = /var/log/nginx/*.log
port     = 80,443
bantime  = 1h

Creem fitxer /etc/fail2ban/filter.d/wordpress.conf i afegim:

# Fail2Ban filter for WordPress
[Definition]
failregex =  - - \[(\d{2})/\w{3}/\d{4}:\1:\1:\1 -\d{4}\] "POST /wp-login.php HTTP/1.1" 200
ignoreregex =

Reiniciem:

sudo systemctl restart fail2ban

Veure estat:

$ sudo fail2ban-client status

Status
|- Number of jail:  3
`- Jail list:  ssh, sshd, wordpress

$ sudo fail2ban-client status ssh
Status for the jail: ssh
|- Filter
|  |- Currently failed: 3
|  |- Total failed: 11
|  `- File list:   /var/log/auth.log
`- Actions
   |- Currently banned: 5
   |- Total banned: 6
   `- Banned IP list:  104.248.176.46 106.12.125.140 163.172.166.223 37.187.181.182 51.68.89.100

Des de systemd:

sudo systemctl status fail2ban

Consultar logs de fail2ban

Nombre de vegades que han estat bloquejades les IPs:

zgrep -h "Ban " /var/log/fail2ban.log* | awk '{print $NF}' | sort | uniq -c

Referències:

Varios

Lynis

Lynis ens genera un informe molt complet sobre l'estat del nostre servidor i
ens dona suggerències.

sudo apt-get install lynis

sudo lynis audit system

chkrootkit

Permet localitzar rootkits.

sudo apt install chkrootkit

sudo chkrootkit

Clamav

sudo apt install clamav clamav-daemon clamav-freshclam clamdscan

Actualitzar base de dades de virus.

sudo freshclam

Evitar que arranqui a l'inici.

sudo systemctl disable clamav-freshclam.service

Scripts

He realitzat uns petits scripts per tenir una visió de l'estat del servidor de forma ràpida.

Instal·lar

git clone https://github.com/edumag/magscripts

Els scripts estan separats per temes així que és fàcil eliminar els que no t'interessen o afegir-ne d'altres.

Instal·lar dependències:

sudo apt-get install chkrootkit clamscan docker lynis

Executar

cd magscripts/servidor
sudo ./magReportServer

Enviament de l'informe.

sudo ./magReportServer > /tmp/report.txt && mpack -s report /tmp/report.txt  EL_TEU_EMAIL

Dokku

Instal·lació

Seguint els passos de la documentació oficial.

Aquest procés variarà segons la versió actual.

# for debian systems, installs Dokku via apt-get
wget -NP . https://dokku.com/install/v0.37.3/bootstrap.sh
sudo DOKKU_TAG=v0.37.3 bash bootstrap.sh

Afegim la clau de l'usuari debian a la clau d'administrador de dokku.

cat ~/.ssh/authorized_keys | sudo dokku ssh-keys:add admin

Pots usar qualsevol domini al qual ja tinguis accés, aquest domini ha de tenir un registre A o CNAME que apunti a la IP del teu servidor.

dokku domains:set-global EL_TEU_DOMINI
Leave a Reply

Your email address will not be published. Required fields are marked *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

LesOlivex