Как разрешить обратный DNS имени хоста в hosts.deny

Как разрешить обратный DNS имени хоста в hosts.deny

Я хочу ЗАБЛОКИРОВАТЬ все sshdсоединения, КРОМЕ одного динамического IP-адреса, назначенного, <subdomain>.ddns.netпоэтому я ввожу это /etc/hosts.deny:

sshd: ALL EXCEPT <subdomain>.ddns.net

Это не позволяет мне подключиться к SSH.
Вместо этого, если я помещаю IP, разрешенный ( dig <subdomain>.ddns.netподтверждает его) этим именем хоста, это работает:

sshd: ALL EXCEPT <ipv4.resolved.by.hostname>

Я также пробовал с UseDNS yesили noв sshd_config, но это ничего не меняет.

Межсетевой экран (UFW) открыт по правилуufw limit ssh

Мой реальный /etc/ssh/sshd_configздесь ниже:

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

решение1

Проблема, скорее всего, связана с тем, что IP-адрес, с которого вы подключаетесь, обращается к xxx.yourisp.com, а не к subdomain.ddns.net.

Когда вы пытаетесь подключиться к sshd с вашего (динамического) IP-адреса, tcpwrappers выполняет обратный DNS-поиск по вашему IP-адресу. Если он разрешается в xxx.yourisp.com, то он не найдет соответствия в hosts.allow или (hosts.deny, как это может быть), и, следовательно, он не разрешит подключение к sshd с вашего IP-адреса.

В качестве обходного пути вы можете рассмотреть возможность добавления subdomain.ddns.net в файл /etc/hosts и создания задания cron, которое будет запускаться каждые несколько минут и обновлять эту запись вашим динамическим IP-адресом при каждом его изменении. Это не очень элегантное решение, но это лучшее, что я смог придумать, когда сам недавно столкнулся с этой проблемой. Если кто-то знает более чистое решение, пожалуйста, прокомментируйте.

решение2

Для этого вы будете использовать и , и /etc/hosts.allow. В , поместите следующее:/etc/hosts.deny/etc/hosts.allow

sshd: blablabla.ddns.net

В /etc/hosts.deny вставьте следующее содержимое:

sshd: ALL

Это будет работать, потому что /etc/hosts.allowперекрывает /etc/hosts.deny. Но есть одна загвоздка: если ваш сервер находится за шпилькой NAT (некоторые также называют это отражением NAT), некоторые соединения будут отображаться с внутренним IP-адресом вашего шлюза к вашему серверу, поэтому их может быть сложно заблокировать.

Другой вариант — использовать iptables, например:

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

Просто имейте в виду, что iptables учитывает порядок своих правил.

Удачи.

решение3

Я использую скрипт для создания списка доменов в списке IP-адресов и включаю его в hosts.allow

Описание здесь:

https://serverfault.com/a/1105670/974219

Связанный контент