※記事内に商品プロモーションを含む場合があります
正確にはRockey Linux 8だけど、最近、レッドハットがソースコードの
公開をやめたので、今後どうなるかは分かりませんが、
もう振り回されたくないので、サーバOSをUbuntuに移行する事にしました。
無印のCentOS8も本来のサポート期限は2029年まででしたし、
CentOS Stream 8も2024年5月まで短縮され、一時的にRockyLinuxを使っていました。
CentOS Stream8 から、Rocky Linux 8 は再起動は必要ですが
比較的簡単に移行可能です。
前にCentOS7から8に移行した時は、約9年はOS移行しなくて良いと思っていましたが
わずか3年で、OS移行する事になりました。
今回は、別サーバへ移行
前回は、同じVPSにCentOS8をインストールしてサーバを構築していましたが
今回は別サーバに移行する事にしました。
【関連】CentOSの入れ替えを1日でやった時の手順をまとめてみた
ついでに、ストレージをHDDからSSDに変更しました。
月額料金も約1500円から1700円になりました。
前回は、各サーバサービスのバージョンがあまり変わらなかったので
ファイルと設定をコピーするだけでOKでした。
今回は、OS、ファイアウォールから違うので、別サーバ移行ついでに
SSD仕様のVPSへアップグレードしました。
再起動が爆速になったので、約200円の増額でも良いかなと思っています。
Ubuntu Linux 22.04.2
CentOSではrootでログインできましたが、Ubuntuでは別ユーザーでログイン後
sudo su -などでrootに切り替わる必要があります。
また、ファイアウォールもfirewalldからUFWになります。
初期設定では、SSHのポートが22、ユーザー名がubuntuと狙われやすいので
SSHのポートを50000番~65000番に変更し、ユーザー名も別のモノに変更し
ubuntuユーザーは削除しましょう。
ubuntuユーザーを削除する前に、新ユーザーでsudoが使えるか確認しましょう。
sudoが使えないと管理権限が無いので、aptによるアップデートも出来ませんし
設定の変更も出来ません。
その場合、シングルユーザーモードに入って追加するか
OSの再インストールを再インストールして再設定する必要があります。
UFW(ファイアウォール)
firewalldにはあった、ゾーンなどの概念も無いシンプルなファイアウォールです。
ポート開放したい場合は
sudo ufw allow 80
で80番ポート(v4/v6)の2つのルールが追加されポートが開放されます。
ルールを消したい時は、
sudo ufw status numbered
で番号付でリストを表示し、消したい番号を確認してから
sudo ufw delete [番号]
で消す事ができます。
ただ、このままだと、VPNのみポート開放し、ファイル共有が使える様にしたり
できません。
そこで、IPアドレスの範囲を指定することで
sudo ufw allow from 192.168.11.0/24 to 192.168.11.1 port 445 proto tcp
特定のネットワークのみポート開放できます。
また、初期設定ではさくらのVPS側にもパケットフィルター設定機能があるので
通信が出来ない場合は、パケットフィルター設定を確認し、無効化しましょう。
Apache
最近はApacheの設定ファイルも細かくなり、サイトを追加する時
例えばnew.eax.jpというサイトを追加する時。
/etc/apache2/sites-enabled/new.eax.jp.conf
を作って以下の内容を書き込みます
パスなどは修正が必要です。
##################################################
## new.eax.jp
<VirtualHost *:443>
ServerName new.eax.jp
ServerAlias new.eax.jp
DocumentRoot /www/new.eax.jp/
Protocols h2 http/1.1
TransferLog /data/log/new.eax.jp.log
ErrorLog /data/log/new.eax.jp-err.log
DirectoryIndex index.html index.php
<ifModule mod_expires.c>
ExpiresDefault "access plus 1 weeks"
ExpiresByType text/html "access plus 600 seconds"
ExpiresByType image/x-icon "access plus 14 days"
ExpiresByType image/vnd.microsoft.icon "access plus 14 days"
ExpiresByType image/jpeg "access plus 14 days"
ExpiresByType image/png "access plus 14 days"
ExpiresByType image/gif "access plus 14 days"
ExpiresByType text/css "access plus 14 days"
ExpiresByType application/xhtml+xml "access plus 600 seconds"
ExpiresByType text/javascript "access plus 14 days"
ExpiresByType text/js "access plus 14 days"
ExpiresByType text/x-javascript "access plus 14 days"
ExpiresByType application/javascript "access plus 14 days"
ExpiresByType application/x-javascript "access plus 14 days"
</ifModule>
<IfModule mod_deflate.c>
SetOutputFilter DEFLATE
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
Header append Vary User-Agent env=!dont-vary
</IfModule>
# SSL Engine Switch:
# Enable/Disable SSL for this virtual host.
SSLEngine on
SSLProtocol All -SSLv2 -SSLv3
SSLHonorCipherOrder ON ##追記
SSLCertificateFile /etc/letsencrypt/live/new.eax.jp/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/new.eax.jp/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/new.eax.jp/chain.pem
<Directory /data/www/new.eax.jp>
Require all granted
AllowOverride All
</Directory>
<Files ~ "\.(cgi|shtml|phtml|php3?)$">
SSLOptions +StdEnvVars
</Files>
<Directory "/var/www/cgi-bin">
SSLOptions +StdEnvVars
</Directory>
<FilesMatch \.php$>
SetHandler "proxy:unix:/var/run/php/php8.1-fpm.sock|fcgi://localhost/"
</FilesMatch>
</VirtualHost>
## new.eax.jp
##################################################
Let’s encrypt
まず、certbotをインストールします。
apt -y install certbot
前サーバではスタンドアロンだったので、毎回Apacheを止めてから
更新する必要がありました。
今回は、DNSで認証を行います。
certbot certonly --manual -d new.eax.jp --preferred-challenges dns
このコマンドを実行すると、設定すべきTXTレコードが表示されるので
new.eax.jpの場合、_acme-challenge.new.eax.jpに表示された
TXTレコーダーを追加します。
PHP ・ Wordpress
今回の移行でPHPのバージョンが8になったので
不具合が発生しました。
今使っているSANGOというテーマと
Widgets of Posts by Same CategoriesとClean Optionsで問題が発生しました。
原因は、create_function()の廃止です。
PHP7では非推奨でまだ使えていましたが、PHP8では完全に削除されてしまったので
create_function()があると、エラーとなりWordPressが表示されなくなります。
【参考】PHP8, create_function()の廃止。無名関数を使おう!
テーマの方は、create_functionからfunctionへ書き換え動作する様になりました。
プラグインの方は、強制的に無効化しました。
【関連】ブログが真っ白!になってしまった時プラグインを無効化する方法
プラグインはcreate_functionを書き換えても別のエラーが直らず
廃止としました。
Widgets of Posts by Same Categoriesの代替にList category postsを使用しています。
phpはapacheをevent-MPMで動かしているので
php-fpmで動作しています。
Postfixメールサーバ
私のメールは、VPSのメールサーバで受信して、G-Mailに転送しています。
ただし、普通に転送しても迷惑メールとして
G-Mailで拒否されます。
この問題を解決するには、
- SPFレコードの設定
- envelope-FROM の書き換えが
が必要です。
SPFレコードはネームサーバーで、TXTレコードで設定します。
設定は、私のサーバではこの様になっています。
“v=spf1 +ip4:153.120.64.168 +ip6:2401:2500:102:2a06:153:120:64:168 include:eax.jp ~all”
このSPFレコードを設定する事で、記載のIPから発信されるメールは
なりすましでは無いと証明されます。
ただし、普通に転送すると、メールの送信元が送信元となっているため
なりすましと判断されてしまいます。
この問題を解決するのに、envelope-FROM の書き換えが必要です。
【関連】メール転送で、「迷惑メール」にならないために・・・envelope-FROM 書き換え
envelope-FROM の書き換えを行う事で、送信元が転送元に書き換えられ
IPアドレスが一致するのでG-Mailでも受信できる様になります。
今回は、Googleにアクセス出来なくなった時に備え、Devcotでローカルアカウント
も作りました。
最近、銀行などからの、ご利用制限のお知らせ(詐欺メール)がうざいので
/etc/postfix/main.cfでreject_unknown_reverse_client_hostnameを設定しました。
reject_unknown_reverse_client_hostnameを設定する事で接続元のIPから
ホスト名が逆引き出来ない場合に、メール拒否します。
詐欺メールの多くが、銀行のドメインを名乗っていながら
接続元IPのホスト名が無い、unknownでした。
VPN
FTPやローカルアカウントメールはVPNからのみ
アクセスできる様にしています。
FTPやメールの受信って、私しかアクセスしないので
VPN限定にして、アクセスを制限しています。
VPNはxl2tpd、strongswanを使用して構築します。
IPsec-VPNの方がセキュリティ性が良いですが、証明書を作る必要があります。
その証明書には有効期限があり、有効期限が切れるとサーバでの
再設定が必要になるので、面倒に感じ、L2TP/IPsecを使用しています。
VPNで設定している、事前共有鍵(PSK)の長さはセキュリティ強度に直結しているので
英数字大文字小文字、数字と、記号(@%-#のみ)で作った60文字の鍵を使用しています。
あまり長すぎても、機器によっては対応していない可能性もあるので
60文字ぐらいが良いと思います。
Nat traversalの設定をしていて、テスト時は良かったのですが
同一WifiでパソコンとiPhoneで同時接続する時に、
xl2tpdのログに、
xl2tpd[81723]: Can not find tunnel 81723 (refhim=0)
xl2tpd[81723]: network_thread: unable to find call or tunnel to handle packet. call = 81723, tunnel = 81723 Dumping.
と出て接続が切れる事があるので、対策を考えてましたが
Wireguardへ移行しました。
【関連】WireguardでVPNを構築し443ポートをhttpsと共存
あとがき
CentOS8時代では、1016日連続稼働していたので
さくらのVPSと、CentOS8は安定度が高いと感じました。
2029年までは安泰と思っていた、CentOS8でしたがと突如
2021年末までになり、仕方なく、CentOS8 Streamに移行しました。
CentOS8 Streamもサポート期限(EOL)が2024年5月、
CentOS9 StreamでさえもEOLが、2027年5月と、3年しかありません。
なので、Rockey Linux8に移行しましたが、RHELソースコード非公開化
などがあったので、自宅サーバ(ラズパイ4)でも使っている、Ubuntu
に移行しました。
ちなみに、2023年8月時点でこのサーバが稼働しているUbuntu 22.04.2 LTSは
スタンダードサポート期間が、2027年4月、EOLが2032年4月です。
リリースから約10年使えるので、CentOS7の頃と同じぐらいのサポート期間です。