2019年6月23日日曜日

OSを再起動したところ403エラーが出てWEBサイトに繋がらなくなる

先程、久しぶりにサーバのメンテナンスをしていました。その中で一度サーバの再起動を行っていたのですが、再起動後に403エラーが出てWEBサイトに繋がらない、という事態が発生しました。正確に言うと、トップページに関してはApacheのWelcomeページが表示されるという、ある意味なお悪い事態が発生していました。

現象事態は以下のサイトを参考にさせて頂き、解消しています。
Apacheで403 Forbiddenが表示された時のチェックポイント5選 Wedding Park Tech Blog

SELinuxが有効になっており、そちらを無効にしたら復活しました。勿論、それとは別に勝手に復活したwelcome.confも対処しています。

原因ですが、恐らく何も考えずにyum updateを行い、Kernelが上がってSELinuxの設定がデフォルトに戻った、といったところでしょうか。yum updateは定期的にかけたほうが絶対に良い派ではあるのですが、やはりkernelまでガンガン上げるのは良くないのかもしれません。

以下のサイトを参考に、yum.confに除外を書いてしまいます。
yum updateでkernelを除外する方法 DQNEO
/etc/yum.confで指定する方法
exclude=kernel*
昔、kernelを除外するときは、それ以外にも除外したほうが良いモジュールがあるという資料を読んだ気がするのですが、忘れたので一旦気にしないことにしましょう。

2019年5月21日火曜日

ARINからIPリストのダウンロードができない場合がある

以前作成したIPアドレス国確認という機能は、日々IPアドレス情報をICANN配下の管理組織(RIR)のサイトからダウンロードし、IPアドレスリストを生成しています。このIPアドレスリスト生成が2日連続で失敗していたので、原因を調べてみました。

結論から言うと、北米を管理しているARIN (American Registry for Internet Numbers) からのIPアドレスリストダウンロードに、時々失敗しているようです。なんか、認証を求められることがあります。
ftp://ftp.arin.net/pub/stats/arin/delegated-arin-extended-latest

でも、上手くいくときは上手くいくんですよね。謎です。
まあ向こう側の設定の問題だと思うので、しばらく様子見としたいと思います。

【2019/6/2追記】
なんか最近は上手くダウンロードできています。何でですかね?
今回は対向側が原因っぽいので、これで解決としておきたいと思います。

2019年5月6日月曜日

PHPでroot権限でコマンドを実行させる

nmapを実行して結果を表示するページを作成中です。nmapはお馴染みのコマンドですが、実はroot権限でないと動作しません。
PHPで開発するとapaheユーザ権限でコマンドを実行するため、そのままだと実行できないわけです。

ということで、sudoを利用します。
visudoを利用してsudoの設定を編集します。

以下を追加。
apache ALL=(root) NOPASSWD: ALL
参考にさせて頂きました。
Apache ユーザに別のユーザとして処理を実行させる 明滅するプログラマの思索

期待通り、sudoを利用してroot権限でコマンドが実行できます。
でも、何でもかんでも実行できるのも怖いなーということで、やはりnmapだけ実行できるように修正します。
apache ALL=(root) NOPASSWD:/usr/bin/nmap
参考にさせて頂きました。
PHPにて、root権限でコマンド実行 みズとおかズ

取り敢えず、これで大丈夫でそうです。

2019年2月23日土曜日

アカウント選択が出るためにLet’s Encryptの自動更新が上手くいかない場合の対処

サーバを移行してから初のLet’s Encrypt自動更新がうまくいきませんでした。ログを見たところ、なんかTime Outしているようなので、手動実行したところアカウントの選択が出てしまっていました。

こんな↓感じです。

Please choose an account
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
2: YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): c

ここで処理が止まってTime Outしたんですね。

で、色々と調べていたのですが、Let’s Encrypt内の以下のディレクトリ配下に認証用のアカウント情報(秘密鍵とか)が入っていました。
/etc/letsencrypt/accounts/acme-v02.api.letsencrypt.org/directory

不要な方を削除したところ、アカウント選択画面が出なくなったのでこれで大丈夫そうですね!

以下のサイトを参考にさせていただきました。
Delete duplicate account on server?

2019年1月6日日曜日

文字列を数値に変換する

PHPだと変数を特に宣言しなくても利用できてしまうので、数値チェックなどでうまく動作してくれなかったりします。そんな時、文字列を数値に変換するという方法があります。
文字列を数値に変換する

上記サイトからの抜粋ですが、10進数の場合は以下のように利用できます。
---
// 文字列型変数の宣言
$str = "11";

// 文字列型変数を数値型変数に変換する
$num10 = intval($str);
---

2018年12月27日木曜日

サーバ移転に伴うLet’s Encryptの引越

サーバをIDCFクラウドからGCPに移転しているのですが、サーバ証明書も引越させないといけません。サーバ証明書としてLet’s Encryptを利用しているのですが、再発行させてかっこよく移行しようとしたのですが、うまくいかないのでこちら↓のサイトを参考に、一旦今ある発行済の証明書をそのまま持ってくることにしました。
サーバー移転(引越し)でLet’s Encrypt 「SSL/TLSサーバ証明書」はどうする?

上記サイト内ではzipで固めて持ってきていますが、tarの方がそのままでシンボリックリンクも持ってこれるのでおすすめです。(zipもオプションを付ければ良いだけですが...)

具体的には以下の手順ですね。

引越元サーバで圧縮
cd /etc
tar zcvf letsencrypt.tar.gz letsencrypt

引越先サーバで解凍
cd /etc
tar xvf letsencrypt.tar.gz

2018年12月26日水曜日

Suama Online ServiceはIDCFクラウドからGCPへ移行!

IDCFクラウド個人向けサービス終了に伴い移行先をどこにするか検討していましたが、色々と検討した結果Google Cloud Platform (GCP) に移行することにしました。

移行先としてGCPを選択した理由は以下のとおりです。。

  • f1-microインスタンスであればサーバ1台を期限なしで無償利用できる(米国リージョンのみ)
  • GCPの中で今利用しているSendGridを利用することができる
  • GCP自体、以前お試しで利用したことがあるので使用感が分かっている。
上記理由のうち、1つ目についてはサーバ自体は無償枠で利用できますが、通信量の課金が発生するという可能性があり、少し悩みました。ただ、Suama Online Serviceは今の所テキストサイトなので、下りの通信はそれほど発生しないだろう、ということで今回はGCPに決定です!

以前環境を作ってはいたものの、今回は一から再構築を行いました。
概ねこちらで紹介されている手順ですね。

ただ、自分の作り方が悪かったのか、ファイアウォールが初期でほぼ当たっていない(つまり、丸裸で公開されている)状態になってしまいました。仕方がないのでファイアウォールは個別にルールを色々と設定しています。

後はやはり通信量で課金が大きくなることが怖いので、予算アラートも設定しています。
こちらで紹介されている手順ですね。

今回は折角GCPに移行したので、ランニングコストを限界まで下げることにも挑戦したいと思います。