SC430のうろ覚え

最終更新:

番外:別のサーバ

別のサーバマシン(Pentium 4 1.2GB)が手に入ったので。別の目的のサーバとして研究運用する。FreeBSDの最小インストールはしてある。

番兵をコンパイル・・・

ip-sentinelをコンパイルしようとソースを拾ってきた。

% ./configure

% make

・・・あれ?英語なのではっきりわからんが、こいつをコンパイルできるのはlinuxだけだぜなどとぬかしやがる。むきーっ!

ガードマンをコンパイル その1

検索調査していたらipguardなるものがFreeBSDのdistにあった。中のドキュメント(英語)だと、なんとなくlibnetlibpcapが必要らしい。しかしlibpcapは曲者で、m4やらbisonやらが必要らしく、コンパイルがなかなかうまくいかない。なんとかコンパイルできたような気がしてやっとipguardのコンパイルにかかろうとしたら、この手では珍しくmakeのみだ。しかしそのmakeもこけるこける。Makefileの中を覗いてみると、いろいろパスが違っているので修復してみるのだがやっぱりこける。とりあえず一旦あきらめる。

ガードマンをコンパイル その2

検索調査をしてみると、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インストールでもよかったかなと思いつつ、設定作業に入る。

ClamAVをインストール

(続きに最新の記録があります)

apache2とmod-clamavをインストール

前回同様にapache2をインストール。mod-proxyでプロクシとして稼動させ、mod-clamavをコンパイル&インストールしてみた。どこを間違えたのかよくわからなくなってしまったが、アクセスするとページ違反で落ちているらしい。結局自力で解決できなかったので他の方法を模索する。

Squidをインストール

(続きに最新の記録があります)

squidclamをインストール

(挫折&忘却)

SquidClamavをインストール

(続きに最新の記録があります)



マシン入れ替え

DELL Dimension 2400 - Celeron(Northwood)2.4GHzのマシンがおさがりで手に入ったので交代することに。

ラム

RAMはPC2700の256Mか・・・。先輩と話していたのだが256では少し物足りないかもしれない。しかしメモリの余り物も無いのでどうしようか?会社に頼んでみるか?・・・。と思ったが、ハードオフで1000円で売っていたのでつい自腹で購入。

ちぇき

とはいえハードオフなのでDELLのスタートアップオプションで出てくる診断ツールで夜通し徹底的にチェックしてみる。うむ、問題ない。

やるなら今のうち

交代する前にLonghorn Server beta3を入れてみたりしたのだが、さっっぱりわからない、ハハハ。

OSのインストール

早速FreeBSD 6.2-RELEASE-i386のインストール。最小インストールとカーネル関連のソースをインストール。管理者パスワードとタイムゾーンとネットワークの設定を済ませておく。慣れてきているのでここまではあっという間に済んだ感じLonghorn Server coreと比べてもこっちにほうが早い&速いな。

なんとなく

perlもこの時点でパッケージインストール。なんとなく。

作業用設定

/etc/ttys/etc/ftpusers/etc/inetd.conf/etc/hosts.allowを編集して一時作業用設定にしておく。セキュリティ的にオススメしない設定だが(笑) あと/etc/rc.confも仮設定しておこう。

/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で渡来?

GENERICで構築してみる・・・がコンパイルエラー。ありゃりゃ?

暗中模索

/etc/make.confのコンパイルオプションとかコンフィギュレーションファイルとかスクリプトとか設定し直し→構築→エラー→最初に戻る・・・の繰り返しの末、やっとコンパイルが完了した。

/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でいいらしい。

CAPTAIN (コンフィギュレーション:抜粋)
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なのは、上記のサーバの流れから。深い意味は無い。

kernel.build.sh
#!/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を編集しておく。

/etc/ntp.conf
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サーバと通信できなくなった場合に自前のクロックを使って凌ぐための設定。

/root/.cshrc(に追加)
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"
ClamAVのインストール

後にインストールするSquidSquidClamavと連携してオンラインウィルススキャンな環境をでっち上げるために、FreeBSDで使える無料なウィルスセキュリティソフトを導入する。

ソースと必要なパッケージを拾ってきて転送。libtoolは・・・あるよな。とコンパイルスクリプトも作成して転送。

clamav.build.sh
#!/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
ClamAVの設定

必要なディレクトリを確認・作成し、/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
/usr/local/etc/clamd.conf
#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
/usr/local/etc/freshclam.conf
#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の起動

データベースの更新をしてみる。

% 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の設定を変更する。

/etc/rc.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の起動(再)

再びデータベースの更新をしてみる。

% 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の起動テストをしてみる。

% clamd

何もエラー吐かないので大丈夫でしょう。topコマンドで試しても起動しているし。freshclamも試してみたら今度は何もエラー吐かなかった。

clamdの自動起動設定

clamdの起動スクリプトを転送。どっかでパクったかな?

/usr/local/etc/rc.d/
#!/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

サーバを再起動して確認する。よさげですな。

Squidのインストール

プロクシサーバプログラム。プロクシ目的ならばapacheよりも融通が利くので人気があるみたい。

パッケージがあるので拾ってきて転送。perl-5.8.8だけ必要か・・・バージョンは合っているね? パッケージなのでサクっとインストール。

% pkg_add /dist/squid-2.6.15.tbz

いやー、パッケージインストールは速いねぇ。でもクローズ環境だと依存関係が狂うと全然融通利かないのよね。で、インストール時に説明が表示されるのでそれを参考に設定を進めていく。

