Я хочу ЗАБЛОКИРОВАТЬ все 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 учитывает порядок своих правил.
Удачи.