La semana pasada recibí una llamada de un cliente asustado porque pensó que su sitio web fue pirateado. Cuando busqué en su sitio web, vi la apache2
página predeterminada. Esa noche mi servidor ( Ubuntu 16.04 LTS
) se actualizó y reinició. Normalmente, cuando algo sale mal, me habrían alertado durante la noche. Esta vez no, porque el sistema de monitoreo verifica el código de estado HTTP 200, y la apache2
página predeterminada viene con el código de estado 200.
Lo que sucedió es que durante el inicio apache2
fue más rápido enlazar a los puertos 80 y 443 que mi servidor web actual nginx. No instalé apache2 yo mismo. A través aptitude why apache2
descubrí que el paquete php7.0 lo requiere.
Simplemente eliminar apache2
no funcionará porque aparentemente php7.0 lo requiere. ¿De alguna manera es posible crear una restricción para que solo nginx pueda unirse al puerto 80 y 443?
Otras soluciones son más que bienvenidas también.
This time not, because the monitoring system checks for HTTP status code 200
. Puede mejorar el sistema de monitoreo haciendo que verifique el contenido real de la página web (alguna cadena particular en el cuerpo o encabezado), esto será más confiable.Respuestas:
No puede evitar que un puerto esté vinculado por el servicio incorrecto. En su caso, simplemente elimine apache del inicio automático y debería ser bueno.
Para 16.04 y más reciente:
Para versiones anteriores de Ubuntu:
fuente
systemctl disable apache2
Si realmente no está utilizando
apache2
, y es PHP 7.0 el que lo requiere, entonces parece que lo halibapache2-mod-php7.0
instalado. Ese paquete es inútil sin Apache. Como está utilizando nginx, es probable que también tengaphp7.0-fpm
o estéphp7.0-cgi
instalado, cualquiera de los cuales es suficiente para satisfacerphp7.0
los requisitos de dependencia:Si tiene alguno de los dos
php7.0-{fpm,cgi}
instalados, puede continuar y desinstalar Apache.fuente
php7.0-fpm
y no elphp7.0
paquete. Esto también lo aconseja Ondřej Surý github.com/oerdnj/deb.sury.org/wiki/…Para responder a su pregunta, probablemente pueda restringir un puerto a una aplicación específica utilizando SElinux. No lo he usado yo mismo y solo tengo un conocimiento superficial de sus capacidades, pero aquí hay un puntero que encontré en este sitio:
/server//a/257056/392230
En esa respuesta, wzzrd parece mostrar cómo otorgar a una aplicación específica (foo) permiso para vincularse a un puerto específico (803). Simplemente tendría que tener la configuración de la política para que solo su aplicación (nginx) tenga permitido los puertos que especifique (80 y 443).
Basándome en la respuesta de wzzrd, podría ser tan simple como agregar esto a la política
y corriendo esto
Sin embargo, imagino que también necesitará una línea en la política que especifique que ningún otro programa puede vincularse a esos puertos.
Al final, solo adivino cuál es la configuración adecuada.
De todos modos, no creo que haya habido un Ubuntu que tenga SElinux instalado y habilitado por defecto. Debido a que creo que requiere la aplicación de ciertos parches a varias utilidades y una opción de kernel, podría ser más fácil simplemente usar Centos, que tiene SElinux instalado y habilitado desde el primer momento.
Lo siento, no soy de más ayuda. Tal vez en otro momento, descargaré una imagen de Centos y probaré esto; Será un buen paso de aprendizaje. Actualizaré esta respuesta si lo hago.
fuente
Algo que aún no he visto en las respuestas, pero aún es una posibilidad:
Cambie la configuración de Apache para escuchar otro puerto, por si acaso. Puede hacerlo abriendo el archivo de configuración de Apache y cambiando las líneas que tienen
Listen 80
a otro puerto.fuente
No tengo una respuesta a tu pregunta exacta, pero tal vez necesites mirar tu distribución. Consideraría que cualquier distribución que permita servicios (apache2 aquí) en la instalación es insegura. Considera buscar una distribución que no haga eso. No puedo decir que haya visto ese comportamiento en Archlinux, estoy seguro de que hay otros.
fuente