cURL para localhost é descartado pelo iptables

1

Estou tentando usar o cURL no shell para conectar-se ao host local. Estou usando curl http://localhost:80 para se conectar. Infelizmente, está sendo bloqueado pelo iptables. Aqui está o erro no log do iptables porquê:

IPTables-Dropped: IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00 SRC=127.0.0.1 DST=127.0.0.1 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=TCP SPT=80 DPT=58617 WINDOW=32768 RES=0x00 ACK SYN URGP=0

E aqui está o iptables:

iptables -L -v
Chain INPUT (policy DROP 314 packets, 19725 bytes)
 pkts bytes target     prot opt in     out     source               destination
30731 4342K ACCEPT     all  --  eth0   any     anywhere             anywhere             state RELATED,ESTABLISHED
  255 31984 ACCEPT     all  --  eth1   any     anywhere             anywhere             state RELATED,ESTABLISHED
    6   360 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:http
    0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:https
  207 28142 ACCEPT     tcp  --  any    any     localhost.localdomain  anywhere             tcp dpt:6379
  173  9634 ACCEPT     tcp  --  any    any     localhost.localdomain  anywhere             tcp spt:6379

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

Chain OUTPUT (policy ACCEPT 31748 packets, 2974K bytes)
 pkts bytes target     prot opt in     out     source               destination

Acho que reduzi o fato ao fato de que o cURL parece estar usando uma porta de destino que não é 80. Ele também muda toda vez que eu faço uma nova solicitação cURL. Você pode ver isso na entrada de log: SPT=80 DPT=58617 . Resolver isso (eu imagino) deve resolver o problema.

Algumas notas:

  • Executando o Debian Wheezy
  • O servidor da web é nginx
  • As conexões do localhost para o servidor local do Redis funcionam bem.

Atualização: A adição da seguinte regra -A INPUT -p tcp -m tcp --sport 80 -j ACCEPT corrige o problema. Existe uma preocupação de segurança para permitir conexões com base na porta de origem e não na porta de destino?

    
por Wes Cossick 06.05.2015 / 01:48

1 resposta

0

Você tem regras RELATED,ESTABLISHED apenas para interfaces eth0 e eth1, portanto, a resposta do servidor web à solicitação de conexão de cURL será descartada pelo iptables porque não é aceita por nenhuma regra. Alterar a regra RELATED,ESTABLISHED para que se aplique a todas as interfaces deve resolver o problema.

Não use regras aceitando tráfego de portas de origem específicas, a menos que você precise delas por um motivo muito específico: ter uma regra aceitando todo o tráfego da porta 80 significaria que poderia então se conectar a qualquer um dos seus serviços se ele / ela puder abrir a conexão da porta 80 (trivial para qualquer invasor).

    
por 06.05.2015 / 02:28