Instal·lar LAMP a Debian 9

Instal·lar serveis

Apache:

# apt install apache2 apache2-mod-php7.0 ssl-cert

PHP:

# apt install php7.0 libapache2-mod-php7.0 php7.0-mysql php7.0-gd php7.0-opcache

MariaDB:

# apt install mariadb-client mariadb-server

Phpmyadmin:

# apt install phpmyadmin

Configuracions

Assegurem la instal·lació de MariaDB:

# mysql_secure_installation

És ben lògic què cal respondre a les preguntes.

Donem accés total a l’usuari phpmyadmin:

# mysql -u root -p
> GRANT ALL PRIVILEGES ON *.* TO 'phpmyadmin'@'localhost' WITH GRANT OPTION;
> FLUSH PRIVILEGES;

I fet.

Configuració d’etckeeper amb push a Gitlab

etckeeper és un conjunt d’eines que et permeten mantenir un repositori git de /etc.

Instal·lació d’etckeeper

Instal·lem etckeeper:

$ sudo apt install etckeeper

Editem el fitxer de configuració:

$ sudo nano /etc/etckeeper/etckeeper.conf

Aquí ens hem d’assegurar que el VCS sigui git. I que el paràmetre PUSH_REMOTE sigui “origin”.

Generalment s’inicialitza en instal·lar, però per si de cas:

$ cd /etc
$ sudo etckeeper init

Amb això es crea el directori /etc/.git i el fitxer /etc/.gitignore.

Configuració de la clau SSH

Generem una clau:

Seguim el tutorial de Gitlab per generar i afegir claus: https://gitlab.com/help/ssh/README

Editem ~/.ssh/config:

Host gitlab.com
    HostName gitlab.com
    User git
    IdentityFile /home/usuari/keys/git.key

Per afegir la clau al ssh-agent i que ens duri tota la sessió editem ~/.bash_profile:

if [ -z "$SSH_AUTH_SOCK" ] ; then
  eval `ssh-agent -s`
  ssh-add /home/usuari/keys/git.key
fi

Si ens segueix fent mandra posar-la cada cop que iniciem podem crear una clau sense passphrase. Personalment prefereixo no utilitzar el .bash_profile i configurar /root/.ssh/config (només entorns amb un administrador).

Commit i push

Afegim el repositori remot:

$ sudo git remote add origin git@gitlab.com:REPO

Fem un commit:

$ sudo etckeeper commit "Initial commit."

Fem push:

$ sudo -E git push -u origin master # Utilitzo -E per tal de mantenir les variables d’entorn.

A partir d’ara l’etckeeper farà els push automàticament 1 cop al dia i cada cop que es modifiquin paquets.
Si volem fer-ho manualment:

$ sudo -E etckeeper commit “Comentari”

 

Instal·lar i configurar logwatch

El logwatch és una eina que permet analitzar els logs i enviar una còpia més simple a l’administrador.

Instal·lem el paquet:

# apt install logwatch

Per configurar-lo editem /usr/share/logwatch/default.conf/logwatch.conf:

MailTo = correu@exemple.com
MailFrom = logwatch@exemple.com
Range = yesterday
Detail = Med

Per defecte tots els serveis venen activats:

Service = All

Si en volem només alguns de concrets hem de comentar aquesta línia i fer una llista:

Service = http
Service = sshd2
Service = sudo

Si volem desactivar els informes diaris descomentem;

# DailyReport = No

I si volem executar-lo manualment:

$ logwatch --detail Med --mailto correu@exemple.com --service sudo --range today

Instal·lació i configuració d’un servidor FTPS

Com configurar un servidor FTPS amb vsftpd a Debian.

Els certificats que s’utilitzen són verificats per Let’s Encrypt (veure entrada).

Recomanacions prèvies:

Instal·lem els paquets:

$ sudo apt-get install vsftpd openssl

Editem el fitxer de configuració:

$ sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak
$ sudo nano /etc/vsftpd.conf

En el meu cas queda així:

listen=NO
listen_ipv6=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
ftpd_banner=It's bigger on the inside!
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
allow_writeable_chroot=YES
user_config_dir=/etc/vsftpd_user_conf
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd

Amb aquesta configuració tenim que tots els usuaris queden fixats al seu home, excepte els que posem al fitxer /etc/vsftpd.chroot_list.
La línia user_config_dir=/etc/vsftpd_user_conf ens serveix per tenir configuracions especifiques per cada usuari, en aquest cas el local_root.

Afegim usuaris al vsftpd.chroot_list (un usuari per línia):

$ sudo nano /etc/vsftpd.chroot_list

Afegim configuracions personals d’usuari:

$ sudo mkdir /etc/vsftpd_user_conf
$ cd /etc/vsftpd_user_conf
$ sudo nano <usuari>

