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:
- https://raiolanetworks.es/blog/bloquear-ataques-dos-con-fail2ban-en-linux/
- https://geekland.eu/como-consultar-logs-de-fail2ban/
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