Configuración base - Alma Linux 9
Actualizar sistema
dnf -y update
Configurar firewall para el sistema
Dependiendo del uso del servidor, abrir puertos en firewalld.
Activar el servicio de firewall
systemctl enable --now firewalld
Configurar los puertos y servicios que se usarán
Los nombres de los servicios están basados en los definidos en /usr/lib/firewalld/services/. Si se desea agregar un servicio personalizado se puede agregar en la carpeta /etc/firewalld/services/.
#Puerto SSH alternativo
firewall-cmd --permanent --add-port=65501/tcp
# Acceso HTTP
firewall-cmd --permanent --add-service=http
# Acceso HTTPS
firewall-cmd --permanent --add-service=https
# mail
firewall-cmd --permanent --add-service=smtp
# smtp Submission over TLS [RFC8314]
firewall-cmd --permanent --add-service=smtps
# Submission [RFC4409]
firewall-cmd --permanent --add-service=smtp-submission
# IMAP over SSL
firewall-cmd --permanent --add-service=imaps
# POP-3 over SSL
firewall-cmd --permanent --add-service=pop3s
# Acceso OpenVPN
firewall-cmd --permanent --add-port=65501/udp
No es necesario agregar todos los puertos, solo los necesario para los servicios que correrán en el servidor.
Activar el servicio firewalld y ecargar las configuraciones
firewall-cmd --reload
Verificar los servicios y puertos configurados
firewall-cmd --list-all
Instalar los repositorios EPEL y REMI
Estos repositorios cuentan con paquetes no incluidos en la distribución base o paquetes con versiones más recientes necesarias para algunas de las aplicaciones que se puedan instalar. No son mandatorios.
dnf -y install epel-release
dnf update
Agregar un usuario administrador
useradd -m -G wheel mingetch
passwd mingetch
Cargar llaves ssh para el usuario
mkdir /home/mingetch/.ssh
vi /home/mingetch/.ssh/authorized_keys
chown mingetch:mingetch -R /home/mingetch/.ssh
chmod 700 /home/mingetch/.ssh
chmod 600 /home/mingetch/.ssh/authorized_keys
Reforzar configuraciones de sshd
cp /etc/ssh/sshd_config{,.orig}
for i in \
Port \
LogLevel \
PermitRootLogin \
MaxAuthTries \
PubkeyAuthentication \
AuthorizedKeysFile \
PasswordAuthentication \
PermitEmptyPasswords \
ChallengeResponseAuthentication \
X11Forwarding\
do
sed -i "s@\#$i@$i@g" /etc/ssh/sshd_config
done
sed -i "s@^\(Port\).*@\1 65501@g" /etc/ssh/sshd_config
sed -i "s@^\(LogLevel\).*@\1 VERBOSE@g" /etc/ssh/sshd_config
sed -i "s@^\(PermitRootLogin\).*@\1 prohibit-password@g" /etc/ssh/sshd_config
sed -i "s@^\(MaxAuthTries\).*@\1 4@g" /etc/ssh/sshd_config
sed -i "s@^\(PubkeyAuthentication\).*@\1 yes@g" /etc/ssh/sshd_config
sed -i "s@^\(AuthorizedKeysFile\).*@\1 .ssh/authorized_keys@g" /etc/ssh/sshd_config
sed -i "s@^\(PasswordAuthentication\).*@\1 no@g" /etc/ssh/sshd_config
sed -i "s@^\(PermitEmptyPasswords\).*@\1 no@g" /etc/ssh/sshd_config
sed -i "s@^\(ChallengeResponseAuthentication\).*@\1 no@g" /etc/ssh/sshd_config
sed -i "s@^\(X11Forwarding\).*@\1 no@g" /etc/ssh/sshd_config
echo -e "\n\n"; for i in Port LogLevel PermitRootLogin MaxAuthTries PubkeyAuthentication AuthorizedKeysFile PasswordAuthentication PermitEmptyPasswords ChallengeResponseAuthentication X11Forwarding;do count=$(grep -c ^$i /etc/ssh/sshd_config); [[ $count -gt 1 ]] && echo "El parametro "${i}" aparece mas de 1 vez en el archivo de configuracion sshd.";done; echo
Permitir el acceso mediante el nuevo puerto en SeLinux
semanage port -a -t ssh_port_t -p tcp 65501
semanage port -l | grep ssh
Comprobar la configuració de SSH y reiniciar
sshd -t &&\
echo -e "\x1b[32;1mSSH Config Ok \x1b[0m Reinicia do ssh..." &&\
systemctl restart sshd
systemctl status sshd
Verificar el acceso mediante el nuevo puerto
Es importante verificar el acceso mediante el nuevo puerto SSH desde una consola diferente. Si cierra la consola actual y algo salió mal podría perder el acceso a la consola.
Si el acceso es correcto, puede continuar con el siguiente paso.
Cerrar el puerto 22 en el firewall
Cuando se esté seguro de que el puerto SSH alternativo es funcional se puede desactivar el puerto estandar cerrandolo en el firewall con las siguientes instrucciones:
firewall-cmd --permanent --remove-service=ssh
firewall-cmd --reload
Instalar herramientas de administración
dnf install -y tmux iotop atop mytop htop apachetop bind-utils vim-enhanced \
iftop at mlocate telnet expect zip unzip strace mtr traceroute \
nmap rsync zip bzip2 wget python3 tar tree lsof
Configurar el nombre de host
hostnamectl hostname server01.example.com
Configurar swap en RAM
Configurar el módulo del kernel
Crear archivos de configuración para cargar el módulo ZRAM, configurarlo y configurar el dispositivo que se creará.
echo "zram" > /etc/modules-load.d/zram.conf
echo "options zram num_devices=1" > /etc/modprobe.d/zram.conf
echo 'KERNEL=="zram0", ATTR{disksize}="2G",TAG+="systemd"' > /etc/udev/rules.d/99-zram.rules
En este ejemplo se observa en la última línea que el tamaño del dispositivo será de 2GB.
Eliminar dispositivos SWAP anteriores
En caso de que haya algna partición u otro dispositivo de bloques configurado en fstab, se debe desactivar editando dicho archivo.
vim /etc/fstab
Crear un servicio de systemd
Crear o editar el siguiente archivo para poder manejar la partición swap mediante systemd.
vim /etc/systemd/system/zram.service
Agregar el contenido siguiente
[Unit]
Description=Swap with zram
After=multi-user.target
[Service]
Type=oneshot
RemainAfterExit=true
ExecStartPre=/sbin/mkswap /dev/zram0
ExecStart=/sbin/swapon /dev/zram0
ExecStop=/sbin/swapoff /dev/zram0
[Install]
WantedBy=multi-user.target
Activar el servicio
Se activa e inicia el servicio
systemctl enable zram
Probar la creación y montaje del dispositivo
modprobe zram
systemctl start zram
zramctl
free #(opcional)
Verificar que el dispositivo se monte tras el reinicio
reboot
zramctl
free #(opcional)
Configurar el servicio de tiempo NTP
Definir la zona horaria
timedatectl set-local-rtc 0
timedatectl set-timezone America/Mexico_City
O para sistemas que no cuenten con timedatectl
ln -sf /usr/share/zoneinfo/America/Mexico_City /etc/localtime
Cambiar los servidores de tiempo (opcional)
La aplicación chrony se encarga de sincronizar el reloj del servidor de manera automática mediante el pool de servidores de tiempo del projecto CentOS, si se desea usar un servidor en particular se debe modificar la siguiente sección del archivo y añadiendo el pool o servidor que se desea usar.
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
pool 2.centos.pool.ntp.org iburst
Por ejemplo:
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
# Servidor de tiempo del cenam
pool cronos.cenam.gob.mx