apache ouvindo em 80, mas não em nenhuma outra porta

1

Eu queria alterar uma configuração do apache em funcionamento de example.com (exampleIP = 1.2.3.4) para alterar da porta padrão 80 para a porta 8001, de forma que link deve funcionar. Eu não fui capaz de fazer isso e vou documentar o que tentei. Eu acho que talvez precise de ajuda no iptables.

meu / etc / hosts em primeiro lugar é bom

1.2.3.4    example.com

Comecei com a substituição da porta 80 por 8001 nos seguintes locais

  1. /etc/apache2/ports.conf

    Ouça 1.2.3.4:8001

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

    NameVirtualHost 1.2.3.4:8001

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

    < VirtualHost 1.2.3.4:8001>

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

    < / VirtualHost >

Quando eu substituo o 8001 nos 3 casos acima com 80, ele funciona. com o 8001 não consigo estabelecer uma conexão. O tcpdump também não mostra solicitações recebidas.

Como o daemon do apache quando reiniciado não causou nenhum erro, tentei a confirmação se o servidor da Web estava escutando no 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)

Parecia ouvir no 8001. Eu até tentei aplicar as seguintes regras de iptable no 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

Eu nunca recebi um log negado. Aqui está o que o modo verboso do iptables mostra

$ 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 

Não estou familiarizado com as regras de iptable, por isso, sugestões sobre quaisquer regras que eu tenha perdido acima serão ótimas. Lendo outros tópicos eu também queria saber se isso poderia ser um motivo.

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

Dada esta informação, alguma dica sobre o que poderia estar parando o servidor rodando no 8001 mas não no 80?

UPDATE 1: Eu tentei liberar todas as regras de iptable

$ sudo iptables -X
$ sudo iptables -F

eu também tentei ver se o tcpdump estava pegando alguma coisa

 sudo tcpdump -i eth0 port 8001 -v

Ele não faz isso no 8001, mas muda a porta para 80 (nos ^ 3 lugares novamente) e o faz.

eu tentei procurar o processo estabelecido e de escuta

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

Por último da minha máquina local, eu tentei enrolar também

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

UPDATE 2

Além disso, meu / etc / log / messages que detecta erros do iptables pareceu lançar o seguinte. mas acontece que eles aparecem quando você entra e sai do 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

ATUALIZAÇÃO 3 achei isso no tcpdump faq's

...This might be because the interface on which you're capturing is plugged into a switch; on a switched network, unicast traffic between two ports will not necessarily appear on other ports - only broadcast and multicast traffic will be sent to all ports...

...which would indicate that if you sniff on a 10Mb port, you will not see traffic coming sent to a 100Mb port, and vice versa...

...If your machine is not plugged into a switched network or a dual-speed hub, or it is plugged into a switched network but the port is set up to have all traffic replicated to it, the problem might be that the network interface on which you're capturing doesn't support "promiscuous" mode, or because your OS can't put the interface into promiscuous mode...

para resumir este caso peculiar:

  • iptables foram liberados com -F, -X
  • solicita multa com o apache ouvindo em 1.2.3.4:80
  • O tcpdump não detecta nada com o apache ouvindo em 1.2.3.4:8001 (consulte UPDATE 1,3)
por Bosky 29.01.2013 / 22:28

4 respostas

1

No passo 3, você mencionou

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

<VirtualHost 1.2.3.4:80> ServerName example.com:8001 ... </VirtualHost>

O que não está correto. Deve ser

<VirtualHost 1.2.3.4:8001> ServerName example.com ... </VirtualHost>

    
por 21.01.2010 / 22:32
0

Se isso não incomoda você, tente ligar a qualquer interface com:

Listen 0.0.0.0:8001

E o nome do servidor deve ser:

ServerName example.com

O resto você mantém como você já configurou. Por favor, note que NameVirtualHost e VirtualHost devem ter a mesma assinatura. E porque é um host virtual baseado em nome você precisa adicionar ao seu arquivo de hosts na máquina com o navegador uma linha como:

1.2.3.4 example.com

e use no link como URL no navegador (curl, wget, MSIE, Firefox)

Para uso de depuração:

tshark -V -i eth0 port 8001 or port 80

Veja o que está acontecendo em error.log e em access.log

    
por 22.01.2010 / 00:37
0

Ouvir não implementa hosts virtuais. link

Adicione a /etc/apache2/ports.conf apenas ouça 8001

Certifique-se de que o include esteja antes da inclusão dos virtualhosts no arquivo apache2.conf. Você também pode colocar o comando Listen diretamente no arquivo apache2.conf antes de incluir linhas.

Felicidades

    
por 22.01.2010 / 11:02
0

foi um problema de firewall, afinal, quando entrei em contato com o pessoal de hospedagem.

Tentaremos que eles elaborem o que fizeram para impor isso.

acabou sendo um bom exercício de administrador de sistema. Obrigado a todos ...

    
por 29.01.2013 / 22:29