
Desejo BLOQUEAR todas sshd
as conexões, MAS um IP dinâmico atribuído a um, <subdomain>.ddns.net
então coloquei isso /etc/hosts.deny
:
sshd: ALL EXCEPT <subdomain>.ddns.net
Isso não me permite conectar ao SSH.
Em vez disso, se eu colocar o IP resolvido (a dig <subdomain>.ddns.net
confirma) por esse nome de host, funciona:
sshd: ALL EXCEPT <ipv4.resolved.by.hostname>
Também tentei com UseDNS yes
ou no
in sshd_config
, mas não muda nada.
Firewall (UFW) está aberto pela regraufw limit ssh
Meu real /etc/ssh/sshd_config
aqui abaixo:
Protocol 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
KexAlgorithms [email protected]
Ciphers [email protected],[email protected],[email protected],aes256-ctr,aes192-ctr,aes128-ctr
MACs [email protected],[email protected],[email protected],hmac-sha2-512,hmac-sha2-256,[email protected]
PermitRootLogin no
AllowUsers remotessh
IgnoreRhosts yes
PasswordAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
UsePAM yes
X11Forwarding no
PrintMotd no
PubkeyAuthentication yes
AllowTcpForwarding no
AllowStreamLocalForwarding no
GatewayPorts no
PermitTunnel no
UseDNS no
# Allow client to pass locale environment variables
AcceptEnv LANG LC_*
# override default of no subsystems
Subsystem sftp /usr/lib/openssh/sftp-server
Responder1
O problema provavelmente se deve ao fato de que o endereço IP do qual você está se conectando é reverso para xxx.yourisp.com, não para subdomínio.ddns.net.
Quando você tenta se conectar ao sshd a partir do seu endereço IP (dinâmico), o tcpwrappers faz uma pesquisa reversa de DNS no seu endereço IP. Se isso resolver para xxx.yourisp.com, então ele não encontrará a correspondência em hosts.allow ou (hosts.deny como pode) e, portanto, não permitirá a conexão com sshd do seu ip.
Como solução alternativa, você pode considerar adicionar subdomain.ddns.net ao seu arquivo /etc/hosts e criar um cron job que seja executado a cada poucos minutos e atualize essa entrada com seu endereço IP dinâmico sempre que ele for alterado. Não é uma solução muito elegante, mas é a melhor que consegui encontrar quando recentemente enfrentei esse problema. Se alguém souber de uma solução mais limpa, comente.
Responder2
Você usará ambos /etc/hosts.allow
e /etc/hosts.deny
para conseguir isso. Em /etc/hosts.allow
, coloque o seguinte:
sshd: blablabla.ddns.net
Em /etc/hosts.deny, insira o seguinte conteúdo:
sshd: ALL
Funcionará porque /etc/hosts.allow
se sobrepõe /etc/hosts.deny
. Mas há um problema: se o seu servidor estiver atrás de um NAT hairpin (alguns também chamam isso de reflexão NAT), algumas conexões aparecerão com o endereço IP interno do seu gateway para o seu servidor, por isso pode ser difícil bloqueá-lo.
Outra opção é usar iptables, assim:
iptables -t filter -A INPUT -s blablabla.ddns.net -p tcp --dport 22 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport -j DROP
Esteja ciente de que o iptables leva em consideração a ordem de suas regras.
Boa sorte.
Responder3
Estou usando um script para criar uma lista de domínios em uma lista de IP e incluí-la em hosts.allow
A descrição está aqui: