Ubuntuをサブマシンとして使う

会社からDELLのDimension5100Cを貰ってきた。(なんか前面のUSBポートが死んでいるらしい)
PEN4が乗っていてメモリも1GB積んだまま貰ってきたので、これに4月号の日経Linuxに付いてきたUbuntuをいれて、サブマシンとして遊んでみる。
前回、FC8で3Dデスクトップの部分だけ遊んでみたけど、それ以外は触っていないので全然知識が無いけど、まぁ、GNOMEだし・・・。ググりつつなんとか使えるようにしてみよう。

社内の鯖がbot化していた件

月曜日に、会社のプロバイダから連絡が来た。
どうやら、2月24日に会社のIPアドレスからのDDos攻撃されたらしい・・・。
該当のサーバをネットワークから切り離して確認してみると、テスト用として開発業者に渡しているサーバのpostgresユーザを乗っ取られていて、/tmpの中に攻撃用のスクリプトを置いて動かしていたみたい。
ログを追ってみると、2月9日からこのセキュリティ侵害が発生していた模様。
テスト用サーバはDMZエリアに設置していて、通常、SSHの鍵認証のみの許可の設定にしているんだけど、開発業者側のSSHアプリケーションで渡したrsa鍵が読み込めなかったから、このサーバだけパスワード認証にしていた気がする。
でもさ、postgresのパスワードが「postgres」のままで動かしていたって・・・ありえねぇ・・・。
プロバイダ経由で言って来た人と、直接クレームを言ってきた人。
ご迷惑をお掛けしてしまって、本当にスミマセン。

オープンソースなSNS

会社内で”ネタ収集の場”を作ることになりました。
wiki文法が分かれば、pukiwiki程度で済む話だけど、俺もwiki文法は分からないので、「どうやったら皆が飽きずに情報提供をしてくれるか?」を考えた結果、UsagiProjectMyNETSを使ってSNS的なサイトを作ることにしました。
MyNETSは、OpenPNE(オープンピーネ)から派生したSNSエンジンらしい。
インストールしてみて分かったが、mixiにそっくり。
つか、まんまmixiだろ・・・。
オープンソースで提供されていて、中身はphpなのでカスタマイズする事は可能と思うけど、PHP初心者+αのスキルしかない俺にとっては、既に完成されたソースの一部をいじってリンク先ひとつ追加する事ですら時間が掛かると思う。
まぁ、社内利用だから期限もないし、勉強がてらやってみるか。

FedoraCore6からFedora8への乗り換え

週末、部屋の模様替えをした際に、サーバの電源を久しぶりに落としてみたら、それっきりで立ち上がらなくなってしまった・・・orz
おそらく、オンボードのVGA部分が逝ってしまったらしい。
また、このマザボも人から譲り受けたものだし、壊れたからと言って財布は痛くはないけど、サーバが起動しないのは痛い!
変わりに動かすマシンを探していたら、前回3Dデスクトップで遊ぶためにFedora8をフルインストールしたノートPCがあるでわないかwwwww
幸い、HDDからのデータ吸出しは問題なく成功したから、さっそくFedora8を臨時サーバとしてセッティングする。
Apache、perl、PHPはFedora6からの相違点も無くRPMでサクッと設定完了。
問題はPostgreSQL・・・。
Fedora6の時にRPMで導入していたバージョンは「 postgresql-8.1.10-1.fc6.i386.rpm」
対して、Fedora8のRPMは「postgresql-8.2.5-1.fc8.i386.rpm 」
これもRPMでサクっと設定しようと思って、Fedora6の時のdataディレクトリをコピーしてpg_ctlコマンドを叩いたら、
「古いバージョンのデータベースフォーマットが見付かりました。」
とか注意されて起動出来なかった。
調べる時間も惜しいので、今回はPostgreSQLの公式サイトから、8.1系の最新である「 8.1.11」をソースからインストールして動かしています。
古いバージョンのデータベースからのアップグレードの方法は存在すると思うけど、時間が出来たら調べてみよう。

