最近 FreeBSD で xrdp を動かして、家の外から接続できるようにしました。
ports を作成してくださっている meta さん、ありがとうございます。
xrdp のログを見ていると、接続できるようにしてからすぐ、bot によると思われる
攻撃があります。1時間ごとや15分ごとに、律儀に何度かやってきています。
ssh だと sshguard などの対策があるせいか、同じ IP address から試すのは2回まで
というようになっているようですが、RDP の場合は10回以上同じ IP address から
攻撃があったりします。
パスワードを強いものにするのは当然のこととして、xrdp のログから攻撃があるのを
判定してファイアウォールのルールに加えるということをやりたいのですが、眺めている
限りは複数行を見て判定しないといけないようで、面倒だなと思っています。
こういうことをやっているという方がいらっしゃいましたら、どうやっているのか教えて
ください。
"non-TLS connection established" な接続があったら、問答無用でその IP address から
の接続を遮断してもいいのかもしれませんが。
xrdp が syslog に auth.info なり auth.priv でエラーを出してくれればいいのですが、
やってくれないようなのですよね。
xrdpでのログイン時にauth情報を記録する(wコマンドでログイン中の
ユーザが表示できるようにする)ことや、xrdpのblacklistd対応はやり
たいのはやまやまなのですが、今の所そこまで手が回っていません。
xrdpはクライアントからの接続を待ち受けるプロセスと、認証を行う
プロセスが分かれているため認証側プロセスで接続元のIPアドレスを
どう取得するかがハードルとなっています。
当座の代替手段として、次のように待受をinetdにやらせることで緩和
することが可能です
1. xrdpのListenポートを3390などに変更する
2. 3390/tcpをipfw等でlocalhostのみからの接続に制限する
3. inetd.conf に以下のような設定を追加して、inetdをrestartする
rdp stream tcp46 nowait/3/1 nobody /usr/local/bin/socat socat stdin tcp4:127.0.0.1:3389
nowait/3/1 の部分で同一IPアドレスからの接続回数を制限しています。
詳しくは man inetd.conf を参照下さい。ただし、この方法だとxrdpの
ログに接続元IPアドレスがlocalhost(127.0.0.1)でしか残らないのが
難点です。
他にも方法はあると思いますが、方法の一つとしてご提案まで。
--
meta <me...@FreeBSD.org>
https://people.freebsd.org/~meta/