Mutt trava algumas vezes quando a conexão é limitada a imap.gmail.com

1

Eu queria restringir os clientes de e-mail a se conectarem a apenas 1 servidor IMAP - imap.gmail.com. E escrevi esta regra do iptables:

iptables -A OUTPUT -d imap.gmail.com -p tcp --dport imaps -j ACCEPT

Eu tenho um cliente de email: mutt, que às vezes se conecta a este servidor. E às vezes não.

Quando eu removo "-d imap.gmail.com" da regra, ele começa a funcionar toda vez:

iptables -A OUTPUT -p tcp --dport imaps -j ACCEPT

Talvez, de alguma forma, esteja relacionado ao fato de o Gmail ter muitos IPs, e o mutt tenta se conectar a um IP diferente da próxima vez. E o firewall bloqueia isso?

Como devo especificar o host permitido neste caso?

    
por user4035 11.12.2015 / 23:48

1 resposta

1

imap.gmail.com tem muitos endereços IP diferentes, o que não é surpreendente para um serviço de alto volume e alta disponibilidade. O servidor DNS aparentemente retorna dois endereços (pelo menos para mim), mas o conjunto de endereços muda com o tempo (permanece o mesmo por alguns minutos devido ao armazenamento em cache).

Quando você define a regra, o servidor DNS retorna dois endereços A1 e A2. O programa iptables é inteligente o suficiente para detectar isso e cria duas regras, uma para cada um dos dois endereços IP.

Alguns minutos depois, você executa seu cliente de e-mail e suas solicitações DNS retornam dois endereços A3 e A4, que na maioria das vezes não serão iguais a A1 e A2. Então o mutt usa o primeiro A3, e esse endereço é bloqueado pelo seu firewall.

O firewall só vê pacotes IP. Não é possível saber qual nome DNS o cliente de email usa. Na verdade, o cliente de e-mail poderia ter usado o endereço IP diretamente. Pacotes IP são endereçados a endereços IP, eles não contêm nomes de host. Pode haver nomes de host dentro da conexão IMAP, mas como você está usando o IMAPS, a conexão é criptografada e o firewall não pode espionar o tráfego.

O servidor envia sua identidade (em um certificado) durante o handshake SSL, para que você possa inspecionar o tráfego e abortar a conexão se o certificado do servidor não for do seu agrado. Você pode fazer isso com o iptables , embora não seja 100% confiável (Eu acho que só funciona se a string que você está combinando estiver dentro de um único pacote TCP). Para fazer isso de forma totalmente confiável, você precisa configurar um proxy sensível ao conteúdo.

    
por 12.12.2015 / 01:12