apache2でセッション数制限

Apache2でセッション数制限や、帯域制限を行うには、mod_cbandと言ったモジュールを使うらしい。
FedoraCore6には、yumでmod_cbandが提供されているので、さっそく入れてみた。
yumなので、インストール手順は省くが、/etc/httpd/conf.d/の中にmod_cband.confファイルが作成される。
mod_cband.confの中の、VirtualHost部分を修正する。
※今回は、ダウンロードツール対策として、
1.同じ人からのファイルのアクセスは、1秒間に10個まで。
2.自宅で動いているので、Apache自身へのアクセスを20個まで。
とします。

DocumentRoot /var/www/html/
ServerName www.jhhk-family.net
CustomLog /var/log/httpd/access.log combined
ErrorLog /var/log/httpd/error.log
RewriteEngine On
RewriteOptions inherit
#
# # Maximal 1024kbps speed for this virtualhost
# # Maximal 10 requests per second for this virtualhost
# # Maximal 30 open connections for this virtualhost
※Apacheへの接続に対して最大の転送速度を1024kb/s。一秒間に20リクエスト、同時接続数を5に制限。
CBandSpeed 1024 20 5
#
# # Maximal 10kB/s speed, 3 requests/s and 2 open connections for any
# remote client
※同一のIPアドレスからの接続対して、最大の転送速度が1024kb/s。一秒間に10リクエスト、同時接続数を 5に制限している。
CBandRemoteSpeed 1024kb/s 10 5
#
# # Maximal 20kB/s speed, 2 requests/s and 3 open connections for
# remote
# # clients from class googlebot_class 😛
# CBandClassRemoteSpeed googlebot_class 20kb/s 2 3

最後に、Apacheを再起動すると完了。
ためしに、自宅からダウンロードツールを使って、連番の画像ファイルを根こそぎダウンロードしてみると、ファイルはダウンロードされずに、0バイトの空のjpgが複数作成されただけでした。

hdparmコマンド

データセンターに運用委託してあるサーバのデータを他のサーバにバックアップする為、バックアップの方法論や処理に掛かる時間等の資料を作らなくちゃならなくなった。
今回で言うと、バックアップはrsyncで行い、データの転送は管理用のネットワーク(100MB)を使用する。
理論値は、「データ容量/ディスク回転速度」と計算すればいいのだが、ディスク回転速度ってどうやって調べるんだ?と思い、ググッてみると「hdparm」というコマンドで判るらしい。
バックアップ元の各サーバで調べてみると、
# hdparm -t /dev/sda
/dev/sda:
Timing buffered disk reads: 188 MB in 3.02 seconds = 62.30 MB/sec
とまぁ、100MB/secとは行かないものの、なかなかの転送速度が確認できた。
このぐらいであれば、1GBのデータを100MBの回線を使って転送しても、1024(MB)÷62(MB)=16(sec)で転送出来る事になる。
ちなみに、このブログが動いている自宅のサーバはと言うと・・・
hdparm -t /dev/hdc
/dev/hdc:
Timing buffered disk reads: 76 MB in 3.02 seconds = 25.14 MB/sec
ちょwww
SATA接続のHDDと、IDE接続のHDDはこれほど書き込み速度に違いがあるのかwww
ちょっとへこんだ・・・orz
5年ぐらい前のPCで動いているからしょうがないのか・・・。
3Dデスクトップ用にFedora8を乗せているVAIOノートの方が性能がいいみたいだし、それをサーバにしてみるか。

perlのRPMパッケージの上書き

