ここのところ、自宅WebサーバがDoS攻撃らしいものを受けて困っていました。
VineLinux5.2 を使用していて、Webサーバはapache2.2.14。
これはバージョンがちょっと古く、DoS攻撃に対する脆弱性があるらしいです。
CPUの利用率も常に80%以上。ネットワーク帯域も限界まで使われていました。
少なくてもapacheのバージョンアップは必須でしょう。
VineLinux5.2はサポートも終了し、apacheも2.2.14が最新パッケージとのこと。
apacheのソースから自分でバージョンアップするか、VineLinux6.1へアップグレードしてapacheを最新にするかの選択です。
今回は他のソフトウェアのバージョンアップも兼ねて、VineLinux6.1へのアップグレードをすることにしました。
作業内容のメモです。
今回取り組んだのは以下の項目。
- VineLinux6.1のダウンロードと起動用USBメモリの作成
- VineLinux6.1のアップグレード
- apacheが起動しなくなった問題の解消
- MySQLへの接続に関する不具合の解消
- PHP5のセッションが保存されない不具合の解消
- phpMyAdminの最新版のインストール
VineLinux6.1のダウンロードと起動用USBメモリの作成
ここに紹介されている適当な場所からダウンロードします。http://vinelinux.org/download.html
USBに起動ディスクを作るなら、Vine-6.1/IMAGES/Vine61-DVD-i686.isoがよいです。
このISOイメージから、起動用のUSBメモリを作ります。
今回はMacで作ることにしました。(Winでも作れると思いますが、自宅で稼働しているのがMacしか無いので)
参考にした元記事はこちらです。http://d.hatena.ne.jp/nextremejp/20120511/1336705507
作業ディレクトリにダウンロードしたISOファイルを置きます。
以下のコマンドでimgに変換します。
$ hdiutil convert Vine61-DVD-i686.iso format UDRW -o Vine61-DVD-i686.dmg
マウントされているUSBメモリをアンマウントします。
デバイス名はdfコマンドでだいたい分かります。
$ diskutil unmount /dev/disk1
USBメモリに書き込みます。
USBメモリのイジェクト。
$ diskutil eject /dev/disk1
これでVineLinuxアップグレード用のUSBメモリが完成です。
VineLinux6.1のアップグレード
USBメモリから起動すると、新規インストールかアップグレードの選択ができます。
今回はVineLinux5.2が既に稼働中なので、アップグレードでVine6.1へ更新します。
途中で、今入っているのはi386だけどi686だと互換性が無い場合もある、みたいなメッセージが出ます。
無視して進んで、問題なくアップグレードできました。
apacheが起動しなくなった問題の解消
ほぼ問題無く動作するようですが、肝心のapacheが起動しなくなっていました。
どうやらまだ更新されていないものがあるようです。一部DVDには収録されてないのかもしれません。
$ apt-get update
$ apt-get upgrade
とすると、なにやらパッケージの依存関係でエラーが出てきます。
エラーメッセージの中に--fix-brokenを試せとありますので、その通りに以下のコマンドを実行します。
$apt-get upgrade --fix-broken
ここでほぼ全てのパッケージのインストールが完了して、apacheも起動するようになりました。
バージョンも2.2.23になりました。
MySQLへの接続に関する不具合の解消
apache2は無事起動まで漕ぎ着けました。
ところがMySQLを使った自作システムが動作しません。
さらにphpMyAdminにもログインできません。
ソケットを使った通信が出来ていないようです。
/etc/my.cnf には
という設定がありますが、/etc/php5/php.iniの設定では設定が空欄でした。
mysql.default_socket = /var/lib/mysql/mysql.sock
mysqli.default_socket = /var/lib/mysql/mysql.sock
として、apacheを再起動します。
ここまでで、phpMyAdminにはログインできるようになりました。
少し、表示がおかしいので後で考える事にします。
自作システムの方はまだ動作しないようです。
実行時のエラーを見ると、MySQL4からMySQL5で認証の仕組みが少し変わったようで、古いバージョンから引き継いだユーザはパスワードの再作成が必要のようです。
phpMyAdminはまだ挙動不審だったので、コマンドで操作することにしました。
一旦アカウントを削除しました。
DELETE FROM mysql.user WHERE user='ユーザ名';
再び、アカウントを作成します。
GRANT ALL PRIVILEGES ON *.* TO ユーザ名 IDENTIFIED BY 'パスワード' WITH GRANT OPTION;
念のため、パスワードを再設定しました。
SET PASSWORD FOR ユーザ名@"ホスト名"=password('変更後のパスワード');
メッセージの通り、パスワードの再設定だけでも良いかもしれません。
これで、MySQLへの接続は無事に行われるようになりました。
PHP5のセッションが保存されない不具合の解消
それでも、まだシステムとしては動作していません。
どうもセッション情報が渡されていないようです。
設定を色々見直しましたが、問題あるように思えませんでした。
考える事数時間、セッション情報を保存するフォルダのアクセス権の問題でした。
session.save_path = /var/php5/session
となっています。ここにapacheのユーザーでアクセスできなければセッションが書き込めません。
apacheは nobody ユーザーで起動しています。
/var/php5/session に 777 を与えました。(良いのだろうか)
$ chmod 777 /var/php5/session
これでようやくシステムとしても動作し始めました。
phpMyAdminの最新版のインストール
最後に挙動不振だった phpMyAdmin を更新します。
きっと PHPやMySQLのバージョンが上がって対応できなくなったのでしょう。
今使っているバージョンは2.9.1です。
安定板の最新は3.5.7ですね。http://www.phpmyadmin.net/home_page/downloads.php
これはダウンロードして展開するだけなので特に問題無く動き始めました。
おわりに
アップグレード作戦はなんとか終了しました。
当初の目的であるDoS攻撃回避が出来たのかどうかは、数日間様子を見る必要があります。
- ネットワーク負荷
日々snmp+mrtgで記録しているネットワーク負荷です。
月曜日に異常な負荷が発生し、火曜日も負荷があがりかけています。
火曜日は気づいた段階で、apacheを停止してからは正常に落ち着いています。
木曜日からapacheも運用開始していますが、今の所異常はありません。
- CPU負荷
こちらも、ネットワーク異常に合わせて負荷が上がっています。
木曜日から比較的負荷が高いようですが、これはVineLinux6.1が稼働中の時間帯です。
定常的になにか処理しているんでしょうか。体感的には異常は感じません。