最終更新:
別のサーバマシン(Pentium 4 1.2GB)が手に入ったので。別の目的のサーバとして研究運用する。FreeBSDの最小インストールはしてある。
ip-sentinelをコンパイルしようとソースを拾ってきた。
% ./configure % make
・・・あれ?英語なのではっきりわからんが、こいつをコンパイルできるのはlinuxだけだぜなどとぬかしやがる。むきーっ!
検索調査していたらipguard
なるものがFreeBSDのdistにあった。中のドキュメント(英語)だと、なんとなくlibnet
とlibpcap
が必要らしい。しかしlibpcap
は曲者で、m4
やらbison
やらが必要らしく、コンパイルがなかなかうまくいかない。なんとかコンパイルできたような気がしてやっとipguard
のコンパイルにかかろうとしたら、この手では珍しくmake
のみだ。しかしそのmakeもこけるこける。Makefileの中を覗いてみると、いろいろパスが違っているので修復してみるのだがやっぱりこける。とりあえず一旦あきらめる。
検索調査をしてみると、FreeBSDのportsにもipguard-0.04
が載っていた。こっちの情報だと必要なのはlibnet10-1.0.2a
だけだ(おい!)。ここからソースを拾って再びコンパイル。
% cd /usr/src/Libnet* % ./configure % make % make install
libnetのディレクトリがLibnet(大文字で始まる)なのがちと気になったが。すんなりコンパイル終了。ipguard-0.04
もコンパイル。が、前もそうだったが「libnetのライブラリが見つからない」というエラーだった。今回は冷静に考えて環境設定を足してみた。(この時はCシェル系)
% cd /usr/src/ipguard* % setenv CFLAGS="-I=/usr/local/include -L=/usr/local/lib" % make % ln -s /usr/src/ipguard*/ipguard /usr/local/sbin/ipguard
環境設定の内容は少々勘を働かせたのだが、こっちもすんなり元のMakefileのままでコンパイル終了。なんだよ〜・・・。今となってはPackageインストールでもよかったかなと思いつつ、設定作業に入る。
(続きに最新の記録があります)
前回同様にapache2をインストール。mod-proxyでプロクシとして稼動させ、mod-clamavをコンパイル&インストールしてみた。どこを間違えたのかよくわからなくなってしまったが、アクセスするとページ違反で落ちているらしい。結局自力で解決できなかったので他の方法を模索する。
(続きに最新の記録があります)
(挫折&忘却)
(続きに最新の記録があります)
DELL Dimension 2400
- Celeron(Northwood)2.4GHzのマシンがおさがりで手に入ったので交代することに。
RAMはPC2700の256Mか・・・。先輩と話していたのだが256では少し物足りないかもしれない。しかしメモリの余り物も無いのでどうしようか?会社に頼んでみるか?・・・。と思ったが、ハードオフで1000円で売っていたのでつい自腹で購入。
とはいえハードオフなのでDELLのスタートアップオプションで出てくる診断ツールで夜通し徹底的にチェックしてみる。うむ、問題ない。
交代する前にLonghorn Server beta3
を入れてみたりしたのだが、さっっぱりわからない、ハハハ。
早速FreeBSD 6.2-RELEASE-i386
のインストール。最小インストールとカーネル関連のソースをインストール。管理者パスワードとタイムゾーンとネットワークの設定を済ませておく。慣れてきているのでここまではあっという間に済んだ感じLonghorn Server core
と比べてもこっちにほうが早い&速いな。
perl
もこの時点でパッケージインストール。なんとなく。
/etc/ttys・/etc/ftpusers・/etc/inetd.conf・/etc/hosts.allowを編集して一時作業用設定にしておく。セキュリティ的にオススメしない設定だが(笑) あと/etc/rc.confも仮設定しておこう。
check_quotas="NO"
keymap="jp.106"
usbd_enable="YES"
scrnmap="NO"
keyrate="normal"
sendmail_enable="NONE"
inetd_enable="YES"
hostname="ほにょほにょ"
ifconfig_bfe0="inet ほにょほにょ netmask 255.255.255.0"
#defaultrouter="ほにょほにょ"
#ntpdate_flags="-b ntp.jst.mfeed.ad.jp"
#ntpdate_enable="YES"
#ntpd_enable="YES"
sendmail_enable="NONE"はsendmail
自体を無効にするための設定ですな。ntp.jst.mfeed.ad.jpは最近デフォルトで使用しているntpサーバ。
カーネル再構築用のコンフィギュレーションファイルとスクリプトを転送して再構築開始。が、コンパイルエラー。ありゃ?前回と一緒のはずだが・・・。
GENERIC
で構築してみる・・・がコンパイルエラー。ありゃりゃ?
/etc/make.confのコンパイルオプションとかコンフィギュレーションファイルとかスクリプトとか設定し直し→構築→エラー→最初に戻る・・・の繰り返しの末、やっとコンパイルが完了した。
CPUTYPE=pentium4 CFLAGS=-O2 -march=pentium4 -mmmx -msse -msse2 -L/usr/local/lib -I/usr/local/include CXX=gcc CXXFLAGS=-O2 -march=pentium4 -mmmx -msse -msse2 -L/usr/local/lib -I/usr/local/include
どっかで見た記憶だと-O3は使わないほうが身のためだと・・・。確かに過度な最適化オプションはバイナリの動作だけでなくコンパイルにも影響するような気がしてきた。NorthwoodなCeleronもpentium4でいいらしい。
machine i386
#cpu I486_CPU
#cpu I586_CPU
cpu I686_CPU
ident CAPTAIN
#options NFSCLIENT # Network Filesystem Client
#options NFSSERVER # Network Filesystem Server
#options NFS_ROOT # NFS usable as /, requires NFSCLIENT
# Floppy drives
#device fdc
# ATA and ATAPI devices
device ata
device atadisk # ATA disk drives
#device ataraid # ATA RAID drives
device atapicd # ATAPI CDROM drives
#device atapifd # ATAPI floppy drives
#device atapist # ATAPI tape drives
options ATA_STATIC_ID # Static device numbering
# SCSI Controllers(すべて無効)
# SCSI peripherals(すべて無効)
# RAID controllers interfaced to the SCSI subsystem(すべて無効)
# RAID controllers(すべて無効)
#device kbdmux # keyboard multiplexer
# PCMCIA and cardbus bridge support(すべて無効)
# Serial (COM) ports(すべて無効)
# Parallel port
#device ppc
device ppbus # Parallel port bus (required)
#device lpt # Printer
#device plip # TCP/IP over parallel
#device ppi # Parallel port interface device
#device vpo # Requires scbus and da
# PCI Ethernet NICs.(すべて無効)
# PCI Ethernet NICs that use the common MII bus controller code.(他はすべて無効)
device miibus # MII bus support
device bfe # Broadcom BCM440x 10/100 Ethernet
# ISA Ethernet NICs. pccard NICs included.(すべて無効)
# Wireless NIC cards(すべて無効)
# Pseudo devices.
device loop # Network loopback
device random # Entropy device
device ether # Ethernet support
#device sl # Kernel SLIP
#device ppp # Kernel PPP
device tun # Packet tunnel.
device pty # Pseudo-ttys (telnet etc)
device md # Memory "disks"
device gif # IPv6 and IPv4 tunneling
device faith # IPv6-to-IPv4 relaying (translation)
# USB support
#device udbp # USB Double Bulk Pipe devices
#device ulpt # Printer
#device umass # Disks/Mass storage - Requires scbus and da
#device ums # Mouse
#device ural # Ralink Technology RT2500USB wireless NICs
#device urio # Diamond Rio 500 MP3 player
#device uscanner # Scanners
# USB Ethernet, requires miibus(すべて無効)
# FireWire support(すべて無効)
今までとは違いscbus
が必要なものは全て無効にしたので、「SCSI無いのに?!」という疑問は晴れた。設定の名前がCAPTAIN
なのは、上記のサーバの流れから。深い意味は無い。
#!/bin/sh
{
rm /usr/src/sys/i386/conf/CAPTAIN
cp /root/CAPTAIN /usr/src/sys/i386/conf/CAPTAIN
cd /usr/src
time make clean KERNCONF=CAPTAIN
time make cleandepend KERNCONF=CAPTAIN
time make depend KERNCONF=CAPTAIN
time make buildkernel KERNCONF=CAPTAIN
echo Are you sure\?
read yes
make installkernel KERNCONF=CAPTAIN
echo Please reboot.
} 2>&1 | tee /root/kernel.build.log
make clean cleandepend depend
がよく知らないが念のため。またtime コマンド
で時間計測もやっている。{}
(波括弧)の使い方は知らなかったなぁ。
今のうちに設定できる諸設定/etc/hosts・/etc/rc.conf・/etc/resolv.conf・/etc/ntp.conf・/root/.cshrcを編集しておく。
driftfile /var/ntp.drift
server ntp.jst.mfeed.ad.jp iburst
server 127.127.1.0
fudge 127.127.1.0 stratum 12
下2行は上流ntpサーバと通信できなくなった場合に自前のクロックを使って凌ぐための設定。
setenv CFLAGS "-O2 -march=pentium4 -mmmx -msse -msse2 -L/usr/local/lib -I/usr/local/include -mfpmath=sse"
setenv CXX gcc
setenv CXXFLAGS "-O2 -march=pentium4 -mmmx -msse -msse2 -L/usr/local/lib -I/usr/local/include -mfpmath=sse"
後にインストールするSquid
・SquidClamav
と連携してオンラインウィルススキャンな環境をでっち上げるために、FreeBSDで使える無料なウィルスセキュリティソフトを導入する。
ソースと必要なパッケージを拾ってきて転送。libtool
は・・・あるよな。とコンパイルスクリプトも作成して転送。
#!/bin/sh
{
cd /usr/src
tar xvf /dist/clamav-0.91.2.tar.gz
cd clamav*
./configure --disable-clamuko
make
make install
make clean
} 2>&1 | tee /root/clamav.build.log
そんでもってインストール。
% cd /dist % pkg_add arc-5.21o_1.tbz % pkg_add arj-3.10.22.tbz % pkg_add lha-1.14i_6.tbz % pkg_add libgmp-4.2.1_2.tbz % vipw clamav:*:97:97::0:0::/nonexistent:/sbin/nologin % ee /etc/group clamav:*:97: % /root/clamav.build.sh
必要なディレクトリを確認・作成し、/usr/local/etc/clamd.confと/usr/local/etc/freshclam.confに設定ファイルがあるのでディレクトリやファイル等を合わせながら編集する。ソースからコンパイルしたものと、パッケージインストールしたもの、設定ファイルのサンプルとでは意外とディレクトリ設定が合っていないので、デフォルトの設定を信用せずに実際のディレクトリを探すほうが良い。
% mkdir /var/run/clamav % chown clamav:clamav /var/run/clamav % mkdir /var/log/clamav % chown clamav:clamav /var/log/clamav % mkdir /tmp/clamav % chown clamav:clamav /tmp/clamav % ls /usr/local/share/clamav daily.cvd main.cvd
#Example LogFile /log/clamav/clamd.log LogFileUnlock no LogFileMaxSize 1M LogTime yes #LogClean yes #LogSyslog yes #LogFacility LOG_MAIL #LogVerbose yes PidFile /var/run/clamav/clamd.pid TemporaryDirectory /tmp/clamav DatabaseDirectory /usr/local/share/clamav LocalSocket /var/run/clamav/clamd.sock FixStaleSocket yes #TCPSocket 3310 #TCPAddr 127.0.0.1 #MaxConnectionQueueLength 30 StreamMaxLength 4096M #StreamMinPort 30000 #StreamMaxPort 32000 #MaxThreads 20 #ReadTimeout 300 #IdleTimeout 60 #MaxDirectoryRecursion 20 #FollowDirectorySymlinks yes #FollowFileSymlinks yes #SelfCheck 600 #VirusEvent /usr/local/bin/send_sms 123456789 "VIRUS ALERT: %v" User clamav AllowSupplementaryGroups yes #ExitOnOOM yes #Foreground yes #Debug yes #LeaveTemporaryFiles yes #DetectPUA yes #AlgorithmicDetection yes #ScanPE yes #ScanELF yes DetectBrokenExecutables yes #ScanOLE2 yes ScanPDF yes ScanMail no #MailFollowURLs no #MailMaxRecursion 128 #PhishingSignatures yes #PhishingScanURLs yes #PhishingRestrictedScan yes #PhishingAlwaysBlockSSLMismatch no #PhishingAlwaysBlockCloak no #ScanHTML yes #ScanArchive yes ArchiveMaxFileSize 4096M ArchiveMaxRecursion 10 ArchiveMaxFiles 1500 #ArchiveMaxCompressionRatio 300 #ArchiveLimitMemoryUsage yes #ArchiveBlockEncrypted no #ArchiveBlockMax no #NodalCoreAcceleration yes #ClamukoScanOnAccess yes #ClamukoScanOnOpen yes #ClamukoScanOnClose yes #ClamukoScanOnExec yes #ClamukoIncludePath /home #ClamukoIncludePath /students #ClamukoExcludePath /home/bofh #ClamukoMaxFileSize 10M
#Example DatabaseDirectory /usr/local/share/clamav UpdateLogFile /var/log/clamav/freshclam.log LogVerbose yes #LogSyslog yes #LogFacility LOG_MAIL PidFile /var/run/clamav/freshclam.pid DatabaseOwner clamav AllowSupplementaryGroups yes #DNSDatabaseInfo current.cvd.clamav.net DatabaseMirror db.jp.clamav.net DatabaseMirror database.clamav.net #MaxAttempts 5 #ScriptedUpdates yes #Checks 24 #HTTPProxyServer myproxy.com #HTTPProxyPort 1234 #HTTPProxyUsername myusername #HTTPProxyPassword mypass #HTTPUserAgent SomeUserAgentIdString #LocalIPAddress aaa.bbb.ccc.ddd NotifyClamd /usr/local/etc/clamd.conf #OnUpdateExecute command #OnErrorExecute command #OnOutdatedExecute command #Foreground yes #Debug yes #ConnectTimeout 60 #ReceiveTimeout 60
データベースの更新をしてみる。
% freshclam ClamAV update process started at Fri Nov 9 12:34:56 2007 WARNING: Can't query current.cvd.clamav.net WARNING: Invalid DNS reply. Falling back to HTTP mode.
あれ?
ネットワークの設定とルータ側の設定を忘れて接続不可のままだった(←馬鹿)。/etc/rc.confと/etc/resolv.confの設定を変更する。
defaultrouter="ほにょほにょ" ntpdate_flags="-b ntp.jst.mfeed.ad.jp" ntpdate_enable="YES" ntpd_enable="YES"
これでルータとサーバを再起動してみる。ついでにntpdの確認も。
% ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== *ntp.jst.mfeed.a 210.173.160.86 2 u 9 64 1 16.011 -7.322 0.541 LOCAL(0) LOCAL(0) 12 l 20 64 1 0.000 0.000 0.002
よさげですな。
再びデータベースの更新をしてみる。
% freshclam ClamAV update process started at Fri Nov 9 12:34:56 2007 main.cvd is up to date (version: 44, sigs: 133163, f-level: 20, builder: sven) ERROR: getfile: daily-4016.cdiff not found on remote server (IP: 61.205.61.201) ERROR: getpatch: Can't download daily-4016.cdiff from db.jp.clamav.net ERROR: getfile: daily-4016.cdiff not found on remote server (IP: 61.205.61.201) ERROR: getpatch: Can't download daily-4016.cdiff from db.jp.clamav.net ERROR: getfile: daily-4016.cdiff not found on remote server (IP: 61.205.61.201) ERROR: getpatch: Can't download daily-4016.cdiff from db.jp.clamav.net WARNING: Incremental update failed, trying to download daily.cvd Downloading daily.cvd [100%] daily.cvd updated (version: 4717, sigs: 33172, f-level: 21, builder: ccordes) Database updated (166335 signatures) from db.jp.clamav.net (IP: 61.205.61.201) WARNING: Clamd was NOT notified: Can't connect to clamd through /var/run/clamav/ clamd.sock connect(): No such file or directory
やっぱりエラーでまくりですな。でもアップデートは終了しているっぽい。最後のエラーはまだclamdを起動していないからお約束。とりあえずこんなもんでしょう。
clamdの起動テストをしてみる。
% clamd
何もエラー吐かないので大丈夫でしょう。topコマンドで試しても起動しているし。freshclamも試してみたら今度は何もエラー吐かなかった。
clamdの起動スクリプトを転送。どっかでパクったかな?
#!/bin/sh
CLAMD=/usr/local/sbin/clamd
PIDFILE=/var/run/clamav/clamd.pid
case "$1" in
start)
${CLAMD}
echo ' Start Clam AntiVirus'
;;
stop)
kill `/bin/cat ${PIDFILE}`
echo ' Stop Clam AntiVirus'
;;
restart)
kill `/bin/cat ${PIDFILE}`
${CLAMD}
echo ' Restart Clam AntiVirus'
;;
reconfigure)
kill -HUP `/bin/cat ${PIDFILE}`
echo ' Re-configure Clam AntiVirus'
;;
reload)
kill -USR2 `/bin/cat ${PIDFILE}`
echo ' Reload Clam AntiVirus'
;;
status)
/bin/cat ${PIDFILE}
;;
*)
echo "Usage: `basename $0` {start|stop|restart|reconfigure|reload|status}"
;;
esac
サーバを再起動して確認する。よさげですな。
プロクシサーバプログラム。プロクシ目的ならばapacheよりも融通が利くので人気があるみたい。
パッケージがあるので拾ってきて転送。perl-5.8.8
だけ必要か・・・バージョンは合っているね? パッケージなのでサクっとインストール。
% pkg_add /dist/squid-2.6.15.tbz
いやー、パッケージインストールは速いねぇ。でもクローズ環境だと依存関係が狂うと全然融通利かないのよね。で、インストール時に説明が表示されるのでそれを参考に設定を進めていく。
キャッシュディレクトリの初期化をする。
% rehash % squid -z 2007/11/09 12:34:56| Creating Swap Directories
設定ファイルの編集をする。結構な行数があるので、少々面倒くさいが変更点はコメントマークしておいたほうが良い。
http_port 8080 cache_dir ufs /usr/local/squid/cache 100 16 256 logformat customlog %>a %{%Y/%m/%d.%H:%M:%S}tl %rm %ru %Hs %Ss:%Sh access_log /usr/local/squid/logs/access.log customlog cache_store_log none logfile_rotate 28 buffered_logs on #url_rewrite_program /usr/local/bin/squidclamav url_rewrite_children 15 via off http_access deny to_localhost http_access allow localhost url_rewrite_access deny localhost acl LocalArea src 192.168.1.0/24 http_access deny !LocalArea acl malware_block_list url_regex -i "/usr/local/etc/squid/malware_block_list.txt" http_access deny malware_block_list acl white_list url_regex -i "/usr/local/etc/squid/white_list.txt" http_access allow white_list acl black_list url_regex -i "/usr/local/etc/squid/black_list.txt" http_access deny black_list http_access allow all http_access deny all icp_port 0 log_icp_queries off error_directory /usr/local/etc/squid/errors/Japanese acl to_LocalArea dst 192.168.1.0/24 always_direct allow to_LocalArea dns_testnames ほげほげ forwarded_for off
url_rewrite_programはまだインストール前なので後にする。/usr/local/etc/squid/malware_block_list.txtというのは一般に公開されているマルウェア対策リストである。/usr/local/etc/squid/white_list.txtと/usr/local/etc/squid/black_list.txtは自前のホワイト&ブラックリストを用意した。なのでサンプルとはちょっと違ったアクセス制御になっている。
てなわけで設定テストをしてから起動テストをしてみる。何もエラーを吐かなければOKなので起動してみる。
% squid -k parse % squid
ブラウザのプロクシ設定をこのサーバにしてインターネットサイトにアクセスしてみる。・・・出ました。OKです。
・・・実はこの前に設定ファイルを上書きするのを忘れて試してみたら、しっかりプロクシサーバに拒否されました。デフォルトは全て拒否ルンです。
パッケージでインストールすると自動起動設定も親切だなぁ。すでにスクリプトがインストールされているので、/etc/rc.confに次の行を追加するだけだ。
squid_enable="YES"
これで再起動&接続してみる。よさげですな。
SquidでClamAVを連携させるためのrewrite_programとしてSquidClamav
を導入する。似たような名前でsquidclam
というものがFreeBSDのパッケージで存在するが、試してみたらなんかイマイチだったのでそちらは却下。
ソースと必要なパッケージを拾ってきて転送。コンパイルスクリプトも作成して転送。
#!/bin/sh
{
cd /usr/src
tar xvf /dist/squidclamav-3.1.tar.gz
cd squidclamav*
./configure
make
make install
make clean
if [ -e /etc/squidclamav.conf ] ; then else
cp squidclamav.conf.dist /etc/squidclamav.conf
fi
} 2>&1 | tee /root/squidclamav.build.log
そんでもってインストール。
% pkg_add /dist/curl-7.16.3.tbz % /root/squidclamav.build.sh
意外と早く終わる。プログラムは/usr/local/bin/squidclamavに、設定ファイルは/etc/squidclamav.confになる。
設定ファイル/etc/squidclamav.confとSquid設定ファイル/usr/local/etc/squid/squid.confを編集する。
proxy http://127.0.0.1:8080/ logfile /usr/local/squid/logs/squidclamav.log redirect http://ちょめちょめ/clwarn.php debug 0 force 0 stat 0 clamd_local /var/run/clamav/clamd.sock #clamd_ip 127.0.0.1 #clamd_port 3310 timeout 60 abort ^.*\.gz$ abort ^.*\.bz2$ abort ^.*\.pdf$ abort ^.*\.js$ abort ^.*\.html$ abort ^.*\.css$ abort ^.*\.xml$ abort ^.*\.xsl$ abort ^.*\.js$ abort ^.*\.ico$ aborti ^.*\.gif$ aborti ^.*\.png$ aborti ^.*\.jpg$ aborti ^.*\.swf$ abort ^.*\.htm$ abort ^.*\.shtm$ abort ^.*\.shtml$ abort ^.*\.flv$ abort ^.*\.iso$
ちなみにclamdとsquidclamavのIPとポートは両方とも無効にしてある。squidclamavの説明だと「片方だけ揃えて設定すること」のような事が英語で書いてあった。なのでソケットファイルの設定に統一してある。またsquidclamavのcontent設定はちょいと動作が思惑通りにならないことがあったので、使わないことにした。
url_rewrite_program /usr/local/bin/squidclamav
Webサーバに応答用のCGIスクリプトを設置する。元はcgi(perl)だったが自分的にphpにしてみた。
<?php
$url = @$_GET['url'];
$virus = @$_GET['virus'];
$source = @$_GET['source'];
$user = @$_GET['user'];
$source = strtr($source, array("/"=>"","-"=>""));
$virus = strtr($virus, array("stream: "=>"", " FOUND"=>""));
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>セキュリティサーバからのお知らせ</title>
</head>
<body>
<h1>アクセス制御</h1>
<hr>
<dl>
<dt>URL</dt>
<dd><?=$url?></dd>
<dt>名称</dt>
<dd><?=$virus?></dd>
<dt>クライアント</dt>
<dd><?=$source?> / <?=$user?></dd>
</dl>
<p>ウィルス等のおそれがあるため接続をブロックしました。ご安心下さい。</p>
<hr>
<address>Powered by SquidClamAv 3.1 in セキュリティサーバ</address>
</body>
</html>
これで再起動&接続してみる。よさげですな。テストウィルスも・・・制御されてるされてる。
念のため動作ログをチェックしてみる。
/usr/local/squid/logs/squid.pid: (13) Permission denied WARNING: Could not write pid file
どうもSquidのPIDファイルの属性がおかしいようだ。
% ls -l /usr/local/squid/logs/squid.pid -rw-r--r-- 1 root squid 4 Nov 9 12:47 /usr/local/squid/logs/squid.pid % chmod g+w /usr/local/squid/logs/squid.pid % ls -l /usr/local/squid/logs/squid.pid -rw-rw-r-- 1 root squid 4 Nov 9 12:47 /usr/local/squid/logs/squid.pid
これでどうだろう?。念のためサーバを再起動してみる。ログを確認してみたらよさげですな。
無人運転を続けるためにログローテーションとマルウェア対策リストの更新とウィルスデータベース更新をcron
で行うよう設定する。
1 7 * * * root ftp -a -V -o /usr/local/etc/squid/malware_block_list.txt http://malware.hiperlinks.com.br/cgi/submit\?action=list_squid 1 8,12 * * * root freshclam --quiet 1 0 * * * root /usr/local/sbin/squid -k rotate
FTP,POP3,SMTPの中継を行う目的でdelegate
を導入する。
ソースを拾ってきて転送。コンパイルスクリプトも作成して転送。これだけちょっとコンパイルの感じが違うみたいだ。
#!/bin/sh
{
cd /usr/src
tar xvf /dist/delegate9.2.4.tar.gz
cd delegate*
cd src
make CFLAGS="-O2 -march=pentium4 -mmmx -msse -msse2 -L/usr/local/lib -I/usr/local/include" CXX=gcc CXXFLAGS="-O2 -march=pentium4 -mmmx -msse -msse2 -L/usr/local/lib -I/usr/local/include"
make clean
rm /usr/local/libexec/delegated
ln -s /usr/src/delegate*/src/delegated /usr/local/libexec/delegated
} 2>&1 | tee /root/delegate.build.log
そんでもってインストール。
% /root/delegate.build.sh
途中でメールアドレスを聞かれるが、適当に(ありえないドメイン)答えてしまった。後で変えられるはずだけど。コンパイル途中でなんかエラー多発しているみたいなんだけどー。でも無視しているようにも見えるしー。とりあえず終わったらしいところでコンパイルスクリプトでプログラムをエイリアスしてみた。ちゃんとコンパイルできてるのかな?
設定ファイルを使う前提でないプログラムなので、設定は自動起動スクリプトで記述する。
#!/bin/sh
case "$1" in
start|restart)
# pop
/usr/local/libexec/delegated \
MOUNT="//内部ドメイン/*%S //内部メールサーバアドレス/*%(0)" \
MOUNT="//外部ドメイン/*%S //外部メールサーバ/*%(0)@外部ドメイン" \
MOUNT="//その他外部ドメイン/*%S //その他外部メールサーバ/*%(0)" \
LOGFILE="" PROTOLOG="" \
-P110 SERVER=pop -r OWNER=root
# smtp
/usr/local/libexec/delegated \
HOSTS="内部ドメイン/内部メールサーバアドレス" \
SMTPCONF=myname:localhost \
MOUNT="*%S@自ホスト smtp://内部管理者メールアドレス" \
LOGFILE="smtp/[date+%d].log" PROTOLOG="" \
-r -P25 SERVER=smtp OWNER=root
# ftp
/usr/local/libexec/delegated \
LOGFILE="ftp/[date+%d].log" PROTOLOG="" \
-r -P8021 SERVER=ftp OWNER=root
;;
stop)
/usr/local/libexec/delegated -P110 -Fkill
/usr/local/libexec/delegated -P25 -Fkill
/usr/local/libexec/delegated -P8021 -Fkill
;;
*)
echo "delegate.sh {start|stop|restart}"
;;
esac
exit 0
これで再起動してみる。起動しているか確認してみたら・・・。
あれぇ?
起動スクリプトに1文字間違いがあったので修正したら・・・よさげでした。FTPプロクシ・・・OK。SMTPとPOP3・・・これもOK!
で〜きたっと。あとはアドレスを交代して最終チェックだな。
アドレスを交代させるために編集すべき設定ファイルは・・・。
LANケーブルを繋ぎ変えて、再起動してみた・・・。が、delegatedの起動で名前解決ができなくてPOP3の起動に失敗しているらしい・・・。こりゃマズイ、LANケーブルを元に戻す。
設定ファイルをチェックしてみたのだが別におかしいところは無かったような。LANケーブルのコネクタがちゃんとはまっていなかっただけかもしれん・・・。電源を一旦オフにしてケーブルを再度繋ぎなおしてから、起動してみた。ん〜?起動してるじゃん。旧サーバの電源を落としてから接続してみてもOKだった。よさげですな。
squidclamavのログが1つのファイルでどんどん増えていくのでログローテーションしてみたいところだが、そのためにまたソフトを使うのもなぁ・・・。と思っていたが、ふとsquidのログローテーションを使ってみたら?と思って試してみた。ついでにsquidclamavは127.0.0.1からのアクセスなのでそれも分離してみる。ログ形式は適当。
logformat squidclamavlog %{%a %b %e %H:%M:%S %Y}tl [%Hs] %rm %ru access_log /usr/local/squid/logs/squidclamav.log squidclamavlog localhost access_log /usr/local/squid/logs/access.log customlog !localhost
うまくいけばこれでsquidclamav.logにsquidclamavからのアクセスが記録され、おまけにログローテーションされるとうれしいのだが・・・。
-rw-r----- 1 squid squid 48097 Dec 3 12:28 squidclamav.log -rw-r----- 1 squid squid 1111 Dec 2 18:36 squidclamav.log.0 -rw-r----- 1 squid squid 2864 Dec 1 18:36 squidclamav.log.1
おっ、できたじゃーん、さすがオレ。
1ヵ月ほど順調に動いていたのだが、サーバからのお便りで異変を知らせてきた。
+pid 557 (clamd), uid 97 inumber 12345 on /tmp: filesystem full
んんっ!?領域不足?
慌てて調べてみたら現在のところ、/tmp,/tmp/clamavは殆ど使われていない。たぶん、一時的にでかいファイルを/tmp/clamavにいれてスキャンしようとしたのだろうな・・・。でもclamdの設定では4ギガバイト位までスキャン対称にしてしまっているので・・・。とりあえず/var/tmp/clamav(1ギガ)に変更してみるか?やっぱ/tmpと/varが少なすぎなのかな?(汗)
TemporaryDirectory /var/tmp/clamav StreamMaxLength 768M
% mkdir /var/tmp/clamav % chown clamav:clamav /var/tmp/clamav % shutdown -r now
領域不足の件があったので何気にログをチェックしていたら・・・
Broken.Executable FOUND
おっ、チェックしてるじゃあーりませんか!。出所は・・・Dellサポートセンター?!アップデートファイル?。でもこのウィルスって・・・調べてみたらただの破損した実行ファイルだと誤検知したっぽいです。しかも自動アップデートらしく連続してダウンロードを試みているようでサーバのCPU使用率が・・・(汗)。少し悩んだあとに破損した実行ファイルの設定をやめてみた。もともとデフォルトで無しだったみたいだし。
#DetectBrokenExecutables yes
% /usr/local/etc/rc.d/clamd.sh restart % /usr/local/etc/rc.d/squid restart
その後両プログラムを再起動。とりあえず一件落着と思っていたが・・・squid.coreとsquidclamav.coreって・・・。見なかったことにしよう(おい!)。
再びなんとなく設定を変更してみる・・・。
#StreamMaxLength 768M # Default: 10M ReadTimeout 60 #ArchiveMaxFileSize 4096M # Default: 10M
force 1
タイムアウトはsquidclamavと同じにしてみた。意味違うかどうかはわからんけど(おい)。あとはいくつかの項目をデフォルトに。
しばらく前からfreshclamのログに残されてきた「今のバージョンは古いですよ」のメッセージが気になったのでバージョンアップする。最新バージョン0.94をダウンロードし、前回のスクリプトをバージョン名だけ変えてコンパイル。clamdの停止・起動もスクリプトに組んであったのだが、すんなりインストールまで完走。
このサーバの利用者から「急にアクセスができなくなる」と苦情が来ていた。なんかclamdが居残ってCPUリソースを食いまくっているようだ。しかしなぜこの現象が起こるのかわからない。とりあえずAdobeReaderの更新とかで発生しやすいらしい。
とりあえずcronでwコマンドを実行し定期的にCPU稼働率をチェック、異常な負荷がかかった時にシステムを再起動してしまうという荒い応急処置をしてみた。なんら更新障害の解決にはならないが、他のアクセスまで停めてしまう最悪の事態は避けられそうだ。
Windowsの自動更新もできないとクレームがあった。ログにはcURL
?でリダイレクトが3回越えたので中止したと記録されていた。うーむ。
clamdかsquidclamavを疑っていたのでウィルスチェック自体を中止してみようかと思ったが、ふと気がついてsquidclamavのサイトを見てみたら・・・。バージョンあがってるじゃん。しかも1つとかじゃなくて3.1→3.9と8つも。更新履歴を眺めてみたが英語なのでよくわからんが、どうやらcURLに最大リダイレクトのパラメータを渡していなかったのをsquidclamavから渡すようにし、そのパラメータを設定できるようにしたらしい。ってまんま不具合が対応されているじゃないか〜い(ちん)。
速攻で最新バージョンをダウンロードし、前回のスクリプトをバージョン名だけ変えてコンパイル。squidの停止・起動もスクリプトに組んであったのだが、すんなりインストールまで完走。
ついでにsquidのバージョンを2.6から3.0に変えてみようかと考えてみる。最新3.0-STABLE12のソースを拾ってきてとりあえず定石どおりの方法でコンパイル。・・・・。
(大量のエラー♪)
・・・だめじゃん。じゃあバイナリのバージョン2.7でいいか、と思ったら3.0のバイナリがあがっていたので試してみる。
(libcrypt.so.4が無ぇぞ♥)
げ・・・これって・・・調べてみたらFreeBSDが6系列はlibcrypt.so.3が入っているらしい・・・てことは・・・
OSのバージョンアップから?・・・orz
とりあえず・・・squidのバージョンアップは忘れた頃までおあずけ・・・。
とりあえずclamavも0.94から0.94.2に変わっただけで古いバージョン扱いされているようなので同じようにバージョンアップしておいた。
今のところ不具合は出ていないらしい。
もうそろそろFreeBSD6系列も時代遅れなのか・・・。いっそのことCD-ROMからアップグレードしてみよう。
しかしネットで調査してみたところ、CD-ROMを使ってのOSアップグレードの情報は殆ど無かった。あるのはネットワーク経由のアップグレードに関する情報ばかり。
こういう時は実験するのみ。仮想マシンでFreeBSD6.1の基本環境を作成。そしてFreeBSD7.1のCD-ROMをセットしてCD-ROMから起動する。
sysinstallメインメニューでは、通常のインストールではなくUpgradeを選択。
すると通常のインストールに似たような手順で薦めていくのだが、途中でパーティーションの設定ではマウントポイントの無いパーティーションにマウントポイントを設定しなおす場面があるので、前もってメモする必要がある。あと/etcのバックアップ先を聞かれるのでデフォルトで。
なんだかんだですんなりアップグレードが終わってしまった。基本部分を上書きインストールしているだけ、という気がするくらいだが実際にはそうはいかないんだろうな。
アップグレード本番に備えて、今アップグレードした仮想マシンをFreeBSD6.2に戻して(話の中で6.1と6.2が混ざっているのは訳アリです)
/etcと/usrを実機からまるごとコピー。
・・・起動・・・よし、うまくいった。(オイ)
現在のパーティーションのマウントポイントをメモしておく。
/usr/local/etc/rc.d/の起動スクリプトの実行属性を解除して、自動起動しないようにしておく。あと該当するデーモンプロセスも終了しておく。
% chmod ugo-x /usr/local/etc/rc.d/*.*
インストールしたパッケージ(Packages)をメモしておいて、一旦全てアンインストールしておく。
FreeBSD7.1のCD-ROMから起動。メインメニューでUpgradeを選択するとこ以外はインストールと同様に画面の指示に従っていく。スライスエディタは変更せずにスルー。パーティーションエディタではメモを元に適切なマウントポイントを設定するのみ。ここらは下手に変更するものなら中身をアッサリ初期化することになるので慎重に進むこと。
アップデートを完了させたら再起動し、FreeBSD7.1で起動するのを確認しよう。
その後/etcの設定ファイルを確認。そんなにたいしたこと無かったと思うけど・・・記憶に自信が無い。
それまで使っていた依存するパッケージをFreeBSD7.1のCD-ROMからインストールしなおす。
といった感じでアップグレード完了。
squidのバージョン3.0をパッケージでインストール。すんなりOK。
他のプログラムもコンパイルしなおす。そんなにたいしたこと無かったと思うけど・・・記憶に自信が無い。
お次はカーネルの再構築。ソースをsysinstallでインストール?し、カーネル設定ファイルを書き換えて、コンパイル・・・。
いきなりエラー。
あれぇ?、おかしいな・・・じゃGENERICに戻してコンパイル。
やっぱりエラー。おかしいな・・・ネット調査でも情報が無い。しばらくあきらめるか。
忘れた頃に再挑戦してみるか。CD-ROMからsysinstallでbaseとsysと、include・・・も必要かな?、とりあえずインストール。
カーネル設定ファイルを用意して、コンパイル。
・・・はい?・・・しょっぱな「HAMMERって何じゃ?」てなエラーが。
カーネル設定ファイルを確認したら、間違えてamd64用のものを使ってた・・・。i386用のものから作り直してコンパイル。
・・・コンパイルできちゃった。かつてのエラーはなんだったんだろ?やっぱソースのインストールでincludeを入れたからか?。でも記憶の外で試行錯誤していたので結局すっきりしたようなしないような・・・。
clamdの起動と終了を制御するスクリプトで再起動させようとすると、まだプロセスが残っているのに起動しようとすると怒られるので直してみる。
プロセスリストを監視して消えるまで待つ、という感じ。時間がかかるけどちゃんと終了&起動するようになったみたい。
サーバの省エネのための自動終了&復帰をこちらのサーバにも適用したのだが、なんかログを見てみるとー・・・。
Jul 8 21:00:59 サーバ名 rc.shutdown: 30 second watchdog timeout expired. Shutdown terminated. Jul 8 21:00:59 サーバ名 init: /bin/sh on /etc/rc.shutdown terminated abnormally, going to single user mode
なんか・・・、シャットダウンの途中でタイムアウトに引っかかって異常終了・・・というか処理を途中でサボってしまってるように見えますが・・・。なんか最近squidのログに原因不明のわけわかめなエラーが出ていると思ったら、コレかしら?。
エラーメッセージをまるごと検索かけてみました。出てきました。ほうほう、タイムアウトの時間を2ヶ所調整することで回避できるとな。すばらしい。
rcshutdown_timeout="300"
kern.init_shutdown_timeout=360
おぉ、これですっきりシャットダウン&再起動できるようになった。すばらしい。ああすっきり。