Basta configurar um contêiner ElasticSearch para usar com o aplicativo Laravel da empresa.Criando docker-compose.yml e executá-lo é impecável e direto, mas o problema ocorre quando quero firewall essa coisa para que seja acessível apenas a partir de um IP específico do aplicativo Laravel mencionado.
Ao pesquisar, notei que muitas pessoas estão tendo esses problemas em que o tráfego para a porta encaminhado pelo Docker fica completamente exposto ao público e que não conseguem firewall corretamente.
Encontrei vários solucao nas últimas 6 horas, nenhuma estava funcionando. Presumo que isso tenha algo a ver com a maneira como o Docker processa/encaminha o tráfego de entrada e meu conhecimento iptables não é tão vasto para que eu possa entender o que está acontecendo por conta própria.
Este é o meu docker-compose.yml (pelo que vale a pena):
version: '3.4'services: elasticsearch: image: khezen/elasticsearch:6.1.1 container_name: elasticsearch environment: NETWORK_HOST: 0.0.0.0 HOSTS: 127.0.0.1 CLUSTER_NAME: fd-es NODE_NAME: node-1 HEAP_SIZE: 31g HTTP_SSL: "true" ELASTIC_PWD: "somepasswd" HTTP_CORS_ENABLE: "true" HTTP_CORS_ALLOW_ORIGIN: /https?:\/\/localhost(:[0-9]+)?/ ulimits: memlock: soft: -1 hard: -1 volumes: - ./config/elasticsearch.yml:/elasticsearch/config/elasticsearch.yml - ./data:/elasticsearch/data - ./logs:/elasticsearch/logs ports: - 9200:9200 networks: - es-network restart: alwaysnetworks: es-network: driver: bridge
Estas são as minhas regras iptables usadas atualmente, que são até certo ponto o que eu quero, mas todo o tráfego para a porta 9200 de qualquer cliente ainda é permitido em vez de ser acessível apenas a partir do meu aplicativo:
*filter:INPUT DROP [0:0]:FORWARD DROP [0:0]:OUTPUT ACCEPT [779:162776]:DOCKER - [0:0]-A DOCKER -s xxx.xxx.xxx.xxx -p tcp -m tcp --dport 9200 -j ACCEPT-A DOCKER -o docker0 -p tcp -m tcp --dport 9200 -j ACCEPT-A DOCKER -p tcp --dport 9200 -j DROP-A INPUT -i lo -j ACCEPT-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT-A INPUT -m conntrack --ctstate INVALID -j DROP-A INPUT -p icmp -m icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT-A INPUT -p udp -m conntrack --ctstate NEW -j ACCEPT-A INPUT -p tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j ACCEPT-A INPUT -p tcp -m tcp --dport 44344 -j ACCEPT-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable-A INPUT -p tcp -j REJECT --reject-with tcp-reset-A INPUT -j REJECT --reject-with icmp-proto-unreachable-A INPUT -j DROP
Tentei desabilitar o suporte iptables do Docker e desabilitar a rede de ponte e ajustei as regras iptables algumas dezenas de vezes, mas sem sucesso.
Eu apreciaria qualquer sugestão e ajudaria a fazer isso acontecer porque estou sem ideias e resultados de pesquisa para esse problema.
Obrigado antecipadamente!