Instalación de httpd y modssl

  • yum install httpd modssl -y

 

<h1> INSTALACION DE FIREWALL CONFIG SERVER </h1>

Instalamos dependencias

  • yum install wget vim perl-libwww-perl.noarch perl-Time-HiRes -y /instalacion de librerias para el csf

Desabilitamos el firewalld de centos 7 para instalar el csf ,

  • systemctl stop firewalld
  • systemctl disable firewalld

Descargar Config Firewall Server

  • cd /usr/src/
  • wget https://download.configserver.com/csf.tgz

Ejecutamos la instalación

  • tar -xzf csf.tgz
  • cd csf
  • sh install.sh

 

 

Directorio para verificar la configuración del csf

  • cd /etc/csf/
  • nano csf.conf, cambiamos la línea 11 por 0, para aplicar las configuraciones del firewall.

Definir los siguientes puertos en el firewall:

  • TCP : 22,9022,80,443
  • UDP: 53

 

Bloquear país con CSF:

Comandos útiles de CSF:

  • csf –r : recargar la reglas
  • csf –a DIRECCION IP: permitir una ip específica para todos los puertos.
  • csf –ar DIRECCION IP: remover ip permitida.
  • csf –d DIRECCION IP : denegar una dirección ip
  • csf –dr DIRECCION IP: remover dirección denegada.

 

Habilitamos el csf con los siguientes comandos

  • systemctl start csf
  • systemctl start lfd
  • systemctl enable csf
  • systemctl enable lfd

Comando para verificar que puertos se encuentran abiertos en nuestro servidor:

  • Iptables –L –n

 

<INFRAME> INSTALACION DE HTTPS CON LETS ENCRYPT </INFRAME>

  • yum install mod_ssl -y
  • https://zerossl.com/
    • Generación de las llaves crt y key para el dominio.
    • Configuración del archivo /etc/httpd/conf.d/ssl.conf

Seguir instrucciones del mentor.

 

Reforzar configuración de SSL

 

 

SSLCipherSuite      (cifrados de archivos)

SSLHonorCipherOrder     on

SSLOptions +StrictRequire

 

Otra opción  de instalación con lets-encrypt.

https://www.tecmint.com/install-lets-encrypt-ssl-certificate-to-secure-apache-on-rhel-centos/

 

HARDENNING APACHE

Ocultar version de apache y Sistema operativo :

  • ServerTokens Prod
  • ServerSignature Off

Desabilitamos la lista de directories del servidor pueda ser mostrada en la web.

  • Options -Indexes –FollowSymLinks

 

 

 

Bloqueo del encabezado etag

  • FileETag None

 

Desabilitar trace http request

  • TraceEnable off

 

Proteccion de las cookies del servidor agregando los siguientes parametros.

  • Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure

 

Proteccion contra ataques Clickjacking Attack.

  • Header always append X-Frame-Options SAMEORIGIN

 

X-XSS Protect

  • Header set X-XSS-Protection «1; mode=block»on

 

 

 

 

 

 

 

 

 

 

 

HARDENNING – SSH – CENTOS 7

 

Desabilitar el login root del servidor ssh

(puede usar su editor preferido nano o vi)

  • #vim /etc/ssh/sshd_config
  • PermitRootLogin no
  • #systemctl restart sshd

 

Limitamos el acceso a los usuarios.

 

  • $sudo vim /etc/ssh/sshd_config
  • AllowUsers vannath solida
  • $sudo systemctl restart sshd

 

Desabilitamos el protocol 1

 

  • $sudo vim /etc/ssh/sshd_config
  • Protocol 2
  • $sudo systemctl restart sshd

 

Cambiamos el Puerto por default de sshd

Tiempo de conexion ssh

  • $sudo vim /etc/ssh/sshd_config
  • ClientAliveInterval 300
  • ClientAliveCountMax 0
  • $sudo systemctl restart sshd

 

Limitacion de fallos de autenticacion.

  • $sudo vim /etc/ssh/sshd_config
  • MaxAuthTries 3
  • $sudo systemctl restart sshd

En caso de tener una direccion de administracion.

 

  • $sudo vim /etc/ssh/sshd_config
  • ListenAddress 192.168.10.112
  • $sudo systemctl restart sshd

 

Desabilitar la conexion mediante el archive .rhosts

  • $sudo vim /etc/ssh/sshd_config
  • IgnoreRhosts yes
  • $sudo systemctl restart sshd

Desabilitar el acceso en password en blancos

  • $sudo vim /etc/ssh/sshd_config
  • PermitEmptyPasswords no
  • $sudo systemctl restart sshd

Desabiitamos autenticacion basado en host

  • $sudo vim /etc/ssh/sshd_config
  • HostbasedAuthentication no
  • $sudo systemctl restart sshd

 

Habilitar los logs del servidor

  • $sudo vim /etc/ssh/sshd_config
  • LogLevel INFO
  • $sudo systemctl restart sshd

 

Administrar el numerous de conexiones activas para sshd

  • $sudo vim /etc/ssh/sshd_config
  • MaxStartups 3
  • $sudo systemctl restart sshd

 