Hi posem la línia:

local_root=<directori>

Habilitem l’usuari root:
No és una opció recomanable, però es pot fer. Editem el següent fitxer i comentem la línia root.

$ sudo nano /etc/ftpusers

Reiniciem el servei:

$ sudo /etc/init.d/vsftpd restart

Configuració del TLS

Editem el fitxer de configuració:

$ sudo nano /etc/vsftpd.conf

Afegim:

# Turn on SSL
ssl_enable=YES

# Allow anonymous SSL connections
allow_anon_ssl=NO

# All non-anonymous logins are forced to use a secure SSL connection in order to
# send and receive data on data connections.
force_local_data_ssl=YES

# All non-anonymous logins are forced to use a secure SSL connection in order to send the password.
force_local_logins_ssl=YES

# Permit TLS v1 protocol connections. TLS v1 connections are preferred
ssl_tlsv1=YES

# Permit SSL v2 protocol connections. TLS v1 connections are preferred
ssl_sslv2=NO

# Permit SSL v3 protocol connections. TLS v1 connections are preferred
ssl_sslv3=NO

# Disable SSL session reuse (required by WinSCP)
require_ssl_reuse=NO

# Select which SSL ciphers vsftpd will allow for encrypted SSL connections (required by FileZilla)
ssl_ciphers=HIGH

# This option specifies the location of the RSA certificate to use for SSL
# encrypted connections.
rsa_cert_file=/etc/letsencrypt/live/aniolmarti.cat/fullchain.pem
rsa_private_key_file=/etc/letsencrypt/live/aniolmarti.cat/privkey.pem

Reiniciem el servei:

$ sudo /etc/init.d/vsftpd restart

Configuració del mode passiu

Editem el fitxer de configuració:

$ sudo nano /etc/vsftpd.conf

Afegim les línies:

pasv_enable=YES
pasv_max_port=10100
pasv_min_port=10090

Reiniciem el servei:

$ sudo /etc/init.d/vsftpd restart

Fitxer final

# Basic configuration
listen=NO
listen_ipv6=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
ftpd_banner=It's bigger on the inside!
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
allow_writeable_chroot=YES
user_config_dir=/etc/vsftpd_user_conf
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd

# Turn on SSL
ssl_enable=YES

# Allow anonymous SSL connections
allow_anon_ssl=NO

# All non-anonymous logins are forced to use a secure SSL connection in order to
# send and receive data on data connections.
force_local_data_ssl=YES

# All non-anonymous logins are forced to use a secure SSL connection in order to send the password.
force_local_logins_ssl=YES

# Permit TLS v1 protocol connections. TLS v1 connections are preferred
ssl_tlsv1=YES

# Permit SSL v2 protocol connections. TLS v1 connections are preferred
ssl_sslv2=NO

# permit SSL v3 protocol connections. TLS v1 connections are preferred
ssl_sslv3=NO

# Disable SSL session reuse (required by WinSCP)
require_ssl_reuse=NO

# Select which SSL ciphers vsftpd will allow for encrypted SSL connections (required by FileZilla)
ssl_ciphers=HIGH

# This option specifies the location of the RSA certificate to use for SSL
# encrypted connections.
rsa_cert_file=/etc/letsencrypt/live/aniolmarti.cat/fullchain.pem
rsa_private_key_file=/etc/letsencrypt/live/aniolmarti.cat/privkey.pem

Configurar client Filezilla

Tot aquest procés es pot fer executant aquest script que tinc al Github: https://github.com/xaldiks/debian-autosetup

Millorar seguretat servidor

Utilitzar claus SSH

En lloc d’utilitzar la configuració per defecte és recomanable deshabilitar l’accés de l’usuari root i utilitzar claus per accedir, en lloc de contrasenyes. Podeu veure com fer aquests canvis i alguns altres en aquesta entrada.

Bloquejar l’accés amb un tallafocs

A part de limitar l’accés SSH també és molt recomanable permetre només l’accés als ports que s’utilitzen, i bloquejar els altres. A Linux el tallafocs més conegut i utilitzat és iptables, podeu veure com realitzar una configuració molt bàsica en aquesta entrada.

Implementar un sistema IDS

Un IDS, de l’anglès intrusion detection system, és una forma de saber si es produeixen accessos no autoritzats a un servidor. Un exemple és Tripwire, i podeu veure com configurar-lo en aquesta entrada.

Instal·lar logwatch

El logwatch és una eina que permet analitzar els logs i enviar una còpia més simple a l’administrador. Podeu veure com instal·lar logwatch en aquesta entrada.

Recomanacions generals

  • Vigilar amb el que es baixa de la xarxa.
  • Mantenir el sistema actualitzat.
  • Utilitzar protocols segurs com FTPS o HTTPS, i no les seves versions sense SSL.