Eu tenho um servidor no Digital Ocean e estou usando-o para implantar vários contêineres docker e proxies reversos para hospedá-los no Nginx.
Tenho 2 domínios vinculados ao meu servidor (IP Público Único). Vamos chamá-los de domínio1.com e domínio2.com
Agora tenho 2 serviços em execução no docker, Postgres (porta 5432) e MySQL (porta 3306)
Configurei proxies reversos para traduzir domain1.com para localhost:5432 e domain2.com para localhost:3306:
server {
listen 80;
server_name domain1.com;
location / {
proxy_pass http://localhost:5432;
}
}
server {
listen 80;
server_name domain2.com;
location / {
proxy_pass http://localhost:3306;
}
}
O que está me incomodando aqui é que se eu tentar acessar domínio1.com:3306, a conexão funciona, o que eu não quero. Quero que cada domínio seja acessível apenas pelo serviço atribuído a eles.
Por exemplo, um telnet para domínio1.com:5432 externo deve funcionar, mas um telnet para domínio2.com:3306 não.
Alguém pode ajudar por favor ?
Responder1
Você tem que fazer o seumysqlinstância para escutar localmente ( Container Host ) apenas, para que os usuários finais não possam acessá-la de fora, apenas o nginx e outros processos locais podem fazê-lo.
Então para isso basta reconstruir sua imagem com a configuração correta domeu.cnf:
FROM mysql
COPY custom.cnf /etc/mysql/my.cnf
Ou sem reconstruir a imagem (antes de executar):
docker run -v <path_to_custom.cnf>:/etc/mysql/conf.d
Ondemeu.cnfdeve conter a seguinte configuração:
bind-address=<host_ip>
Você pode fazer o mesmo porPostgres.
EDIT 1: Desde o seu último comentário:
server{
listen 3306;
server_name domain2.com;
return 403;
}
Você pode fazer isso vice-versa para bloquear o tráfego emnginxnível; mas se você quiser bloquear totalmente o tráfego para que ele não seja processado pelo kernel, por exemplo, o telnet mostrará a conexão recusada, você terá que fazer isso emCamada 3comtabelas de ip.