私は私の仕事をしています。sshd(8)
リスニングdomain
そしてhttps
港。 (このポートでは何が実行できますか?:)
明らかに、実際のDNS(TCPにフォールバックする場合)とHTTPSクライアントは、これらのポートをリッスンするSSHサーバーに接続しようとする可能性があります。 DNS/TCPおよびHTTPS/TCPクライアントから受信した接続試行の回数をどのように知ることができますか?たとえば、DNS / TCPクライアントまたはSSHサーバーと通信するHTTPS / TCPクライアントに固有のサーバーログを取得できるパターンはありますか?これを簡単に表示できるWebツールはありますか?
私はOpenBSD以上にリンクしているので/etc/services
、sshd
OpenBSDでこれを行う方法に主に興味があります。ただし、これを行うクロスプラットフォームの方法があり、単一のオペレーティングシステムに限定されない場合はそれを含めます。
答え1
コンテンツベースのファイアウォールルールを追加して、着信接続の最初の数バイトを分析できます。たとえば、Linuxではiptablesを使用します。
iptables -N notssh
iptables -A input -p tcp --dport 443 -m string --algo bm --from 0 --to 7 ! --string SSH-2.0 -j notssh
ルールのカウンタは、ルールnotssh
が作成された後、またはリセットカウンタが使用されてからルールが実行された回数を提供しますiptables -Z notssh
。個々のルールのカウンタもあります。
これは、TCP接続の最初のパケットが7バイト未満を含むSSHプロトコルへの接続を誤って計算しますが、実際にはそうではありません。
答え2
TCPクライアントのDNSは、次のようにシミュレートできます。dig(1)
次のようになります(ボックス自体ではポートが翻訳されない可能性があるため、22
明示的にポートを使用します)。domain
dig @example.org -p22 +tcp example.org
それとも:
dig @example.org -p22 axfr example.org
次の項目が発生しているようです/var/log/authlog
。
Jan 10 15:08:41 example sshd[21075]: Did not receive identification string from 64.124.xxx.xx
Jan 10 15:08:51 example sshd[22052]: Did not receive identification string from 64.124.xxx.xx
Jan 10 15:09:01 example sshd[24980]: Did not receive identification string from 64.124.xxx.xx
そしてhttps、
curl https://example.org:22/
次のエントリが生成されているようです(試行あたりのエントリ数はブラウザによって異なります)。
Jan 10 15:25:06 example sshd[9203]: Bad protocol version identification '\\026\\003\\001' from 64.124.xxx.xx
一部のHTTPS接続試行も、文字が1つ少なくなるようです。
Bad protocol version identification '\\026\\003' from
他の可能なすべてのバリエーションを識別できます。
% fgrep " sshd[" /var/log/authlog | cut -d" " -f7-12 | grep ^Bad | sort | uniq -c | sort -rn | head
351 Bad protocol version identification '\\026\\003\\001' from
110 Bad protocol version identification '\\026\\003\\001\\001E\\001' from
91 Bad protocol version identification '\\026\\003\\002' from
63 Bad protocol version identification '\\026\\003\\001\\001=\\001' from
52 Bad protocol version identification '\\026\\003\\001\\002' from
44 Bad protocol version identification '\\026\\003\\003' from
21 Bad protocol version identification '\\026\\003\\001\\001?\\001' from
16 Bad protocol version identification '\\026\\003\\001\\001B\\001' from
13 Bad protocol version identification '\\026\\003\\001\\0017\\001' from
10 Bad protocol version identification '\\026\\003' from
可能な要求も確認できますdomain
。
% fgrep " sshd[" /var/log/authlog | cut -d" " -f7-12 | grep ^Did | sort | uniq -c
227 Did not receive identification string from
答え3
これはより複雑な解決策ですが、試してみることができます。sslh
SSL/SSHマルチプレクサただし、DNSパケットチェックを手動で追加し、sslh
元のクライアントのアドレス(view
DNS、allow/deny
Webサーバー、およびfrom=
SSH authorized_keys
)が必要な場合は、透過モードで設定する必要があります。