昨日構築したサーバ。
RHEL4で、最初からインストールされていたperl5.8.5に最新の5.8.8をインストールした。
方法がこれであっているのか定かではないけど、まぁ、動くし。問題ないかな。
まずは、普通にtar玉の展開。そしてmake。
/usr/binの中にある、perlの実行ファイル類をperl.distとかにリネームして、そこに/usr/local/binの下記のperlの実行ファイル類のシンボリックリンクを張る。
ln -s /usr/local/bin/perl /usr/bin/perl
ln -s /usr/local/bin/perl5.8.8 /usr/bin/perl5.8.8
ln -s /usr/local/bin/perlbug /usr/bin/perlbug
ln -s /usr/local/bin/perlcc /usr/bin/perlcc
ln -s /usr/local/bin/perldoc /usr/bin/perldoc
ln -s /usr/local/bin/perlivp /usr/bin/perlivp

以上。

3Dデスクトップ

今、巷で流行っている(?)3Dデスクトップ環境を、PCIスロットを息子から破壊されて放置されていたセカンドノートPCに入れて遊んでみました。


環境は以下。
型番:VAIO PCG-V505G/B
CPU:Pentium M プロセッサー1.50 GHz
メモリ:768MB(512MB+256MB)
グラフィック:ATI Technologies社製 MOBILITY RADEON 9200
最初はubuntu7.10を導入してみる。
初期設定で、搭載されている環境に合わせたデスクトップモードで動くらしい。
デスクトップの設定を変えても、ウィンドウがグネグネなるだけで回転はしない。
次にFedora8を導入してみる。
Fedora7に次いで開発環境のリリースだけど、なんとか3Dデスクトップが行えたwww
使ってみた結果。
結構遊べそうw
調子に乗って、普段使っているGNOMEからKDEにしたので使い勝手にまだ馴染めてないが、KNOPIXとかのライブOSもKDEを搭載してるらしいので、この際にFedora8をいじって覚えておくのも良いかも。

logwatch

自宅サーバでデフォルトのまま動いていたlogwatchのレポートがウザかったので、設定を見直してみた。
Fedoraの場合、「/usr/share/logwatch/default.conf/logwatch.conf」に設定ファイルが置いている。
※RHEL4だと/etc/log.d/logwatch.confに置いてある。
# The ‘Service’ option expects either the name of a filter
# (in /usr/share/logwatch/scripts/services/*) or ‘All’.
# The default service(s) to report on. This should be left as All for
# most people.
Service = All
下記を追加
Service = -qmail
Service = -pop3
Service = -vsftpd
Service = -secure
これで毎日送られて来ていた数百行のlogwatchのレポートが軽くなるw
ウチは、ファイアウォールなんて上層に立てていないので、SSHやFTPで不正侵入を試みようとするログが数千行・・・。
加えて、ローカルから5分毎に新着メールを確認しているので、pop3のログが5分×15回×24時間=1800行以上・・・。
昨日のlogwatchでいうと、先頭の
##### Logwatch 7.2.1 (01/18/06) #####
から、最後の
##### Logwatch End #####
までの総行数は・・・
64095行!!!!
テキストだけのメールで2.6MBって、どんだけ~!?

会社のメールサーバのリプレース

先月末に会社のメールサーバのリプレースを行った。
合わせてSpamassassinで迷惑メールも弾くようにした。
迷惑メールの運用としては、

Spamassassinのスコア閾値は「6.5」
スコア値「6.5~10までは、件名を変えてメール配送」
スコア値「11以上は、別アカウントへ転送」
「どのメールが転送されたかを1日一回、ユーザへメールする」

