Apache escucha en 80, pero no en ningún otro puerto.

Apache escucha en 80, pero no en ningún otro puerto.

Quería cambiar una configuración funcional de Apache de example.com (exampleIP = 1.2.3.4) para cambiar del puerto predeterminado 80 al puerto 8001, de modo quehttp://ejemplo.com:8001Deberia trabajar. No pude hacerlo y documentaré lo que intenté. Creo que podría necesitar ayuda con iptables.

mi /etc/hosts primero está bien

1.2.3.4    example.com

Comencé reemplazando el puerto 80 con 8001 en los siguientes lugares

  1. /etc/apache2/ports.conf

    Escuchar 1.2.3.4:8001

  2. /etc/apache2/conf.d/virtual.conf

    NombreVirtualHost 1.2.3.4:8001

  3. /etc/apache2/sites-enabled/example.com

    <HostVirtual 1.2.3.4:8001>

          ServerName example.com:8001
          #UPDATE: ServerName example.com doesn't make a difference either
    

    </VirtualHost>

Cuando reemplazo 8001 en los 3 casos anteriores con 80, funciona. con 8001 no puedo establecer una conexión. tcpdump tampoco muestra las solicitudes entrantes.

Dado que el demonio Apache cuando se reinició no arrojó ningún error, intenté confirmar si el servidor web estaba escuchando en 8001.

$ sudo lsof -i |grep 8001
apache2     731     root    3u  IPv4 46858730       TCP example.com:8001 (LISTEN)
apache2     734 www-data    3u  IPv4 46858730       TCP example.com:8001 (LISTEN)
apache2     736 www-data    3u  IPv4 46858730       TCP example.com:8001 (LISTEN)
apache2     737 www-data    3u  IPv4 46858730       TCP example.com:8001 (LISTEN)
apache2     738 www-data    3u  IPv4 46858730       TCP example.com:8001 (LISTEN)
apache2     739 www-data    3u  IPv4 46858730       TCP example.com:8001 (LISTEN)

Parecía escuchar en 8001. Incluso intenté aplicar las siguientes reglas de iptable en la terminal:

$ sudo iptables -A INPUT -p tcp --dport 8001 -j ACCEPT
$ sudo iptables -A OUTPUT -p tcp --sport 8001 -j ACCEPT
$ sudo iptables -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied:  " --log-level 7

Nunca recibí un registro denegado. Esto es lo que muestra el modo detallado de iptables

$ sudo iptables -L -v -n
Chain INPUT (policy ACCEPT 3052M packets, 785G bytes)
pkts bytes target     prot opt in     out     source               destination         
   25  1690 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:8001 
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:8001 
   92  6484 LOG        all  --  *      *       0.0.0.0/0            0.0.0.0/0           limit: avg 5/min burst 5 LOG flags 0 level 7 prefix `iptables denied:  ' 

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 4317M packets, 695G bytes)
 pkts bytes target     prot opt in     out     source               destination         
   20  1760 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spt:8001 

No estoy familiarizado con las reglas de iptable, por lo que las sugerencias sobre las reglas que me perdí anteriormente serán excelentes. Al leer otros hilos también me pregunté si esta podría ser una razón.

$ cat /proc/sys/net/ipv4/conf/eth0/forwarding 
0

Dada esta información, ¿alguna pista sobre qué podría impedir que el servidor web se ejecute en 8001 pero no en 80?

ACTUALIZACIÓN 1: Intenté vaciar todas las reglas de iptable

$ sudo iptables -X
$ sudo iptables -F

También intenté ver si tcpdump detectaba algo.

 sudo tcpdump -i eth0 port 8001 -v

No es así en 8001, pero cambia el puerto a 80 (en los ^ 3 lugares nuevamente) y lo hace.

Intenté buscar procesos establecidos y de escucha.

$ netstat -an
tcp        0      1.2.3.4:8001            0.0.0.0:*               LISTEN   

Por último, desde mi máquina local, también probé curl

curl http://1.2.3.4:8001 -v
* About to connect() to 1.2.3.4 port 8001 (#0)
*   Trying 1.2.3.4... No route to host
* couldn't connect to host
* Closing connection #0
curl: (7) couldn't connect to host

ACTUALIZACIÓN 2

Además, mi /etc/log/messages que detecta errores de iptables pareció arrojar lo siguiente. pero resulta que estos aparecen al entrar y salir de tcpdump.

Jan 22 09:30:31 node1 kernel: device eth0 entered promiscuous mode
Jan 22 09:30:31 node1 kernel: audit(1264152631.798:54): dev=eth0 prom=256 old_prom=0 auid=4294967295
Jan 22 09:30:33 node1 kernel: device eth0 left promiscuous mode

ACTUALIZACIÓN 3 encontré esto en las preguntas frecuentes de tcpdump

...Esto podría deberse a que la interfaz en la que estás capturando está conectada a un conmutador; en una red conmutada, tráfico unicastentre dos puertos no necesariamente apareceráen otros puertos: solo se enviará tráfico de difusión y multidifusión a todos los puertos...

...lo que indicaría que si hueles un puerto de 10Mb,usted no verá el tráfico que llega se envía a un puerto de 100Mb, y viceversa...

...Si su máquina no está conectada a una red conmutada o a un concentrador de doble velocidad, o está conectada a una red conmutada pero el puerto está configurado para replicar todo el tráfico, el problema podría ser que la interfaz de red en el que estás capturando no soporta el modo "promiscuo", o porque su sistema operativo no puede poner la interfaz en modo promiscuo...

así que para resumir este caso peculiar:

  • iptables se han vaciado con -F, -X
  • Solicita bien con Apache escuchando en 1.2.3.4:80
  • tcpdump no detecta nada con Apache escuchando en 1.2.3.4:8001 (ver ACTUALIZACIÓN 1,3)

Respuesta1

En el paso 3 mencionaste

/etc/apache2/sites-enabled/example.com

<VirtualHost 1.2.3.4:80>Nombre del servidor ejemplo.com:8001 ...</VirtualHost>

Lo cual no es correcto. Debería ser

<VirtualHost 1.2.3.4:8001>Nombre del servidor ejemplo.com...</VirtualHost>

Respuesta2

Si no te molesta, intenta vincularte a cualquier interfaz con:

Listen 0.0.0.0:8001

Y el nombre del servidor debería ser:

ServerName example.com

El resto lo guardas como ya lo has configurado. Tenga en cuenta que NameVirtualHost y VirtualHost deben tener la misma firma. Y debido a que es un host virtual basado en nombres, debe agregar en su archivo de hosts en la máquina con el navegador una línea como:

1.2.3.4 example.com

y utilizar enhttp://ejemplo.com:8001/como URL en el navegador (curl, wget,MSIE, Firefox)

Para uso de depuración:

tshark -V -i eth0 port 8001 or port 80

Vea lo que está sucediendo en error.log y en access.log

Respuesta3

Listen no implementa hosts virtuales. http://httpd.apache.org/docs/2.0/bind.html#virtualhost

Agregue a /etc/apache2/ports.conf solo escuche 8001

asegúrese de que la inclusión sea anterior a la inclusión de los hosts virtuales en el archivo apache2.conf. También puede colocar el comando Escuchar directamente en el archivo apache2.conf justo antes de incluir líneas.

Salud

Respuesta4

Después de todo, fue un problema de firewall cuando me comuniqué con la gente del hosting.

Intentaremos que den más detalles sobre lo que realmente hicieron para hacer cumplir esto.

Terminó siendo un buen ejercicio de administrador de sistemas. gracias a todos...

información relacionada