Obrigado a este comentário, o problema está resolvido:
Em vez de iptables -A FORWARD -m set --match-set myset dst -j DROP
Eu tive que usar o iptables -A FORWARD -m set --match-set myset dst,dst -j DROP
(dois dst em vez de um)
O problema é que atualmente tenho três máquinas virtuais de teste, Cliente1 , ip 192.168.1.10
, Cliente2 , ip 192.168.2.20
e Roteador com ip 192.168.1.1
e 192.168.2.1
como gateway para conectar Client1 e Client2.
No Roteador , tenho hash:ip,port
set, por exemplo:
ipset add myset 192.168.2.20,tcp:80
e ipset add myset 192.168.2.20,tcp:443
Em Client2 , tenho a configuração nginx para escutar na porta 80 e não quero que o Client1 possa se conectar ao Client2 via tcp na porta 80, no roteador eu adiciono uma regra: iptables -A FORWARD -m set --match-set myset dst -j DROP
Em Client1 eu exec wget 192.168.2.20/index.html
e devido às minhas regras iptables no Roteador , Client1 não deve ser capaz de se conectar a < strong> Client2 e pegue index.html
, no entanto, ele não funciona e o arquivo pode ser recuperado com sucesso.
O problema é apenas com hash:ip,port
set tipo de ipset. Se eu escolho hash:ip
type e movo protocol / port part para iptables de ipset, tudo funciona bem. No entanto, preciso usar exatamente o ipset para poder trocar listas de bloqueio a qualquer momento.
O que estou fazendo de errado? Todas as 3 VMs estão rodando no Ubuntu 17.04, instalação mínima, sem GUI.
Obrigado a este comentário, o problema está resolvido:
Em vez de iptables -A FORWARD -m set --match-set myset dst -j DROP
Eu tive que usar o iptables -A FORWARD -m set --match-set myset dst,dst -j DROP
(dois dst em vez de um)