Los sistemas Linux son cosas complicadas. Desde el primer momento, cada distribución incluye una serie de servicios destinados a ayudarlo a poner las cosas en marcha. Algunas distribuciones habilitan menos servicios de manera predeterminada y otras habilitan más. La diferencia está en la comodidad. Algunas distribuciones intentan ponerlo en funcionamiento rápidamente, por lo que tienen un gran conjunto de servicios predeterminados habilitados para facilitarle la instalación, el inicio de sesión y la configuración. Otros toman el enfoque opuesto y no instalan casi nada por defecto.
Este artículo es el comienzo de una serie corta, donde hablaremos un poco sobre el endurecimiento, un poco sobre la segmentación y, finalmente, cómo escanear nuestras redes para ver si lo hicimos bien. Así que espera y déjame mostrarte algunas capas de defensa.
Instalar menos software
Cuando instalo un nuevo sistema, trato de instalar lo menos posible. Comienzo con el conjunto de paquetes base y realmente no instalo nada más. Es simple agregar servicios después de la instalación, entonces, ¿por qué complicar el proceso? Además, si hace esto mucho, probablemente querrá instalar desde un sistema Kickstart (o plantilla). Por lo tanto, le gustaría configurarlo de la manera más simple y genérica posible.
Para este artículo, instalé un sistema base Red Hat Enterprise Linux (RHEL) 7.6 para realizar algunas pruebas reales. Hice lo mínimo durante la instalación, seleccionando base
conjunto de paquetes y configuración de mis contraseñas, nombres de usuario y red. También habilité el Protocolo de tiempo de red (NTP).
Identificar puertos abiertos
Después de la instalación, podemos ver la lista de puertos abiertos. Los puertos son la forma en que los servicios que se ejecutan en su servidor permiten que otros sistemas se conecten a ellos. Un servidor web, por ejemplo, vinculará los puertos 80 y 443 al servicio del servidor web. En este artículo, identificaremos qué servicios tienen puertos abiertos en su instalación base y luego veremos cómo enumerar los servicios y deshabilitar los que no queremos.
En un sistema Red Hat Enterprise Linux 7.6, usamos el ss
comando para ver esta información. En sistemas que aún se envían con netstat
, utilizará el netstat
comando.
Ejecutando ss
en nuestro sistema de prueba muestra algunos puertos abiertos:
[root@rhel76test ~]# ss -tulnp --no-header | awk '{print($1, $5, $7)}'
udp *:68 users:(("dhclient",pid=3316,fd=6))
udp 127.0.0.1:323 users:(("chronyd",pid=2974,fd=1))
udp ::1:323 users:(("chronyd",pid=2974,fd=2))
tcp *:22 users:(("sshd",pid=3523,fd=3))
tcp 127.0.0.1:25 users:(("master",pid=3771,fd=13))
tcp :::22 users:(("sshd",pid=3523,fd=4))
tcp ::1:25 users:(("master",pid=3771,fd=14))
Parece que la base RHEL 7.6 no está mal. Observe en la segunda columna, algunos de los puertos abiertos muestran una IP y luego un puerto, y otros tienen un *
y luego un puerto. Las entradas que parecen 127.0.0.1:25
significa que solo están escuchando en localhost. Este resultado significa que no son accesibles de forma remota. Los servicios que se parecen a *:22
significa que están escuchando en cualquier interfaz. Asimismo, para las direcciones IPv6, tenemos ::1:323
, y :::22
. El ::1
las entradas son localhost, el :::
están abiertos de par en par.
Lo que todo esto significa es que este sistema tiene solo dos puertos IPv4 y un puerto IPv6 abiertos al mundo. El dhclient
El servicio es probablemente un buen ejemplo de algo que podríamos deshabilitar (lo que cerraría su puerto), pero solo si su servidor no está usando DHCP para obtener su dirección IP. En el caso de mi servidor de prueba, lo es.
Deshabilitar servicios
Listar servicios y detenerlos/deshabilitarlos es relativamente fácil en Red Hat Enterprise Linux 7. Usaremos systemd
para enumerar todas las unidades activas y luego decirle que se detenga y deshabilite las que no queremos que se ejecuten.
Para enumerar todos los servicios en ejecución, puede usar systemctl list-units --type=service --state=running
. En mi sistema de prueba, el resultado muestra 19 servicios muy modestos, y la mayoría de ellos parecen necesarios. Sin embargo, elegiremos uno para demostrarlo:
[root@rhel76test ~]# systemctl list-units --type=service --state=running
UNIT LOAD ACTIVE SUB DESCRIPTION
auditd.service loaded active running Security Auditing Service
chronyd.service loaded active running NTP client/server
crond.service loaded active running Command Scheduler
dbus.service loaded active running D-Bus System Message Bus
firewalld.service loaded active running firewalld - dynamic firewall daemon
[email protected] loaded active running Getty on tty1
lvm2-lvmetad.service loaded active running LVM2 metadata daemon
NetworkManager.service loaded active running Network Manager
polkit.service loaded active running Authorization Manager
postfix.service loaded active running Postfix Mail Transport Agent
qemu-guest-agent.service loaded active running QEMU Guest Agent
rhnsd.service loaded active running LSB: Starts the Spacewalk Daemon
rhsmcertd.service loaded active running Enable periodic update of entitlement certificates.
rsyslog.service loaded active running System Logging Service
sshd.service loaded active running OpenSSH server daemon
systemd-journald.service loaded active running Journal Service
systemd-logind.service loaded active running Login Service
systemd-udevd.service loaded active running udev Kernel Device Manager
tuned.service loaded active running Dynamic System Tuning Daemon
Digamos que no queremos que Postfix se cargue en el arranque. Simplemente usaríamos systemctl stop postfix
y luego systemctl disable postfix
, así:
[root@rhel76test ~]# systemctl stop postfix
[root@rhel76test ~]# systemctl disable postfix
Removed symlink /etc/systemd/system/multi-user.target.wants/postfix.service.
[root@rhel76test ~]# systemctl list-units --type=service --state=running | grep postfix
Ahora, probablemente no quieras deshabilitar Postfix, pero entiendes el punto.
Resumiendo
Ahí lo tienes. Aprendí algo hoy:listo para usar, Red Hat Enterprise Linux 7.6 es bastante limpio y ordenado. Espero que haya aprendido a buscar y deshabilitar servicios para reducir su superficie de ataque.
Sintonice la próxima entrega de esta serie, donde hablaré sobre la segmentación de la red y el firewall
¡Gracias por leer!