これから初めてのMisskeyサーバーを建てたい人がすべきセキュリティ対策など
これなに
これはMisskey Advent Calender 2023 2日目の記事です。
Misskeyに慣れてきて「自分でもサーバー建ててみたいけどセキュリティとか何すればいいか1mmもわからん」っていう人向けの記事です。
私のMisskeyやFediverseとの馴れ初めは2日後に公開されるであろうFediverse Advent Calender 4日目の記事をご覧ください。
はじめに
書いてる人も初心者なので、もっとこうすべきというのがありましたら@esurio1673@koliosky.comにDMしてきてください。
あなた誰
小規模Misskeyサーバーこりおすきーというサーバーを運営しているカモメです。今年の3月ごろにMisskeyの存在を認知して登録したらドはまりして今に至ります。
よくある攻撃は?
sshブルートフォースと(D)DoS、脆弱性をついた攻撃でしょうか。
私もsshブルートフォースは来ました。ログのところに大量に[UFW BLOCK]
が並ぶのは壮観ですよ。
対策その1 DDoS
WAFでどうにかしましょう。Cloudflareや各VPSが提供していますのでそれらを利用してください。
対策その2 脆弱性
毎日セキュリティ更新が来ていないかチェックしましょう。また、これは主にMisskey鯖缶向けですが、しれっとセキュリティパッチがcommitされているし説明がない時があるので、なるべく最新版にアップグレードしたり、fork版を使っている場合はcommitを取り込みましょう。
対策その3 sshブルートフォース
これは色々やりようがありますね。
思いつくだけでも下の5つがあります。
パスワード認証の無効化
rootログインの無効化
ufw/iptablesを使う
Tailscaleを使う
WAFを使う
というわけで順を追って説明していきます。
パスワード認証/rootログインの無効化はsshd_configの設定をいじります。
この2つを無効化するのは、sshブルートフォースがよく狙うのがrootやadminといった管理者を表すユーザー名だからです。私も実際に狙われました。 テキストエディタはnanoを使っていますがvimやviを使いたい人はそっち使って大丈夫です。※rootを使って作業することは非推奨ですので、あらかじめ作業用ユーザーは作成しておいてください。作業用ユーザーはsudoグループに入れておいてください。
mkdir .ssh //.sshというフォルダを作る
chmod 700 .ssh //chmod 777は誰でも操作できるようになるのできわめて危険。よほどのことがない限り万死に値する
cd .ssh
touch authorized_keys
chmod 600 authorized_keys
sudo nano authorized_keys //公開鍵をコピペする
sudo nano /etc/ssh/sshd_config
sshd_configの編集画面になったら、PermitRootLoginとPasswordAuthenticationをnoに変えましょう。頭に#が付いている部分は無効ですので、PermitRootLoginとPasswordAuthenticationの頭に#がついていたら外しましょう。
ufw/iptablesは大雑把に言えばどちらもLinuxに搭載されているファイヤーウォールソフトウェアです。一番基本で一番大事です。
port 22にアクセスできるのは自宅くらいに絞りましょう。
ufw allow from YOUR_IP to any port 22 //ufwの場合
iptables -A INPUT -p tcp -s YOUR_IP --dport 22 -j ACCEPT //iptablesの場合
いずれかを実行すれば、自宅IPからのみアクセスできるようになるはずです。※自宅IPがころころ変わるようであれば固定IPでも入手しておきましょう。
また、万が一port 3000が開いている場合はアクセスできないように(ufwなら)denyにしておきましょう。
TailscaleはVPNサービスの一つで、WireGuardというプロトコルを使っているサービスです。機能が豊富で簡単に利用でき、個人であれば無料で100台まで登録できます。このサービスの機能の一つであるExit nodeを指定することによってIPアドレスを自宅に変更しましょう。外出先でもセキュアにサーバーにアクセスできます。(さすがに店のフリーWiFiではやらないでください。)
WAFはWeb Application Firewallの略称で、様々なサービスが提供しています。VPS会社が提供している場合、ポート制限をかけることができることがほとんどですので、これらも使うことでサーバーに到達することなく防ぐことができます。かといって上記3つの対策をしなくていいわけではないので、これらとセットで使うことでセキュリティを高めることができます。
その他1 chmod 777とは? なぜ万死に値するの?
chmodというコマンドでは、ファイルに対する権限を設定することができます。権限を設定する方法には2種類あり、アルファベットと数字です。
数字の場合、4が読み取り、2が書きこみ、1が実行です。これに対応するアルファベットはそれぞれr、w、xとなります。これらを所有者、所有グループ、その他の順に入力することでどのユーザーがファイルに対して読み取り・書き込み・実行できるのかを決めることができるというコマンドです。
権限をを数字で設定する方法では、足し算を使って順に決定することができます。4+2+1=7ですから、chmod 777とは対象のファイル・フォルダに対してすべてのユーザーが読み取り・書き込み・実行することができるようになるコマンドです。そんなことをしたらセキュリティ的に危ういので絶対にやめましょう。万死に値します。権限は必要最小限にしましょう。当然666も誰でも読み取り・書き込みできるわけですから非推奨です。
その他2 ssh-keygenで生成する公開鍵形式
ssh接続する際に、公開鍵を生成する必要があるためssh-keygenというコマンドを打つかと思いますが、デフォルトではRSA方式、ビット長を指定しないとWindows 11 23H2ではRSA 3072という形式で公開鍵が生成されるかと思います(それ以前だとおそらくRSA 2048?)。
RSA 2048の場合コンピューター性能向上などによって現在では非推奨になりつつあります。GnuPGというセキュリティソフトの公式サイトによれば、「RSA-2048が提供する以上のセキュリティが必要な場合、RSAを使い続けるのではなく、楕円曲線暗号に切り替えるのがよいだろう。」とされています。したがってssh-keygenで生成する鍵方式は、RSAではなく楕円曲線暗号の一種であるEd25519を-tで指定するとよいでしょう。
Ed25519はOpenSSH 6.5以上、OpenSSL 1.1.1以上でサポートされています。
RSA 1024以下を使っている場合は今すぐやめてください。
その他3 Misskeyのセキュリティアップデート
Misskeyのセキュリティアップデート及びcommitは本当にしれっと行われていることが多く、リリースノートに記載されない場合もあるため、自身でフォークした場合、積極的にMisskey本家のリポジトリを監視しておき、commitを取り込んでおきましょう。Firefishなどのフォークソフトウェアの場合、事前に提供されない場合がありますので注意しましょう。自分でフォークして該当commitを発掘して取り込むという方法もあります。
その他4 syslogを監視しよう
syslogとは雑に言うとLinuxなどのUNIX系OSでのシステム関連のログです。
syslogを監視することによってユーザーの振る舞い・認証違反などのセキュリティ監査を行ったり、Misskeyやmeilisearchなどのソフトウェアの挙動を確認・分析することができます。
syslog監視のソフトウェアとして有名なのはZabbixですが、用意するのが面倒だという人はもっと楽にsyslog監視ができるNew Relicというサービスを使うとよいでしょう。余談ですがNew RelicはGitHub Educationで特典をもらうことができます。
サーバーメトリクス監視やログ監視をしていて気になる挙動があればすぐに調べましょう。突破されたことなどを検知しやすくなります。
その他5 SSL/TLS周り
MisskeyはSSL証明書を切らすとActivityPubの配送に失敗してパフォーマンスに悪影響が出るほか、配送先サーバーにも迷惑をかけることになります。証明書は切らさないように自動更新にしてください。
また、nginxの設定ファイルでssl_protocolを明示的に指定しない場合TLS 1.0, TLS 1.1という現在では非推奨のプロトコルに対応してしまうようです。これらのバージョンではダウングレード攻撃というセキュリティ的に脆弱なバージョンを指定する攻撃の対象になります。したがって、ssl_protocolはTLS 1.2, TLS 1.3の2つのバージョンを指定してください。
Cloudflareを使用している場合、この設定を行ってもTLS 1.0, TLS 1.1で通信できることがあります。これを防ぐために、Cloudflareのダッシュボードからあなたのドメインにアクセスし、SSL/TLS>エッジ証明書から最小TLSバージョンを1.2に指定してください。TLS 1.3に対応する場合はその下にある項目から有効にすることができます。
おまけ1
暇なときはコンソール開いてsudo apt update叩いてみましょう。結構な確率で何か更新が来ています。apt(-get) upgradeで更新できない場合はapt installで更新できなかったパッケージ名を指定すると更新できます。
おまけ2
自宅サーバーの場合、当然ですがこれに追加して諸々の設定が発生します。
自宅ネットワークに侵入されないように設定はしっかりしましょう。
面倒だという人はVPS使いましょう。金銭を代償に楽できます。
おまけ3
MisskeyはPostgreSQLのDBが吹っ飛ぶと死ぬので、バックアップはこまめに取りましょう。DBのバックアップさえあれば何とかなる場合があります。
おまけ4 ※2023/12/06追記
ジョブキューが詰まるとどうなるかというと、メモリ使用率が上がるなどしてサーバーに余計な負荷がかかります。閉鎖する際は410出しましょう。
おわり
自分自身がMisskeyのサーバーを建ててからまだ日が浅く、セキュリティに対する知識もまだまだ足りていないため、誤った点などがあると思いますが、とりあえず自分のような初心者でもできるセキュリティ対策を自分の備忘録がてら書いてみました。
自分でサーバーを建てることは勉強という面でもよいですし、自分の好きなSNS像を体現することもできます。大きいサーバーにアカウントを作って慣れてきたら、自分でサーバーを建ててみたらいかがでしょうか。
これからサーバー建てる人は頑張ってください。
最後に追記しますが、当然の話としてパスワードは記号を含む複雑なものにしてください。パスワードマネージャーに付属しているパスワード生成器を使うのおすすめです。