
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
またはも試しました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 アドレスが 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に含めています
説明はここにあります: