Назад | Перейти на главную страницу

Как разрешить обратный 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 curve25519-sha256@libssh.org
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,umac-128@openssh.com
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

Проблема, скорее всего, связана с тем, что 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-адресом при каждом изменении. Это не очень элегантное решение, но это лучшее, что я мог придумать, когда недавно сам столкнулся с этой проблемой. Если кто-то знает более чистое решение, прокомментируйте.

Вы будете использовать оба /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 учитывает порядок своих правил.

Удачи.