といった運用にする。
.procmailrcに下記を記述。
———————-
PATH=/bin:/usr/bin:/usr/local/bin
MAILDIR=$HOME/Maildir
DEFAULT=$MAILDIR/
LOCKFILE=$HOME/.lockmail
#Spam判定されていないメールは一度SpamAssassinへ送る。
#アカウントが150個以上もあるので、2MBを越すメールに対しては
#チェックを行わない。
:0fw
*!^X-Spam.*
* < 2097152 |/usr/bin/spamc #ヘッダーの「X-Spam-Level」を確認して、’*’が11個以上だったら #メールの送信時間を環境変数$MATCHへ格納。
#格納した$MATCHの値を、Spam-Listファイルへ記述。
:0 c
*^X-Spam-Level: \*\*\*\*\*\*\*\*\*\*
*^Date: *\/.*
| echo “Time:$MATCH” >> $HOME/Spam-List
#ヘッダーの「X-Spam-Level」を確認して、’*’が11個以上だったら
#メールの送信者を環境変数$MATCHへ格納。
#格納した$MATCHの値を、Spam-Listファイルへ記述。
:0 c
*^X-Spam-Level: \*\*\*\*\*\*\*\*\*\*\*
*^From: *\/.*
| echo “From:$MATCH” >> $HOME/Spam-List
#ヘッダーの「X-Spam-Level」を確認して、’*’が11個以上だったら
#メールの件名を環境変数$MATCHへ格納。
#格納した$MATCHの値を、Spam-Listファイルへ記述。
:0 c
*^X-Spam-Level: \*\*\*\*\*\*\*\*\*\*\*
*^Subject: *\/.*
| echo “Subject:$MATCH” >> $HOME/Spam-List
#ヘッダーの「X-Spam-Level」を確認して、’*’が11個以上だったら
#空白行をSpam-Listファイルへ記述。
:0 c
*^X-Spam-Level: \*\*\*\*\*\*\*\*\*\*\*
| echo “” >> $HOME/Spam-List
#ヘッダーの「X-Spam-Level」を確認して、’*’が11個以上だったら
#管理者アカウントにメールを転送。
:0
*^X-Spam-Level: \*\*\*\*\*\*\*\*\*\*\*
! virus@xxxxxxxxx.com
———————-
このprocmailの内容で、メールが届くたびに内容をチェックし、一定レベル以上のスパムだと、Spam-Listファイルにこんな感じのメールリストが記述される。
Time: Tue, 06 Nov 2007 00:06:13 -0500
From: “Beau Z. Juarez”
Subject: *****SPAM***** If you treat your filly as a goddess, why not become a God in her bedroom?
(ここは空白行)
次に行うのは、「どうやってここのユーザにメールを送るか?」だ。
今回の場合、お粗末だが「.spam-report.sh」と言った簡単なシェルスクリプトを組んでみた。
.spam-report.shに下記を記述。
———————-
#!/bin/sh
#pwdコマンドで得た結果(/home/ユーザー名)から、‘ユーザー名‘のみを抜き出し、’name’に代入する。
pwd > name
name=`cut -c 7- name`
#スクリプトにて追加した文字をSJISに変換する。
nkf -j Spam-List > Spam-List-j
#ユーザーへメールを送信する。
mail -s “SPAM Mail-Block Report” $name@xxxxxxxxx.com < Spam-List-j #古い情報が記録されているSpam-Listを削除。以降の情報を記録するSpam-Listの作成。 rm -rf Spam-List touch Spam-List chmod 660 Spam-List #’何時から取得している情報です‘って意味にしたかったんだけど、コレは要らんかもしれない。 date +"%Y/%m/%d %k:%M ~" >> Spam-List
echo “” >> Spam-List
#ユーザへ通知したい文の入力。
#ここは好きなようにしてくれ。
echo “お疲れ様です。” >> Spam-List
echo “$nameさんのスパムメールのブロック情報を通知します。” >> Spam-List
echo “情報が記載されていない場合、ブロックされたメールはありません。” >> Spam-List
echo “” >> Spam-List
———————-
Spamassassinに転送する.qmailファイルを合わせても、3つのファイルをユーザディレクトリに配置する。
さすがにそこはコピーするだけのスクリプトを組んだが・・・。
そうそう。
新規ユーザが作成された時に一緒に作成されるように、/etc/skelにも追加する事。
一定時間にスクリプトを走らせるから、下の記事で書いているように、/var/spool/cron/にユーザ分のcronファイルをコピって上げればよい。