Squidの準備と設定

キャッシュディレクトリの初期化をする。

% rehash
% squid -z
2007/11/09 12:34:56| Creating Swap Directories

設定ファイルの編集をする。結構な行数があるので、少々面倒くさいが変更点はコメントマークしておいたほうが良い。

/usr/local/etc/squid/squid.conf(変更点のみ抜粋)
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です。

・・・実はこの前に設定ファイルを上書きするのを忘れて試してみたら、しっかりプロクシサーバに拒否されました。デフォルトは全て拒否ルンです。

squidの自動起動設定

パッケージでインストールすると自動起動設定も親切だなぁ。すでにスクリプトがインストールされているので、/etc/rc.confに次の行を追加するだけだ。

/etc/rc.conf(追加)
squid_enable="YES"

これで再起動&接続してみる。よさげですな。

SquidClamavのインストール

SquidでClamAVを連携させるためのrewrite_programとしてSquidClamavを導入する。似たような名前でsquidclamというものがFreeBSDのパッケージで存在するが、試してみたらなんかイマイチだったのでそちらは却下。

ソースと必要なパッケージを拾ってきて転送。コンパイルスクリプトも作成して転送。

squidclamav.build.sh
#!/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になる。

SquidClamavの設定

設定ファイル/etc/squidclamav.confとSquid設定ファイル/usr/local/etc/squid/squid.confを編集する。

/etc/squidclamav.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設定はちょいと動作が思惑通りにならないことがあったので、使わないことにした。

/usr/local/etc/squid/squid.conf(変更点のみ抜粋)
url_rewrite_program /usr/local/bin/squidclamav
CGIスクリプトの設置

Webサーバに応答用のCGIスクリプトを設置する。元はcgi(perl)だったが自分的にphpにしてみた。

clwarn.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/access.log
/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で行うよう設定する。

/etc/crontab(追加)
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
delegateのインストール

FTP,POP3,SMTPの中継を行う目的でdelegateを導入する。

ソースを拾ってきて転送。コンパイルスクリプトも作成して転送。これだけちょっとコンパイルの感じが違うみたいだ。

delegate.build.sh
#!/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

途中でメールアドレスを聞かれるが、適当に(ありえないドメイン)答えてしまった。後で変えられるはずだけど。コンパイル途中でなんかエラー多発しているみたいなんだけどー。でも無視しているようにも見えるしー。とりあえず終わったらしいところでコンパイルスクリプトでプログラムをエイリアスしてみた。ちゃんとコンパイルできてるのかな?

delegateの設定

設定ファイルを使う前提でないプログラムなので、設定は自動起動スクリプトで記述する。

/usr/local/etc/rc.d/delegated.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のログローテーション

squidclamavのログが1つのファイルでどんどん増えていくのでログローテーションしてみたいところだが、そのためにまたソフトを使うのもなぁ・・・。と思っていたが、ふとsquidのログローテーションを使ってみたら?と思って試してみた。ついでにsquidclamav127.0.0.1からのアクセスなのでそれも分離してみる。ログ形式は適当。

/usr/local/etc/squid/squid.conf(変更点)
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.logsquidclamavからのアクセスが記録され、おまけにログローテーションされるとうれしいのだが・・・。


-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が少なすぎなのかな?(汗)

/usr/local/etc/clamd.conf(変更点)
TemporaryDirectory /var/tmp/clamav
StreamMaxLength 768M
% mkdir /var/tmp/clamav
% chown clamav:clamav /var/tmp/clamav
% shutdown -r now
ウィルス発見!?

領域不足の件があったので何気にログをチェックしていたら・・・

Broken.Executable FOUND

おっ、チェックしてるじゃあーりませんか!。出所は・・・Dellサポートセンター?!アップデートファイル?。でもこのウィルスって・・・調べてみたらただの破損した実行ファイルだと誤検知したっぽいです。しかも自動アップデートらしく連続してダウンロードを試みているようでサーバのCPU使用率が・・・(汗)。少し悩んだあとに破損した実行ファイルの設定をやめてみた。もともとデフォルトで無しだったみたいだし。

/usr/local/etc/clamd.conf(変更点)
#DetectBrokenExecutables yes
% /usr/local/etc/rc.d/clamd.sh restart
% /usr/local/etc/rc.d/squid restart

その後両プログラムを再起動。とりあえず一件落着と思っていたが・・・squid.coresquidclamav.coreって・・・。見なかったことにしよう(おい!)

ちょこっと変更

再びなんとなく設定を変更してみる・・・。

/usr/local/etc/clamd.conf(変更点)
#StreamMaxLength 768M    # Default: 10M
ReadTimeout 60
#ArchiveMaxFileSize 4096M     # Default: 10M
/etc/squidclamav.conf(変更点)
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に変わっただけで古いバージョン扱いされているようなので同じようにバージョンアップしておいた。

今のところ不具合は出ていないらしい。



CD-ROMからのFreeBSDアップグレード

もうそろそろ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用スクリプト

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ヶ所調整することで回避できるとな。すばらしい。

/etc/rc.conf(追加)
rcshutdown_timeout="300"
/etc/sysctl.conf(追加)
kern.init_shutdown_timeout=360
すんなり

おぉ、これですっきりシャットダウン&再起動できるようになった。すばらしい。ああすっきり。


SC430インデックスへ
トップページへ

こな