2020年12月5日土曜日

Ubuntuサーバーの現状と今までにやったこと、今後のToDo

当初はLinuxの操作を勉強するために使い始めたLinuxマシン(NEC Mate上で絶賛稼働中)ですが、現在はサーバーの勉強のため、様々なサーバーアプリケーションが稼働しています。

現状、自宅のサーバーマシン(Ubuntu 20.04.1 LTS)は、概ね以下のような構成で稼働しています。

・Webmin (GUIサーバー管理ソフト、削除予定)
・Samba SMBサーバー (Webmin経由でセットアップ)
・OpenSSH SSHサーバー (パスワード認証方式)
・nginx Webサーバー
    ・phpBB3
    ・phpMyAdmin
    ・WordPress
・PHP-FPM 7.4 (via Unixドメインソケット)
    ・php-curl
    ・php-gd
    ・php-imagick
    ・php-mbstring
    ・php-mysql
    ・php-mbstring
    ・php-xml
・MySQLサーバー

多分以上ですべてだと思います。

Webminが導入されている理由ですが、最初はとにかくこのマシンをNAS代わりにしたく、色々試行錯誤していたんですがSambaのコンフィグレーションの仕方がわからず、とりあえず後先考えずにWebminをインストールした感じです。
Web上から余計な設定を叩けるツールをインストールしておくのはセキュリティを考えるとあまり好ましくなさそうなので、セキュリティホール潰しとしてアンインストールを考えています。ただ、私自身、Sambaの設定がよく分かっていないので、今WebminをアンインストールするとSMBサーバーのメンテができなくなりそうで怖いです。少し躊躇していますねえ。

主にやったことの詳細ですが...(時系列順ではない)

・Linuxの基本操作とパーミッションの仕組みについて正しく理解する
パーミッションとはファイルやディレクトリに対して行える操作の権限のことです。特定のユーザーやユーザーグループに対して正しくパーミッションを付与し、招かれざるユーザーには制限された権限を与える、といった設定を行う必要があります。このためには、chmodやchownなどのコマンドを使用しますが、コマンドの使用方法については検索してください。
難しそうだなあ、と最初は思いましたが、特にそんなこと無いです。簡単簡単。

・vi(m)の習得
いずれは通る道なので覚えておきたい。
Escキーを押して標準モード、iキーを押して挿入モード、oキーを押して行挿入、ddキーを押して行のカット、あたりを覚えておくといいかな。とにかく、モード切替を学べばあとは怖くありません。h, j, k, lを使ったカーソル移動は覚えるとmanコマンドでも役に立ちますが、ほとんどの場合は矢印キーでもカーソル移動できます。挿入モードだとデフォルトではカーソル移動にhjklを使えない?みたいなので、人によってはvimでも矢印キーをよく使ってるんじゃないかなあと思います。

・OpenSSHサーバーのインストール
sudo apt install -y openssh-server を叩くだけです。OK, やりましょう!
他のマシンからsshしてターミナルを叩けるのは非常に便利。ちなみに、自環境ではSFTPやSCPも特別に設定することなく使えるようになりました。
ところで余談ですが。インターネット経由でSSHしたい人もいるかもしれませんが、その場合はwell-knownポート番号(TCP: 22番)に設定してはいけないとされています。不正アクセス、不正ログインの温床のようです。どうしてもインターネット経由でSSHしたい場合は、49152 - 65535の範囲からポート番号を選べば良いでしょう。末尾を22以外に設定するのもおすすめで、たとえば59152などに設定するとSSH用のポート番号とは気づかれにくいです。ただ、ポートスキャンツールなどもあり、ポート番号の変更だけでは万全な対策とは言いがたいのが現状。攻撃対策は抜かりなく。

・FTPの暗号化(FTP→SFTP)
当初は考えなしに平文FTPのサーバーを運用していました。ですが、FTPは平文でユーザー名やパスワード、各種ファイルやディレクトリなどのデータを流してしまうため、今や運用してはいけないプロトコルの一つだと考えています。(ユーザー名やパスワードを要求しないのであれば別ですが)
個人的に、たとえLAN内であってもユーザー名やパスワードを平文で流すのは気持ち悪かったので、真っ先に暗号化しました。とはいっても、OpenSSHサーバーを導入しただけですが。

・nginxのURLリライト設定
phpBBやWordPressなど、Webアプリケーションの中には ".htaccess" ファイルが正常に機能し、URLがリライトされることを前提に作られているものがあります。これ困るんですよねー。nginxだと正常にリンクが機能せず、突然404が返ってきたりするので。
nginxの場合は、 "nginx.conf" ファイル内にすべての設定を記述することになっているため、URLリライト処理についても同様に記述する必要があります。nginxの設定についてはここでは触れません。

・DBサーバーインストール(MySQL)
データベースサーバーをインストールして、一通りphpMyAdminが使えるようになる所まで設定しました。うちのサーバーではMySQL8.0が動いているようです。バージョンによってもセットアップ方法が違い、戸惑いました。
今のところ、MySQLは、phpBBとWordPressのために動作しています。自分で直接DBを操作して勉強することもあるかも。あくまでも予定です。

あと、今後やりたいことですが...。

・ufw導入
・GUI環境削除、不要なパッケージの整理
・nginxの設定の見直し
・MySQLデータベースのパーミッション設定の見直し
・その他サーバーのセキュリティの見直し

を、ひとまずインターネット上での公開に先立つ準備として行いたいと考えています。
その後、ドメインの取得を行い、可及的速やかにhttps対応を行いたいかなあという考えです。

それから、公開サーバーの運用に必要となるメールサーバーですが、メールシステムの勉強という意味では、PostfixなどのMTAアプリケーションを自宅のサーバーにインストールするのも面白そうなのですが、ほとんどの個人向けISPからは、TCP25番経由で送信相手のメールサーバーのMTAに直接到達することができません(OP25B)。また、下手な設定のまま運用したりすると、迷惑メールの温床になるなど、色々とマズい事が起きるのかなあという所感です。ちなみにMTAはメールを送受信するだけではなくリレーする事もできるので、迷惑メールをバラ撒くための踏み台にされると良くないですね。
従って、メールサーバーの運用にはVPSを使うことを考えています。自分のドメインのメールアドレスが必要そうだったら、ということですが。

あと、今後やりたいこととして他に考えているのは...

・Rubyインタプリタの導入
・動作確認ついでにRedmineを動かしてみる
・ゆくゆくはMastodonを動かしてお一人様インスタンスやる

という感じでしょうか。
本当はRubyを動かすくらいなら今すぐにでもできるのですが、とりあえず閉域鯖から公開鯖に魔改造してしまう作業が直近では増えそうです。

あと、本来なら潤沢にあるはずの春休み期間を使ってやりたいですが、車のお免許を取得する作業(?)がある関係で、実機のそばでの作業は中々できそうにないです。やるとしても遠隔でSSHして操作することになるかなあ。

その都合上、サーバーの死活対応も問題になってきそうですねえ。サーバーマシンであればIPMIとか生えてるので、サーバーが生きていないときでもネットワーク経由で対応できるんですが、普通のMateにはそんなの生えてないので、サーバーに疎通しなくなったらお手上げですよねえ。何か考えときます。


P.S. サーバーのバックアップ方法について考えてなかった...

ATmega328P-PUを最小構成で動かす

最近、空き時間にAVRマイコンで遊んでいるのですが、Arduinoボードのように周辺機器や回路を満載せず、最小構成で動かしたいと感じることがあります。 Arduinoボードには、USB-シリアル変換インターフェース、5Vおよび3.3V定電圧電源、水晶発振子やセラミック発振子、電源...