Como posso bloquear a porta 6379 para tráfego externo no ubuntu?

8

Quero bloquear o acesso à porta 6379 no meu servidor, mas ainda quero conectar-me a ela internamente. O aplicativo redis-server é executado nessa porta e eu quero conectar-me apenas localmente (127.0.0.1). Como posso fazer isso?

Steve Rodrigue
fonte

Respostas:

11

Para fazer isso, você precisa verificar se as regras do IPTables estão configuradas corretamente. O Ubuntu geralmente deixa seus servidores totalmente abertos por padrão, e é por isso que eu ainda não recomendo o uso deles como servidores, a menos que você já esteja bem ciente de como fazer isso corretamente.

Eu imagino que você se iptables -L -nvparece com isso, sim?

# iptables -L -nv
Chain INPUT (policy ACCEPT 4M packets, 9M bytes)
 pkts bytes target     prot opt in     out     source               destination

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

Chain OUTPUT (policy ACCEPT 8M packets, 4M bytes)
 pkts bytes target     prot opt in     out     source               destination

Está vazio e está aberto. O Ubuntu IPTables HowTo provavelmente ajudará bastante com isso. ( https://help.ubuntu.com/community/IptablesHowTo )

Eu recomendo algo parecido com isto, que permite SSH em qualquer interface e tcp 6379 em qualquer interface, exceto a que você não deseja:

*filter
:INPUT DROP [92:16679]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [203:36556]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -p tcp -m tcp --dport 6379 -j ACCEPT
-A INPUT -i lo -p udp -m udp --dport 6379 -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i lo -j ACCEPT
COMMIT

Você salvaria esse arquivo em /etc/iptables.rules.

Obviamente, quaisquer outras portas que você deseja abrir especificamente devem ser adicionadas.

Nota: eu adicionei as 6379 linhas específicas para maior clareza. A parte inferior ACCEPT logo antes do COMMIT realmente permitiria isso, porque todas as conexões de loopback devem ser permitidas em um sistema Linux para uma operação adequada.

Você também deseja colocar as regras no seu arquivo / etc / network / interfaces, para garantir que elas sejam adicionadas quando a interface surgir e não mais tarde no processo de inicialização. É recomendável adicionar algo assim:

auto eth0
iface eth0 inet dhcp
  pre-up iptables-restore < /etc/iptables.rules

Edit: Para carregar esta configuração inicialmente, você precisa executar o comando iptables-restore mencionado acima:

iptables-restore < /etc/iptables.rules
Magalhães
fonte
Eu suponho que isso abriria a porta 6379 para toda a web, certo? O que devo fazer para tornar isso aberto apenas para 127.0.0.1?
21312 Steve
Não, porque a regra padrão é DROP. Se não houver uma regra ACEITAR explícita, será bloqueada pela DROP padrão ao lado de: INPUT na parte superior.
Magellan
Pessoalmente, acho que a regra ACEITAR padrão é apenas criminal em uma implantação de "servidor". Mas não é de surpreender, pois o Ubuntu é antes de tudo uma distribuição de desktops.
Magellan
Ok, fiz exatamente o que você solicitou, mas parece que ainda consigo conectar à porta 6379 de fora. Devo reiniciar o servidor ou algo assim?
21712 Steve
1
Sim, mas eu realmente não me importo muito com os contadores e isso funciona para mim. Sinta-se à vontade para editar a resposta para ajustar-se a um processo mais rigoroso.
Magellan
3

Bem, eu sugeriria usar o "firewall não complicado" (ufw), que também é recomendado pela canonical. Ler e escrever iptables é muito complicado para tarefas ocasionais de bloqueio de portas.

Veja aqui: https://wiki.ubuntu.com/UncomplicatedFirewall

mojovski
fonte
1
As versões mais antigas do UFW não tinham a capacidade de aplicar regras a portas selecionadas, era tudo ou nada. Os administradores de sistemas profissionais devem adquirir o hábito de entender o que suas configurações de iptables fazem e como as cadeias funcionam.
Magellan
2

Algo como

iptables -A INPUT -s 0.0.0.0  -i eth0 --protocol tcp --dport 6379 -j DROP

Deveria trabalhar.

Kedare
fonte
Isso me dá o seguinte erro: iptables v1.4.4: opção desconhecida `--dport '#
Steve Rodrigue
Você pode tentar novamente com o novo comando? Adicionei as partes --protocol e -i (adapte-se à sua interface), agora deve funcionar.
Kedare
O problema que tenho com essa sugestão é que ele não salva nas reinicializações, a menos que outros comandos necessários sejam executados e pressupõe que haja apenas uma interface sem loopback.
Magellan
Eu recomendo usar o operador de negação: -i! lo
Magellan
Adrian: você quer dizer que se eu reiniciar o servidor, essa modificação não estará mais ativa?
21312 Steve
0

Para as versões mais recentes do Redis você pode usar bind 127.0.0.1em redis.conffazer isso diretamente, sem configuração adicional iptables

veja este artigo

itaintme
fonte