Después de la instalación inicial:
1. Asegurar una contraseña fuerte para el usuario principal y para root
passwd root
2. Configurar el DNS: (/etc/resolv.conf)
nameserver 8.8.8.8
nameserver 8.8.4.4
3. Asegurar que root no puede hacer login via ssh (/etc/ssh/sshd_config):
PermitRootLogin = no
AllowUsers [myuser]
SyslogFacility AUTH
LogLevel INFO
4. Comprobar las reglas de la firewall (en mi caso utilizando iptables)
– desactivar uwf (sudo systemctl disable ufw)
– instalar iptables y iptables-persistant
– configurar reglas básicas (80, 22, 443)
Instalar Apache Web Server
apt install apache2
Asegurar unas configuraciones de seguridad (/etc/apache2/conf-enabled/security.conf). Las directrices de «Header» requieren que el modulo «Headers» este activo: «a2enmod headers»
ServerSignature Off
ServerTokens Prod
Header set X-Content-Type-Options: «nosniff»
Header set Strict-Transport-Security «max-age=63072000»
Header set X-Frame-Options: «sameorigin»
Header set X-XSS-Protection «1; mode=block»
Revisar los módulos activos:
apachectl -M | sort
Activate SSL module:
a2enmod ssl
Install certbot para generar el certificado:
apt-get install certbot
systemctl stop apache2
certbot certonly –standalone –rsa-key-size 4096 –agree-tos –preferred-challenges http -d [nombre_de_mi_domain]
Registrar el certificado en Apache en /etc/apache2/sites-enabled/default-ssl.conf
SSLEngine on
SSLProtocol -all +TLSv1.2 +TLSv1.3
SSLCertificateFile /etc/letsencrypt/live/[nombre_de_mi_domain]/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/[nombre_de_mi_domain]/privkey.pem
Asegurar la configuración del sitio en /etc/apache2/sites-enabled/000-default.conf
ServerAdmin xxxx
ServerName [nombre_de_mi_domain]
DocumentRoot xxxx
ErrorLog
CustomLog
Redirect
Comprobar el score de seguridad en https://observatory.mozilla.org
Preparar WebDAV
Crear el directorio del servidor:
mkdir /var/www/webdav
mkdir /var/www/DavLock
chown -R www-data:www-data /var/www/webdav
chown -R www-data:www-data /var/www/DavLock
Habilitar los módulos de apache para soportar DAV:
a2enmod dav
a2enmod dav_fs
a2enmod auth_digest
Preparar el metodo de autenticación, creando un fichero de contraseña para el servicio webdav y el usuario que decidamos (username):
htdigest -c /etc/apache2/users.password webdav [username]
chown www-data:www-data /etc/apache2/users.password
Adaptar la configuración (/etc/apache2/sites-enabled/default-ssl.conf)
DavLockDB /var/www/DavLock/DavLock
<Directory /var/www/webdav>
DAV On
AuthType Digest
AuthName «webdav»
AuthUserFile /etc/apache2/users.password
Require valid-user
</Directory>
Reiniciar el servicio de Apache:
systemctl restart apache2
Mounting y unmounting webdav en Ubuntu (es necesario tener los derechos!). Para mount se debe usar el usuario/contraseña de webdav
apt-get install davfs2
mkdir /home/thomas/webmount
mount -t davfs «https://tomspain72.ddns.net/webdav/» /home/thomas/webmount
fusermount -u /home/thomas/webmount
IPTables
Listar las reglas existentes con nº de línea:
iptables -L -v –line-numbers
Borrar una regla en una línea:
iptables -D [INPUT|…] [nº de regla]
Insertar una nueva regla:
iptables -I [INPUT|OUTPUT|….] [nº de línea]
ejemplo: iptables -I INPUT 9 -s 192.168.0.0/24-p tcp --dport 1714:1764 -j ACCEPT
Guardar / restaurar reglas:
iptables-save > /etc/iptables/rules.v4
iptables-save > /etc/iptables/rules.v6
Restaurar reglas guardadas:
iptables-restore < /etc/iptables/rules.v[]
Servicio de iptables:
systemctl [stop|start|restart|restart] iptables
Instalar Fail2ban
Guardar la configuración de iptables.
iptables-save > /etc/iptables/rules.v4
Instalar Fail2ban.
sudo apt update
sudo apt install fail2ban
Configurar el servicio, creando primero el fichero de configuración /etc/fail2ban/jail.local :
cp /etc/fail2ban/jail.{conf,local}
Configurar los servicios que debe vigilar fail2ban (/etc/fail2ban/jail.local):
sshd
apache
Install PHP
Además del paquete php
, necesitará php-mysql
, un módulo PHP que permite que este se comunique con bases de datos basadas en MySQL. También necesitará libapache2-mod-php
para habilitar Apache para gestionar archivos PHP. Los paquetes PHP básicos se instalarán automáticamente como dependencias.
Para instalar estos paquetes, ejecute lo siguiente:
apt install php libapache2-mod-php php-mysql
Configuraciones en (/etc/php/7.4/apache2/php.ini):
error_log = /var/log/php-scripts.log
extension=curl
extension=fileinfo
extension=mbstring
extension=exif
extension=mysqli
extension=openssl
extension=pdo_mysql
date.timezone = «Europe/Madrid»
[MySQLi]
mysqli.default_host = localhost
mysqli.default_pw = [xxx]
Install phpMyAdmin
apt install phpmyadmin php-mbstring php-zip php-gd php-json php-curl
Los ficheros de la aplicación terminan en:
/usr/share/phpmyadmin/
Crear el directorio temporal y el fichero de configuración, copiando la plantilla (/usr/share/phpmyadmin/):
mkdir /usr/share/phpmyadmin/tmp
chown root:www-data /usr/share/phpmyadmin/tmp
chmod 770 /usr/share/phpmyadmin/tmp
cp config.sample.inc.php config.sample.inc.php
vim config.sample.inc.php
Y editando los parámetros:
$cfg[‘blowfish_secret’] = [xxx]
$cfg[‘TempDir’] = ‘/usr/share/phpmyadmin/tmp’;
$cfg[‘DefaultLang’] = ‘en’;
Crear la seguridad de directorio en Apache, con el fichero y usuario:
mkdir /etc/apache2/passwordfiles
htpasswd -c /etc/apache2/passwordfiles/phpMyAdmin.password [nombre de usuario]
Configurar el directorio virtual (/etc/apache2/sites-enabled/default-ssl.conf):
Alias /phpmyadmin /usr/share/phpmyadmin/
<Directory /usr/share/phpmyadmin/>
AuthType Basic
AuthName «Restricted Content»
AuthUserFile /etc/apache2/passwordfiles/phpMyAdmin.password
Require valid-user
</Directory>
Y proteger los directorios del sistema de phpMyAdmin (/etc/apache2/sites-enabled/default-ssl.conf):
<Directory /usr/share/phpmyadmin/templates>
Require all denied
</Directory>
<Directory /usr/share/phpmyadmin/libraries>
Require all denied
</Directory>
<Directory /usr/share/phpmyadmin/setup/lib>
Require all denied
</Directory>
Instalar y configurar SAMBA
Instalar el paquete básico:
apt update
apt install samba
Crear un usuario de linux para gestionar el acceso a la carpeta compartida y asignarle una contraseña de samba (no es la misma que de linux):
adduser [sambauser]
smbpasswd -a [sambauser]
Crear el directorio donde deben ir los ficheros. En mi caso será un directorio para el servidor, con un usuario de samba para acceder desde Windows. Además hay que ajustar los derechos del directorio al usuario que hemos creado.
mkdir /var/samba/sambashare -p
chown sambauser:sambauser /var/samba/sambashare/ -R
chmod 770 /var/samba/sambashare -R
Ahora registrar el directorio en la configuración de samba (/etc/samba/smb.conf):
[sambashare]
comment = Samba on Ubuntu
path = /var/samba/sambashare
read only = no
browsable = yes
Además de alinear el grupo de trabajo al de la red de windows en el mismo fichero (/etc/samba/smb.conf):
workgroup = WORKGROUP
Añadir los puertos necesarios al firewall (iptables). En este ejemplo se incluyen a partir de la linea 5 de las reglas existentes de iptables y solo se da acceso a un origen de red interna ‘192.168.0.0/24‘:
sudo iptables -I INPUT 5 -s 192.168.0.0/24 -p udp -m udp –dport 137 -j ACCEPT
sudo iptables -I INPUT 5 -s 192.168.0.0/24 -p udp -m udp –dport 138 -j ACCEPT
sudo iptables -I INPUT 5 -s 192.168.0.0/24 -p tcp -m tcp –dport 139 -j ACCEPT
sudo iptables -I INPUT 5 -s 192.168.0.0/24 -p tcp -m tcp –dport 445 -j ACCEPT
iptables-save > /etc/iptables/rules.v4
systemctl restart iptables
Al final reiniciar el servicio:
systemctl restart smbd
Compartir un nuevo directorio
Editar la configuración de samba (/etc/samba/smb.conf), para registrar el nuevo directorio:
[sambashare]
comment = Samba on Ubuntu
path = /var/samba/sambashare
read only = no
browsable = yes
Hacer que aparezca Ubuntu en el Windows 10 Network Browsing
Descargar e instalar el paquete WSDD.
wget https://github.com/christgau/wsdd/archive/master.zip
unzip master.zip
mv wsdd-master/src/wsdd.py wsdd-master/src/wsdd
cp wsdd-master/src/wsdd /usr/bin
cp wsdd-master/etc/systemd/wsdd.service /etc/systemd/system
Abrir los puertos necesarios.
Adaptar la configuración del servicio:
vim /etc/systemd/system/wsdd.service
systemctl daemon-reload
systemctl start wsdd
service wsdd status
systemctl enable wsdd
sudo iptables -I INPUT 9 -s 192.168.0.0/24 -p udp –dport 3702 -j ACCEPT
sudo iptables -A OUTPUT -p udp –dport 3702 -j ACCEPT
sudo iptables -I INPUT 9 -s 192.168.0.0/24 -p tcp -m tcp –dport 5357 -j ACCEPT
Wake on LAN
Para configurar seguir los siguientes pasos:
- Activar la opción en el BIOS del ordenador
- Determinar la dirección MAC de la tarjeta de red que deba recibir el paquete WOL
- Activar la opción en el sistema operativo (windows y/o Linux)
- Abrir el puerto en el router y asegurar que el router transmite el paquete al PC en cuestión (en general puerto 9)
- Instalar el tool en Windows/Android/Linux que pueda enviar un paquete WOL al PC en cuestión
Printserver para compartir la impresora
Objetivo: compartir la impresora en la red domestica
Instalar CUPS y SAMBA,
apt-get install cups cups-pdf
apt-get install printer-driver-gutenprint
Abrir el puerto en el firewall para administrar CUPS (631) desde un explorador (en mi caso solo se permite desde la red local):
sudo iptables -I INPUT 9 -s 192.168.0.0/24 -p tcp -m tcp –dport 631 -j ACCEPT
Añadir el usuario (linux) para gestionar las impresoras al grupo «lpadmin», que es el grupo administrativo de CUPS (en mi caso el usuario de samba). Este usuario se utilizará para acceder a la página de administración de CUPS (http://192.168.0.114:631):
adduser [sambauser] lpadmin
Instalar PI-HOLE
Importante:
El servicio en ubuntu es «pihole-FTL«.
systemctl restart pihole-FTL
Es necesario instalar SQLITE y activar el módulo PHP de SQLITE3:
apt-get install php7.4-sqlite3
/etc/php/7.4/apache2/php.ini -> «extension=sqlite3»
Para cambiar la contraseña del admin de pi-hole:
El directorio www de pi-hole en Apache debe pertenecer a «www-data» y el usuario «pihole» al grupo «www-data»:
chown www-data:www-data pi_html/ -R
usermod -a -G pihole www-data
Asegurar que los puertos de DNS estén abiertos para el tráfico local:
sudo iptables -I INPUT 9 -s 192.168.0.0/24 -p udp -m udp –dport 53 -j ACCEPT
sudo iptables -I INPUT 9 -s 192.168.0.0/24 -p tcp -m tcp –dport 53 -j ACCEPT
Comprobar que no se use otro nameserver que el pi-hole local:
/etc/resolv.conf
Renovar Certificados (Apache y Tomcat)
Con sudo o con usuario root, primero parar Apache service y despues renovar mediante el cerbot:
systemctl stop apache2
certbot renew
systemctl start apache2
Ahora actualizar los certificados en Tomcats:
Asegurar que la configuración en el fichero «/etc/tomcat9/server.xml» es correcta:
<Connector port=»8443″ protocol=»org.apache.coyote.http11.Http11NioProtocol» maxThreads=»150″ SSLEnabled=»true» >
<SSLHostConfig>
<Certificate
certificateFile=»/etc/tomcat9/certs/cert.pem»
certificateKeyFile=»/etc/tomcat9/certs/privkey.pem»
certificateChainFile=»/etc/tomcat9/certs/chain.pem» />
</SSLHostConfig>
</Connector>
Despues copiar los ficheros de certicado de Let’s Encryp a la configuración de Tomcat y reiniciar el servicio.
rm /etc/tomcat9/certs/*
cd /etc/letsencrypt/live/thomaskoslowsky.com
cp {cert,chain,privkey}.pem /etc/tomcat9/certs
chown tomcat:tomcat /etc/tomcat9/certs/*
systemctl restart tomcat9