Estou correndo Debian 8.11
com iptables v1.4.21
e ipset v6.23, protocol version: 6
.
Estou tentando bloquear o acesso a certas portas para todos, exceto um pequeno conjunto de hosts, mas parece que não está funcionando.
Em primeiro lugar, coloquei uma pequena lista de endereços IP em uma ipset
lista chamada allowed-hosts
. Então, depois de executar sudo /sbin/iptables -F
e sudo /sbin/iptables -X
, eu emito os seguintes comandos:
sudo /sbin/iptables -I INPUT -p tcp -m multiport --destination-port 110,143,993,995 -j DROP
sudo /sbin/iptables -I INPUT -p tcp -m multiport --destination-port 110,143,993,995 -m set --match-set allowed-hosts src -j ACCEPT
No entanto, mesmo depois de fazer isso, os clientes de endereços IP que não estão presentes allowed-hosts
ainda estão se conectando com êxito a todas as portas nomeadas.
Não há outras iptables
regras em vigor.
Aqui estão os resultados de sudo /sbin/iptables -L
...
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere multiport dports pop3,imap2,imaps,pop3s match-set allowed-hosts src
DROP tcp -- anywhere anywhere multiport dports pop3,imap2,imaps,pop3s
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
E aqui estão os resultados de sudo /sbin/iptables-save
...
# Generated by iptables-save v1.4.21 on Wed Jun 8 11:53:09 2022
*security
:INPUT ACCEPT [16777464:2727427757]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [18889599:33356814491]
COMMIT
# Completed on Wed Jun 8 11:53:09 2022
# Generated by iptables-save v1.4.21 on Wed Jun 8 11:53:09 2022
*raw
:PREROUTING ACCEPT [21444955:3000669583]
:OUTPUT ACCEPT [18889599:33356814491]
COMMIT
# Completed on Wed Jun 8 11:53:09 2022
# Generated by iptables-save v1.4.21 on Wed Jun 8 11:53:09 2022
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
# Completed on Wed Jun 8 11:53:09 2022
# Generated by iptables-save v1.4.21 on Wed Jun 8 11:53:09 2022
*mangle
:PREROUTING ACCEPT [21444955:3000669583]
:INPUT ACCEPT [21444952:3000669415]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [18889599:33356814491]
:POSTROUTING ACCEPT [18889599:33356814491]
COMMIT
# Completed on Wed Jun 8 11:53:09 2022
# Generated by iptables-save v1.4.21 on Wed Jun 8 11:53:09 2022
*filter
:INPUT ACCEPT [2130649:527089827]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [4465281:1887206637]
-A INPUT -p tcp -m multiport --dports 110,143,993,995 -m set --match-set allowed-hosts src -j ACCEPT
-A INPUT -p tcp -m multiport --dports 110,143,993,995 -j DROP
COMMIT
# Completed on Wed Jun 8 11:53:09 2022
O que posso estar fazendo incorretamente?
Agradeço antecipadamente.
** ATUALIZAÇÃO **
Em primeiro lugar, "src" realmente está sendo especificado, ao contrário do que foi sugerido no comentário abaixo. Ele aparece na linha "... src -j ACCEPT", acima.
Em segundo lugar, a sintaxe desses iptables
comandos que estou usando vem do que é mostrado tanto nos iptables
documentos quanto nas discussões que foram encontradas em pesquisas na web.
Em terceiro lugar, veja acima a iptables -L
saída. Isso mostra claramente que as conexões com as portas devem ser aceitas de source=anywhere
to destination=anywhere
para os endereços IP na allowed-hosts
lista. Isso também mostra claramente que as conexões com as portas devem ser descartadas de source=anywhere
para destination=anywhere
os endereços IP que não estão na allowed-hosts
lista.
Pelo menos é o que iptables
parece estar me dizendo. No entanto, as conexões com essas portas de endereços IP que não estão na allowed-hosts
lista ainda estão sendo aceitas em minha máquina.
Além disso, se eu fizer ipset test allowed-hosts aaa.bbb.ccc.ddd
, onde "aaa.bbb.ccc.ddd" representa um endereço IP que não está em allowed-hosts
, recebo corretamente esta saída:
aaa.bbb.ccc.ddd is NOT in set allowed-hosts.
E se eu fizer ipset test allowed-hosts www.xxx.yyy.zzz
, onde "www.xxx.yyy.zzz" representa um endereço IP que está em allowed-hosts
, recebo corretamente a seguinte saída:
www.xxx.yyy.zzz is in set allowed-hosts.
Observando a saída de iptables-save
, acima, o que mais na minha configuração pode estar fazendo com que essas conexões com portas não allowed-hosts
sejam aceitas?
Obrigado novamente, antecipadamente.
Acontece que isso está funcionando, afinal. Sinto muito pelo alarme falso.
Eu incorretamente pensei que não estava funcionando corretamente pelo seguinte motivo ...
Estou usando
postfix
edovecot
, e configureipostfix
para usardovecot
para executar seus serviços de autenticação.Eu configurei
dovecot
para gravar suas mensagens de depuração e log em um arquivo chamado/var/log/mailclient.log
, enquantopostfix
está configurado para logar viasyslog
.Eu não estava pensando claramente e esqueci o fato de que
postfix
as tentativas de autenticação do ' também fariam com que as entradas aparecessem nesse mesmodovecot
arquivo de log, já quedovecot
é aquele que está realizando essapostfix
autenticação.Estou usando apenas minhas
iptables
regras para bloquearpop3
eimap
(portas 110, 143, 993 e 995), e não estou bloqueandopostfix
as portas de .Dada a forma como configurei a
postfix
autenticação, há entradas nesse/var/log/mailclient.log
arquivo para todas aspostfix
tentativas de login, bem como para asdovecot
tentativas de login. Eu não estava prestando atenção ao ler essas entradas neste arquivo de log e, erroneamente, pensei que eram tentativas de login parapop3
eimap
, em vez desmtp
tentativas de login. Portanto, confundi essassmtp
tentativas de login (que não estou bloqueando) com tentativas depop3
loginimap
.Uma vez que entendi meu erro, examinei e analisei com mais cuidado meu
dovecot
arquivo de log e agora percebo que, de fato, nenhuma das conexõespop3
nemimap
está chegando ao pombal, exceto aquelas que se originam do pequeno subconjunto de hosts que coloquei no meu lista de "hosts permitidos"ipset
.Portanto, as
iptables
entradas que listei acima estão realmente funcionando corretamente, afinal.Mais uma vez, peço desculpas pelo meu alarme falso, e estou feliz que isso esteja funcionando.
Talvez esta pergunta e discussão possam ajudar alguém no futuro que possa cometer o mesmo erro que eu cometi.