No arranca xampp error: Port 80 in use by “Unable to open process” with PID 4!

El otro dia me sucedio una cosa extraña y era que no me arrancaba el apache en el XAMPP, al parecer habia el PID4 estaba utilizando el puerto 80.

En el al adminsitrador de tareas y observe que el PID4 pertenecia al sistema, con lo que no se trataba de una aplicación en concreto.

Investigando me encuentro con que hay un servicio llamado BranchCache que es el que esta utilizando el puerto 80, con lo que para solucionarlo, solo he tenido que parar y deshabilitar el servicio con los siguientes pasos.

Buscador de  Windows > Servicios > Click botón derecho > Ejecutar como administrador

 Click botón derecho BranchCache > Propiedades > Tipo de inicio > Deshabilitado

Con estos pasos ya solucione el error y pude arrancar el apache del XAMPP.

Configuración de un proxy inverso en Apache

Últimamente esas apareciendo numerosos servicios web que se ejecutan en puertos diferentes de los standar 80/443, grafana por el 3000, rpimonitor 8888, o el conocido del tomcat 8080.

Pues con esta entrada voy a explicar cómo hacer una redirección de puertos de una manera muy sencilla con el apache y los módulos proxy_module y proxy_http_module.

Editamos el fichero de configuración del apache y habilitamos los módulos, para sistemas centos / red-hat.

vi /etc/apache/conf/httpd.conf

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

Para sistemas debian / ubuntu habilitamos con los comandos.

a2enmod proxy
a2enmod proxy_http

Y a continuación editamos el fichero del apache donde tengamos los host y configuramos el proxy para que apunta al puerto donde publiquemos la web (ej, grafana).

vi /etc/apache/conf/httpd.conf (centos / red-hat)
vi /etc/apache2/sites-enabled/000-default.conf (debian / ubuntu)

    ProxyPass / http://127.0.0.1:3000/
    ProxyPassReverse / http://127.0.0.1:3000/

Reiniciamos el servidor apache y el grafana como en el ejemplo ya se publicara por el puerto 80.

Vulnerabilidades SSL/TLS en Apache – corregir ataques POODLE / BEAST / SWEET32 y deshabilitar SSL

Escribo esta entrada para tener actualizado al día el apache de posibles ataques.

Comprobando con nmap el puerto 443, se puede ver como muchos apaches utilizan cifrados inseguros (incluso en sistemas robustos como centos 7).

Ejemplo:

nmap -p 443 --script ssl-enum-ciphers 192.168.1.2
Starting Nmap 7.80 ( https://nmap.org ) at 2020-05-27 08:59 Hora de ver. Europa Occidental
Nmap scan report for 192.168.1.2
Host is up (0.18s latency).

PORT    STATE SERVICE
443/tcp open  https
| ssl-enum-ciphers: 
|   TLSv1.0: 
|     ciphers: 
|       TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA (dh 2048) - C
|       TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA (secp256r1) - C
|       TLS_ECDHE_RSA_WITH_RC4_128_SHA (secp256r1) - C
|       TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 2048) - C
|       TLS_RSA_WITH_RC4_128_MD5 (rsa 2048) - C
|       TLS_RSA_WITH_RC4_128_SHA (rsa 2048) - C
|     compressors: 
|       NULL
|     cipher preference: client
|     warnings: 
|       64-bit block cipher 3DES vulnerable to SWEET32 attack
|       64-bit block cipher IDEA vulnerable to SWEET32 attack
|       Broken cipher RC4 is deprecated by RFC 7465
|       Ciphersuite uses MD5 for message integrity

Como podemos ver, son unos cuantos los cifrados inseguros.

Para corregirlo lo que haremos es añadir estas dos directivas en el fichero de configuración del apache. (excluir cifrado ssl y cifrados vulnerables)

SSLProtocol ALL -SSLv2 -SSLv3
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL:!3DES:!MD5:!IDEA:!RC4:!DES:!DES40:!aNULL

Reiniciando el apache ya lo tendremos protegido de vulnerabilidades.

Redirección 301 de un dominio a otro en apache usando .htacess

En cientos de ocasiones me han pedido realizar una redirección de un dominio a otro y nunca recuerdo el comando a utilizar, ya que no soy muy bueno con las expresiones regulares.

Por eso voy a crear esta pequeña entrada a modo de recordatorio.

Bastaria con intruducir esta linea en el fichero .htacess de la web o en el fichero de configuración del apache (apache.conf, httpd.con ,etc)

Asegurandonos previamente de que el apache tiene instalado el modulo mod_rewrite

RewriteEngine On
RewriteRule ^(.*)$ https://nueva-url.es/ [R=301]

Redirección de http a https en apache.

En los albores de internet, podríamos decir que todo era mas “seguro” y existían muchos menos ataques malintencionados que ahora, con lo que todas las webs funcionaban bajo el protocolo http.

Con el tiempo se detecto que ese protocolo era inseguro ya que el trafico viajaba sin cifrar, con lo que se creo el protocolo seguro “https”, con lo que si queremos que nuestra web funcione siempre en con el protocolos seguro debemos de redirigir todo el trafico http a https.

A continuación paso a explicar como hacerlo el servidor web apache.

Si lo hacemos en un entorno ubuntu/debian los pasos de instalación serian estos:

#Instalamos apache2 
apt-get install apache2

#Habilitamos el módulo SSL y  rewrite
a2enmod ssl
a2enmod rewrite 

Y en centos estos:

#Instalar apache2 
yum install http

# Instalamos el módulo SSL y openssl
yum install mod_ssl openssl

#Añadimos modulo en fichero configuracion
vi /etc/httpd/conf/httpd.conf
LoadModule rewrite_module modules/mod_rewrite.so

A continuación en el fichero de configuración de apache redirigimos el trafico.

#debian/ubuntu
/etc/apache2/sites-enabled/000-default.conf
#centos
vim /etc/httpd/conf.d/000-vhost.conf

<VirtualHost *:80>
        RewriteEngine on
        ReWriteCond %{SERVER_PORT} !^443$
        RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R,L]
</VirtualHost>

Con esta configuración forzaremos que todo trafico http vaya al puerto https.

Buscar ip y hora de acceso en el log de apache con cat, grep y cut

Dentro del mundo de los sistemas, es muy común que nos pidan que quieren saber a qué hora y que ip accedió a determinada página web.

Voy a explicarlo como hacerlo de una manera, muy sencilla concatenando los comandos cat , grep y cut.

Con cat listaremos el fichero de acceso

cat /var/log/apache/access_log

Lo uniremos con el comando grep para buscar los acceso a index.php

grep – 'index.php'

Y por último filtraremos las columnas que necesitamos con cut, seleccionando las filas de la ip y la hora (-f1,4,5) y el delimitador a usar (espacio en blanco-d’ ‘)

cut -f1,4,5 -d' '

La juntamos todo con pipes y lo pintamos en un fichero de texto.

cat /var/log/apache/access_log | grep -i 'php' | cut -f1,4,5 -d' ' > accesos.txt

Con esta manera sencilla podemos  controlar los acessos por ip y fecha en las paginas web