hosts.deny でホスト名の逆 DNS を許可する方法

hosts.deny でホスト名の逆 DNS を許可する方法

sshd割り当てられた 1 つの動的 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またはも試しましたnosshd_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 アドレスが subdomain.ddns.net ではなく xxx.yourisp.com に逆になっていることが原因である可能性が最も高いです。

(動的) IP アドレスから sshd に接続しようとすると、tcpwrappers は IP アドレスの逆 DNS ルックアップを実行します。これが xxx.yourisp.com に解決される場合、hosts.allow または (hosts.deny の場合は) 一致するものが見つからないため、IP から sshd への接続は許可されません。

回避策としては、/etc/hosts ファイルに subdomain.ddns.net を追加し、数分ごとに実行して、動的 IP アドレスが変更されるたびにこのエントリを更新する cron ジョブを作成することを検討してください。これはあまり洗練された解決策ではありませんが、最近この問題に直面したときに思いついた最善の方法です。よりクリーンな解決策をご存知の方がいらっしゃいましたら、コメントをお願いします。

答え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

関連情報