Tiempo de conexion sshd

  • $sudo vim /etc/ssh/sshd_config
  • LoginGraceTime 1m
  • Service sshd restart

 

<SCRIPT> INSTALACION DE MODSECURITY </SCRIPT>

 

Instalamos ModSecurity y las Reglas preconfiguradas.

 

# yum install mod_security mod_security_crs -y

 

Ahora activamos el Módulo

 

# nano /etc/httpd/conf.d/mod_security.conf

 

Buscamos la directiva SecRuleEngine y configuramos con los siguientes valores según nuestras necesidades:

 

  • on – Reglas Activadas

 

  • off – Reglas desactivadas

 

  • DetectionOnly – Solo intercepta y hace un log de la transacción

 

 

 

 

Reiniciamos el servicio de Apache para que asuma los cambios.

 

# service httpd restart

 

Para confirmar que el módulo está funcionando debemos ver lo siguiente en el Log de errores de Apache.

 

# tail /var/log/httpd/error_log

 

Instalacion de reglas de OWASP

Ruta de instalacion de reglas de mod_security

  • /usr/lib/modsecurity.d/base_rules/

 

Mediante el comportamiento de nuestra infraestructura web, podemos configurar nuestras reglas de modsecurity, con el siguiente commando:

Ejemplo: cp sql-errors.data /usr/lib/modsecurity.d/base_rules/

 

 

 

 

Fail2ban para la proteccion de apache y sshd

Instalacion de fail2ban en centos 7

  • yum install fail2ban –y

Ruta de fail2ban para su configuracion:

  • /etc/fail2ban

Comando para habilitar el servicio de fail2ban en centos 7.

  • systemctl enable fail2ban

Archivo de configuracion jail.conf que contiene las reglas predeterminadas  de instalacion.

  • nano jail.conf

El código del archivo puede consistir en muchas líneas de códigos que se ejecutan para evitar la prohibición de una o varias direcciones IP, establecer la duración de tiempo de bant, etc. Un archivo de configuración de cárcel típico contiene las siguientes líneas.

 

  • Ignoreip: se utiliza para establecer la lista de direcciones IP que no se prohibirán. La lista de direcciones IP debe darse con un separador de espacio. Este parámetro se usa para configurar su dirección IP personal (si accede al servidor desde una IP fija).

 

  • El parámetro Bantime se usa para establecer la duración de los segundos durante los cuales se debe prohibir un host.

 

  • Findtime es el parámetro que se usa para verificar si un host debe ser prohibido o no. Cuando el host genera maxrety en su último tiempo de búsqueda, está prohibido.

 

  • Maxretry es el parámetro utilizado para establecer el límite para el número de reintentos por parte de un host. Al sobrepasar este límite, el host está prohibido.

Para habilitar las reglas  de Apache  y sshd predefinidos  cree  el archive /etc/fail2ban/jail.local estableciendo las siguientes reglas:

 

[DEFAULT]

# Ban hosts for one hour:

bantime = 3600

 

# Override /etc/fail2ban/jail.d/00-firewalld.conf:

banaction = iptables-multiport

 

[sshd]

enabled = true

port     = 22 (Puerto definido en la configuracion de ssh)

filter   = sshd

logpath  = /var/log/auth.log

maxretry = 3

 

# detect password authentication failures

[apache]

enabled  = true

port     = http,https

filter   = apache-auth

logpath  = /var/log/httpd/*error_log

maxretry = 6

ipnoreip = 192.168.128.1

 

# detect spammer robots crawling email addresses

[apache-badbots]

enabled  = true

port     = http,https

filter   = apache-badbots

logpath  = /var/log/httpd/*access_log

bantime  = 172800

maxretry = 1

ipnoreip = 192.168.128.1

# detect potential search for exploits and php vulnerabilities

[apache-noscript]

enabled  = true

port     = http,https

filter   = apache-noscript

logpath  = /var/log/httpd/*error_log

maxretry = 6

ipnoreip = 192.168.128.1

 

# detect Apache overflow attempts

[apache-overflows]

enabled  = true

port     = http,https

filter   = apache-overflows

logpath  = /var/log/httpd/*error_log

maxretry = 2

ipnoreip = 192.168.128.1

 

 

 

# detect failures to find a home directory on a server

[apache-nohome]

enabled  = true

port     = http,https

filter   = apache-nohome

logpath  = /var/log/httpd/*error_log

maxretry = 2

ipnoreip = 192.168.128.1

 

 

# detect failures to execute non-existing scripts that

# are associated with several popular web services

# e.g. webmail, phpMyAdmin, WordPress

port     = http,https

filter   = apache-botsearch

logpath  = /var/log/httpd/*error_log

maxretry = 2

ipnoreip = 192.168.128.1

 

Comandos de fail2ban:

  • service fail2ban restart : reiniciar el servicio y recargar las reglas.
  • fail2ban-client status: lista de jail o reglas activas.
  • fail2ban-client status [name-of-jail]: estado del jail o regla que se configure en caso de realizer un bloqueo a una direccion.
  • fail2ban-client set [name-of-jail] banip [ip-address]: realizer el bloqueo de una direccion ip especifica.
  • fail2ban-client set [name-of-jail] unbanip [ip-address]: desbloqueo de una direccion especifica.