
えーっと、なんか、dpkg-reconfigure しないと駄目なのね。aptitude install で dpkg-reconfigure 必要なパッケージはなんか教えてよ orz
そんで、mkchroot.sh は /usr/share/doc/rssh/examples にあって、実行しても ld-linux.so と /lib/ld-2.3.6.so と /etc/ld.so.conf.d/i486-linux-gnu.conf はコピーしてくれないっぽい。ld.so.conf.d が必要かどうかは知らんけれども。
最後に、chroot 以下にコピーされたファイル群をアップデートする必要があるので、こんなシェル作った
#!/bin/bash
# 変数定義
CHROOT_DIR=/usr/chroot
# ldd する必要のあるファイルを指定
BINFILES='/usr/lib/rssh/rssh_chroot_helper
/usr/lib/openssh/sftp-server
/usr/bin/rssh
/usr/bin/scp'
# シンボリックリンクなファイルを指定
LINKFILES='/lib/ld-linux.so.2
/lib/libnss_compat.so.2
/lib/libnss_files.so.2'
# 単純にコピーしてくればよいファイルを指定
CONFFILES='/etc/nsswitch.conf
/etc/ld.so.conf
/etc/ld.so.cache
/etc/ld.so.hwcappkgs
/etc/ld.so.conf.d/i486-linux-gnu.conf'
APTARC_DIR=/var/cache/apt/archives
APTTIME_FILE=/var/tmp/apt_time
TEMPFILE=/tmp/$$.tmp
# 関数定義
LINKTO()
{
echo $(dirname ${1})/$(LINKNAME ${1})
}
LINKNAME()
{
stat -c %N ${1} | sed -e 's/^.*-> `//g' -e "s/'"'$//g'
}
# apt でファイル取得が実行されたかどうかのチェック
if [ $(stat -c %Y ${APTARC_DIR}) -eq $(stat -c %Y ${APTTIME_FILE}) ]
then
exit 0
fi
touch -r ${APTARC_DIR} ${APTTIME_FILE}
# シンボリックリンクの更新
for f in ${LINKFILES}
do
if [ $(LINKNAME ${CHROOT_DIR}${f}) != $(LINKNAME ${f}) ]
then
echo update link ${CHROOT_DIR}${f}
rm $(LINKTO ${CHROOT_DIR}${f})
rm ${CHROOT_DIR}${f}
ln -s $(LINKNAME ${f}) ${CHROOT_DIR}${f}
fi
done
# 更新対象ファイルリストの作成
ldd ${BINFILES} | egrep -v ':$|linux-gate.so' | sed -e 's/^.* => //g' -e 's/ (.*)//g' > ${TEMPFILE}
for f in ${LINKFILES}
do
LINKTO ${f}
done >> ${TEMPFILE}
for f in ${CONFFILES}
do
echo ${f}
done >> ${TEMPFILE}
echo "${BINFILES}" >> ${TEMPFILE}
# 変更の有ったファイルを更新
sort ${TEMPFILE} | uniq | egrep -v $(echo ${LINKFILES} | tr ' ' '|') | while read f
do
if [ ! -f ${CHROOT_DIR}${f} ]
then
echo copy file ${CHROOT_DIR}${f}
cp -pf ${f} ${CHROOT_DIR}${f}
fi
if [ $(stat -L -c %Y ${CHROOT_DIR}${f}) -ne $(stat -L -c %Y ${f}) ]
then
echo update file ${CHROOT_DIR}${f}
cp -pf ${f} ${CHROOT_DIR}${f}
fi
done
rm ${TEMPFILE}
ホントは Makefile を書くつもりだったけど、書き方よー分からんかったのと、細かく動作制御すんのめんどくさかったから、bash スクリプト。で、aptitude upgrade して更新が有った場合だけ実行すりゃいいんだけれども、忘れると嫌なんで、このスクリプトを cron.daily に放り込んだ。
なんか BINFILES が更新されない。更新対象としてファイルに出力してないじゃん。何ヶ月気づいてないんだよ、もう一年近く経ってるのに orz
ちゅうことで、echo "${BINFILES}" >> ${TEMPFILE} を追加。これで多分実行モジュールも更新される。
clamd を使ってみることにした。当然 fresh-clam も使うことに。
はじめ数日は clamd が読み込んでないなんてまるっきり気がついてなかったのだけれども、何気なく /var/log/clamav/freshclam.log と /var/log/clamav/clamd.log を覗いたら、何か知らん、fresh-clam で更新されても clamd がなんもしてないっぽい。駄目じゃん orz。
結局、南極、/etc/init.d/clamav-freshclam の start でコマンド引数を指定してなんとかなった。
start_daemon $DAEMON -d --quiet↑これを↓こうした。
start_daemon $DAEMON -d --quiet --daemon-notify=${CLAMAV_CONF_FILE}これで↓こんなログが出るようになった。
もちっとスマートな解決方法がありそうな気もしなくも無いし、forcing reload ってのがちょっと気になったりはするんだけれども、その辺は思考停止することにして、ついでに、立ち上げっぱなしだとメモリ喰い潰してる気がするから、1日1回再起動することに。Mon Jan 14 05:15:10 2008 -> No stats for Database check - forcing reload< Mon Jan 14 05:15:10 2008 -> Reading databases from /var/lib/clamav< Mon Jan 14 05:15:25 2008 -> Database correctly reloaded (191357 signatures)<
#!/bin/bash /etc/init.d/clamav-freshclam restart /etc/init.d/clamav-daemon restart
とか書いて、/etc/cron.daily に放り込んだ。
これでなんかちゃんと動いてるっぽいけど、よく分からん(汗
cron.hourly のログが auth.log に出て鬱陶しいです。毎時実行させるタスクがないのなら、cron.hourly を止めてしまえばよいw
↑これを↓こうする。17 * * * * root cd / && run-parts --report /etc/cron.hourly 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) 47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) 52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
以上終わり。# 17 * * * * root cd / && run-parts --report /etc/cron.hourly 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) 47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) 52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#!/bin/bash
PIDFILE=/var/run/cron.hourly.pid
if [ -f "${PIDFILE}" ]
then
PID=$(head -1 ${PIDFILE})
fi
if [ -n "${PID}" ]
then
ps -f h -p ${PID} >/dev/null
ISALIVE=${?}
else
ISALIVE=1
fi
case $1 in
start)
if [ ${ISALIVE} -eq 0 ] ; then exit 0 ; fi
(
while true
do
run-parts --report /etc/cron.hourly
sleep 1h
done
) > /dev/null 2>&1 &
echo $! > ${PIDFILE}
;;
stop)
if [ ${ISALIVE} -eq 0 ]
then
CPID=$(pgrep -P ${PID})
kill ${PID}
kill ${CPID}
fi
if [ -f "${PIDFILE}"] ; then rm ${PIDFILE} ; fi
;;
restart)
$0 stop
$0 start
;;
*)
;;
esac
exit 0
で、これを init.d に放り込んで、rc?.d からシンボリックリンク張って終わり。
HTTP_USER=admin
HTTP_PASSWD=passwd
BASEINFO_URL=http://192.168.1.1/diag/baseinfo.cgi
DDOJP_URL=http://free.ddo.jp/dnsupdate.php
DDOJP_DOMEIN=hoge
DDOJP_PASSWD=passwd
UPDATE_LOG=/tmp/ddns_update.log
NOW_IP=$(wget --http-user ${HTTP_USER} --http-passwd ${HTTP_PASSWD} ${BASEINFO_URL} -q -O - | head -
211 | tail -1 | sed 's#^.*<strong>\(.*\)</strong.*$#\1#g')
# 前のアドレスと比較して同じなら
if ( [ -f ${GLOBAL_ADDRESS_FILE} ] && [ "${1}" != "force" ] )
then
OLD_IP=$(cat ${GLOBAL_ADDRESS_FILE})
if [ ${NOW_IP} == ${OLD_IP} ]
then
exit 0
fi
fi
echo ${NOW_IP} > ${GLOBAL_ADDRESS_FILE}
wget -q -O ${UPDATE_LOG} ${DDOJP_URL}?dn=${DDOJP_DOMEIN}&pw=${DDOJP_PASSWD}
exit ${?}
これを cron.hourly に放り込んだ。で、force オプションをつけると IP の更新があっても無くても ddo.jp にアクセスするようにしてみた。cron.weekly にこんなシェルを放り込んだ。
#!/bin/bash ../cron.hourly/ddns_update force
1ヶ月以上アクセスしないとアカウント消されちゃうから、1週間に1回は ddo.jp にアクセスに行くって寸法。
上のシェルですが、cron から実行されると [defunct] が出来ます orz
原因は標準出力が閉じないからじゃないかと思われます。つまり、親シェルは終わるけどサブシェルをバックグラウンドにしてるから、サブシェルの標準出力が生きていて、親シェルの標準出力が閉じないので、cron は親シェルの終了シグナルを受け付けないのだと思われ(ホントかよ?!)
と言うことで、早々、"> /dev/null 2>&1" を追加。問題解決。
defunct 怖いですね、恐ろしいですね。さよなら、さよなら、さよなら。
忘れないように書いときますが、そもそもインストールで嵌ったんでした。実ははじめ Ubuntu 入れようとしていたの。でもインストールできなかったの。Ubuntu デスクトップに必要なメモリー量が無かったから、デスクトップが入らなかったのは当然として、Ubuntu サーバも入らなかったの。irqpoll オプションつけろって言われるから、オプションつけてインストールするんだけど、インストールできないと言うか、何度やってもインストールの途中で止まっちやうの。Ubuntu サーバならギリ入るはずなんだけどなー、変だなー、と思いつつ Ubuntu をあきらめて Debian にしてみることに。Debian でもインストール開始直後に文句を言われる。前に FreeBSD(というか FreeNAS なんだけど)は動いたなー、とおもいつつ FreeNAS を CD で動かすとちゃんと動く。インストールも出来て問題なく HDD から動く。FreeBSD も嫌いじゃないんだけど、FreeBSD は古臭いし、これからはやっぱ Linux だよ!FreeBSD で動いて Linux が動かないわけがない!とか強く思ったわけ(そういえば、Solaris 10 とか使ってると BSD 臭がぬけてきてる希ガス)。
はぁ、というわけで、再び Debian でトライ。Ubuntu も Debian も Core は一緒!とばかりに irqpoll オプションを指定してインストールしてみる。あっさり入った。なんだよー、と思いつつ、次は telnetd のインストールだ!と勢い込む。この時点で既に2日経過
このマシーン、ノートなんだけど、サーバ用途限定で放熱を良くして出来るだけ無駄な電力使わないようにいらないものを外しまくってる。バッテリーパック、FDD、モデムはもちろん、キーボード、タッチパット、液晶画面(!)。ついでに HDD の放熱が良くなるように、ケース自体まで破壊してあったりw 背面のディスプレー端子と PS2 にデスクトップで使ってる液晶ディスプレーとキーボードさして、内臓 LAN ボードがないから PCI に LAN カードと言う状態。なので、デスクトップマシンでウェブで調べるにもいちいちディスプレーつなぎかえという馬鹿さ加減。もうディスプレー切替器買っちゃおうかと。こんなならインストールしてから筐体破壊すればよかったよと(爆
そんなわけで一刻も早くリモートからログインできるようにしたかったわけ。なのでとにもかくにも telnetd。Debian は楽でいいな!apt-get!!と勢い込んだけど、ネットワークからパッケージを取り込んでる最中に何故か固まる。そして強制電源断。あひゃ。Linux だぞー、ゲイツ OS じゃないのになんだよー、と思いつつ、懲りずに apt-get 今度は上手くいく。
よし、リモートから乗り入れて設定だ!と telnet で入ってしばらくたつと固まる。そして強制電源断。あひゃ。ハードと相性が悪いのかなー、FreeBSD にしようかなー、などと日和ったことを考えながら、次は ntpd かなと。その間に何度もターミナルからの接続が切られている。そして apt-get で再び固まる。そして強制電源断。あひゃ?あひゃひゃ??もしかしてネットワーク?そういえば Ubuntu のインストールが止まったのも外につなぎに行った後だったよなと思い直す。ネットで調べると、acpi ゆう機能があって電源管理をするんだが、ハードウェアの割り込みとかにも関係有るらしい(ハード寄りのことはさっぱりわからんw)。割り込みは /proc/interupts をみるとわかるらしい。なんかひどく acpi の割り込みが多い、でもこんなもんなのかも?とかそのときは思う。が、今にして思うと timer より acpi の割り込みが多いのは明らかにおかしい(爆
acpi ゆうのはは結構問題を起こすらしい。なんか noacpi ってオプションもあるらしい。ふうんそうなんだと。で、ブートオプションの指定はどこでしてるの?irq って割り込みだけど irqpoll って何?acpi?何?それおいしいの?やっぱハードウェア割り込みとソフトウェア割り込みが分かってないわ自分wとか思いつつ、もう Google 先生に聞きまくりのディスプレイ繋ぎ変えまくりで noacpi とか acpi=no とか nolacpi とか lacpi=no とかいろいろやったけど、結局ネットワークが途中で切れる。悪いときにはネットワーク自体が使えない。手当たりしだにページ読んでもいまいちよく分からない。しかも irqpoll が一番まともに動く気がする。あわせ技も駄目。むしろ irqpoll 含めないとちょっとも動かない。はてなダイアリーでおんなじような苦労をしている人を発見!何?acpi=noirq?ま、ものは試しとやってみたところ、何かよさげ。ここで、さらに3日経過w
あれれ?それでも切れる!深夜〜明方は切れないけど、夜は切れる!うわぁ!なんじゃー!ひょっとして LAN 内飛んでるパケットが悪さしてるんか?!とか思って、パケットキャプチャしてみたら、なんか、ブロードキャストが飛んでくるときれる!このパケットがいけないんじゃ!このアドレスは!Debian からだ!この mac アドレスは!あれ?無線 LAN の mac で登録してるぞ?有線でつないでるのになんで無線 LAN ??あ、あれ??ま、まさか... はい、IP 衝突してました orz
そう、DHCP 止めて静的に割り振ってるから、振り間違えると衝突する。通信が深夜に切れないのは親父のマシンが上がってないから。IP 振りなおして、問題解決。もう一度ブートオプションを irqpoll にしてみるけど、やっぱり irqpoll じゃ不安定。acpi=noirq が正解だったらしい。ここまでたどり着くまで、トータル1週間www
家のマシンのネットワークは全台私が設定してるのに IP 振り間違える私も馬鹿だけど、なんで irqpoll にしろなんていうんだろう?はじめから acpi=noirq にしろってメッセージ出してくれれば、今頃は Ubuntu サーバだったのに。ま、管理が楽そうな deb 系にしたかっただけだから、結局 Debian で不満はないんだけど.
結論。irqpoll や noacpi で上手くいかなかったら、acpi=noirq を試してみると良い。うん、がっつり書いたら、すっきりしたw
title Debian GNU/Linux, kernel 2.6.18-5-686 root (hd0,0) kernel /boot/vmlinuz-2.6.18-5-686 root=/dev/hda1 ro acpi=noirq initrd /boot/initrd.img-2.6.18-5-686 savedefault title Debian GNU/Linux, kernel 2.6.18-5-686 (single-user mode) root (hd0,0) kernel /boot/vmlinuz-2.6.18-5-686 root=/dev/hda1 ro acpi=noirq single initrd /boot/initrd.img-2.6.18-5-686 savedefault
acpi オプションの微妙な違いはマヂで理解できない。noacpi と acpi=noirq とacpi=off でどう違うのかもちっと分かりやすく書いてくれい。
acpi=off disables both ACPI table parsing and interpreter acpi=force to over-ride black-list acpi=strict disables out-of-spec workarounds pci=noacpi disable ACPI IRQ routing and PCI scan acpi=noirq disables ACPI interrupt routing noacpi ACPI 無効
多分 2.6.26-1-686 から 2.6.26-2-686 になったタイミングだと思うのだけれど、また kacpid がわらわら言うようになった。仕方ないので色々いじってみた。上から順に試していった組み合わせw
なんか、amp というパラメータも電源制御とかに関係するようだった。ますますよう分からんw## kopt=root=/dev/hda1 ro acpi=noirq pci=noacpi console=ttyS0,115200 ## kopt=root=/dev/hda1 ro acpi=noirq pci=noacpi acpi=force console=ttyS0,115200 ## kopt=root=/dev/hda1 ro acpi=force pci=noacpi console=ttyS0,115200 ## kopt=root=/dev/hda1 ro acpi=off pci=noacpi acpi=force console=ttyS0,115200 ## kopt=root=/dev/hda1 ro acpi=off pci=noacpi console=ttyS0,115200 ## kopt=root=/dev/hda1 ro acpi=noirq pci=noacpi console=ttyS0,115200 ## kopt=root=/dev/hda1 ro apm=off acpi=off pci=noacpi console=ttyS0,115200 # kopt=root=/dev/hda1 ro acpi=noirq pci=noacpi acpi=force apm=off console=ttyS0,115200
title Debian GNU/Linux, kernel 2.6.26-2-686 root (hd0,0) kernel /boot/vmlinuz-2.6.26-2-686 root=/dev/hda1 ro acpi=noirq pci=noacpi acpi=fo rce apm=off console=ttyS0,115200 initrd /boot/initrd.img-2.6.26-2-686 title Debian GNU/Linux, kernel 2.6.26-2-686 (single-user mode) root (hd0,0) kernel /boot/vmlinuz-2.6.26-2-686 root=/dev/hda1 ro acpi=noirq pci=noacpi acpi=fo rce apm=off console=ttyS0,115200 single initrd /boot/initrd.img-2.6.26-2-686
科学と非科学の迷宮さんちの「[Linux]atime関連マウントオプション使用時のディスク性能比較」を読んで noatime は多少効果があるらしいことが分かったので、やってみることにした。ついでになんとなくやってなかった hdparm による hdd の高速化&静穏化をやってみた。
なになに?noatime より relatime のほうがいいのか、とおもむろに fstab を編集。
# /etc/fstab: static file system information. # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 /dev/hda1 / ext3 defaults,<strong>relatime,</strong>errors=remount-ro 0 1 /dev/hda2 none swap sw 0 0 /dev/hdc /media/cdrom0 udf,iso9660 user,noauto 0 0 /dev/fd0 /media/floppy0 auto rw,user,noauto 0 0
何も考えずにに reboot 。いつまで経ってもあがらない。コンソールをなんか嫌な赤字が... 強制終了。
single user 。駄目。あひゃー。
なみだ目で ubuntu desktop cd を挿入。ちゅーんちゅーん言ってる。30分待ち。64 MB のマシンじゃあがらないっぽい。
半泣きで debian の install cd を挿入。インストール開始されちゃうよ(泣
泣きながら install の起動メニューを熟読。とりあえず、F1。ほかにもメニューがあるらしい。F5,F6...
レスキューモードを発見。これでいけそう。rescue acpi=noirq で起動。色々聞かれて最後に hdd のどのパーティションマウントする?ときかれた。よし。
# /etc/fstab: static file system information. # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 /dev/hda1 / ext3 defaults,<strong>noatime,</strong>errors=remount-ro 0 1 /dev/hda2 none swap sw 0 0 /dev/hdc /media/cdrom0 udf,iso9660 user,noauto 0 0 /dev/fd0 /media/floppy0 auto rw,user,noauto 0 0
それでも noatime にして reboot 。今回は問題なしと。性能は測ってないw
hdparm によるチューンもしてみることにした
いつものごとく aptitude install hdparm 。vi /etc/hdparm.conf。
(snip)
/dev/hda {
mult_sect_io = 16
write_cache = on
dma = on
spindown_time = 180
io32_support = 1
}
#command_line {
# hdparm -q -m16 -q -W0 -q -d1 /dev/hda
#}
適用する前に hdparm /dev/hda でオプションの状態と hdparm -t /dev/hda でベンチを取る。
hdparm -t x 3$ hdparm /dev/hda /dev/hda: multcount = 0 (off) IO_support = 0 (default 16-bit) unmaskirq = 0 (off) using_dma = 1 (on) keepsettings = 0 (off) readonly = 0 (off) readahead = 256 (on) geometry = 65535/16/63, sectors = 195371568, start = 0
/etc/init.d/hdparm で設定を適用。Timing buffered disk reads: 62 MB in 3.05 seconds = 20.31 MB/sec Timing buffered disk reads: 68 MB in 3.04 seconds = 22.38 MB/sec Timing buffered disk reads: 74 MB in 3.08 seconds = 24.06 MB/sec
hdparm -t x 3$ hdparm /dev/hda /dev/hda: multcount = 16 (on) IO_support = 1 (32-bit) unmaskirq = 0 (off) using_dma = 1 (on) keepsettings = 0 (off) readonly = 0 (off) readahead = 256 (on) geometry = 65535/16/63, sectors = 195371568, start = 0
Timing buffered disk reads: 68 MB in 3.03 seconds = 22.41 MB/sec Timing buffered disk reads: 68 MB in 3.06 seconds = 22.22 MB/sec Timing buffered disk reads: 76 MB in 3.07 seconds = 24.75 MB/sec
なんかまったく早くなってない。3分待ってもスピンダウンしてないっぽいし。どこが悪いのかなぁ...
smtp 鯖を立てて、家鯖でメールを受信できるようにしてみた。ちなみに、exim4。すると、ポート空けて数時間で踏み台にしようとするアクセスが。cram md5 でログインしない限りリレーしないように設定してあるので(しかもパスワードは10桁以上あるし)まぁ、心配は無いのだけれど、こういうアクセスが多いと肝心なログが埋もれてしまってやばいことになるかもしれないので、不正なアクセスがあった IP をログから抽出して、iptables で拒否するスクリプトを作った。
make.denyexim.filterbash exim.filter bash apache2.filter
(
cd /var/log/exim4
for f in rejectlog.*.gz
do
gzip -dc ${f}
done
cat rejectlog rejectlog.1
) | egrep -v 'spamer' | sed 's/^.*\[\(.*\)\].*$/\1/g' | \
egrep -v '192\.168\.[1-8]|210\.2\.19' | \
cat - ~/deny.smtp | cut -d. -f1-3 | sort | uniq | sed 's/$/.0/g' | \
grep -v -f white.filter > ~/deny.smtp.tmp
mv ~/deny.smtp.tmp ~/deny.smtp
apache2.filter
(
cd /var/log/apache2
for f in access.log.*.gz
do
gzip -dc ${f}
done
cat access.log.1 access.log
) | egrep -v '192\.168\.1\.[1-9]|210\.2\.19| 200 | 301 | 304 ' | \
egrep 'CONNECT|PUT|http://|file://|php|\\x99|cgi-bin|vhcs|servlet|\.dll|soapCaller.bs|Wind
ows 98
|MSFrontPage' | \
cut -d' ' -f1 | cat - ~/deny.http | cut -d'.' -f1-3 | sort | uniq | sed 's/$/.0/g' | \
grep -v -f white.filter > ~/deny.http.tmp
mv -f ~/deny.http.tmp ~/deny.http
iptables.sh
#!/bin/bash
# 全てのルールを削除
iptables -F
# ポリシー
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# Loopbackアドレスにすべて許可
iptables -A INPUT -i lo -j ACCEPT
# 不正アクセスがあった IP を弾く
while read f
do
iptables -A INPUT -p tcp -s ${f}/24 --dport 25 -j DROP
done < ~/deny.smtp
while read f
do
iptables -A INPUT -p tcp -s ${f} --dport 25 -j DROP
done < ~/deny.hinet
while read f
do
iptables -A INPUT -p tcp -s ${f}/24 --dport 80 -j DROP
done < ~/deny.http
iptables -A INPUT -p tcp -s 209.222.128.0/19 --dport 80 -j DROP
iptables -A INPUT -p tcp -s 85.17.216.0/24 --dport 80 -j DROP
iptables -A INPUT -p tcp -s 195.122.131.0/24 --dport 80 -j DROP
##### サーバ待ちうけ許可 #####
# NTP
iptables -A INPUT -p udp -s 192.168.1.0/28 --dport 123 -d 192.168.1.2 -j ACCEPT
# HTTP
iptables -A INPUT -p tcp --dport 80 -d 192.168.1.2 -j ACCEPT
# TELNET
iptables -A INPUT -p tcp -s 192.168.1.4 --dport 23 -d 192.168.1.2 -j ACCEPT
# SSH
iptables -A INPUT -p tcp -s 192.168.1.3 --dport 22 -d 192.168.1.2 -j ACCEPT
iptables -A INPUT -p tcp -s 192.168.1.4 --dport 22 -d 192.168.1.2 -j ACCEPT
iptables -A INPUT -p tcp -s 192.168.1.8 --dport 22 -d 192.168.1.2 -j ACCEPT
# SVN
iptables -A INPUT -p tcp -s 192.168.1.4 --dport 3690 -d 192.168.1.2 -j ACCEPT
iptables -A INPUT -p tcp -s 192.168.1.8 --dport 3690 -d 192.168.1.2 -j ACCEPT
# POP
iptables -A INPUT -p tcp -s 192.168.1.4 --dport 110 -d 192.168.1.2 -j ACCEPT
# SMTP
#iptables -A INPUT -p tcp -s 192.168.1.4 --dport 25 -d 192.168.1.2 -j ACCEPT
iptables -A INPUT -p tcp --dport 25 -d 192.168.1.2 -j ACCEPT
# Auth(Ident)
iptables -A INPUT -p tcp --dport 113 -j REJECT --reject-with tcp-reset
iptables -A OUTPUT -p tcp --sport 113 --tcp-flags RST RST -j ACCEPT
iptables -A INPUT -p tcp --sport 113 --tcp-flags RST RST -j ACCEPT
##### クライアント許可 #####
# DNS応答
iptables -A INPUT -p udp --sport 53 --dport 1024: -j ACCEPT
# NTP応答
iptables -A INPUT -p udp -s ring.aist.go.jp --sport 123 -j ACCEPT
iptables -A INPUT -p udp -s ntp2.jst.mfeed.ad.jp --sport 123 -j ACCEPT
# ICMP echo
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
# ICMP echo reply
iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
# 確立済み
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
##### 明示的拒否(ログ出力抑止) #####
# NETBIOS
iptables -A INPUT -p tcp -s 192.168.1.0/28 --dport 137:139 -j DROP
iptables -A INPUT -p udp -s 192.168.1.0/28 --dport 137:139 -j DROP
iptables -A INPUT -p udp -s 192.168.1.0/28 --sport 137:139 -j DROP
##### 拒否アクセスのログ出力 #####
# 以上の条件に当てはまらなかったeth0からのパケットは,ログを吐いてDROPする
iptables -N block
iptables -A block -i eth0 -p tcp -j LOG --log-level info --log-prefix 'iptables:'
iptables -A block -i eth0 -p udp -j LOG --log-level info --log-prefix 'iptables:'
iptables -A block -i eth0 -p icmp -j LOG --log-level info --log-prefix 'iptables:'
iptables -A block -i eth0 -j DROP
iptables -A INPUT -j block
iptables -A FORWARD -j block
iptables-save > /etc/iptables.rules
IP を調べてみると、台湾の HINET を筆頭に、中国、台湾からのアタックがあまりにも多く、DHCP なマシンから投げられてるっぽい。これだと 255.255.255.0 で弾いても効果が薄い感じが。これらの国からメールを受信することは無いので、嫌なアクセスがあったらドメイン登録情報に記載されているサブネット丸ごと拒否してしまうようにした。
結果、かなり変なアクセスが減った。今のところ拒否しているの IP のリストはこんな感じ。
※中国、台湾が嫌いなのじゃなくて、アタックがあった IP のサブネットを拒否しているので、嫌がらせをしてこないところは弾いてない。
※最近は中国、台湾以外でもブラジルとかからも結構来てるからそれも弾いている。
58.60.0.0/14 59.10.45.0/24 59.56.0.0/11 59.112.0.0/12 58.114.0.0/15 61.31.160.0/19 61.216.0.0/13 61.224.0.0/13 66.139.160.64/29 77.37.168.0/21 77.37.176.0/20 77.37.192.0/19 77.37.240.0/21 77.232.1.0/24 83.94.112.56/29 112.104.0.0/16 112.105.0.0/16 114.32.0.0/12 115.80.0.0/14 116.52.0.0/14 118.160.0.0/13 118.168.0.0/16 118.169.0.0/16 120.92.0.0/16 121.32.0.0/14 122.116.0.0/16 123.204.64.0/18 123.204.128.0/17 123.205.224.0/20 123.252.126.0/24 124.8.0.0/14 124.12.0.0/16 124.217.214.0/24 125.224.0.0/13 125.232.0.0/15 201.1.0.0/16 201.26.0.0/16 202.102.224.0/19 208.127.19.206 218.19.0.0/16 218.20.0.0/16 218.160.0.0/12 219.84.0.0/15 219.86.32.0/20 219.128.0.0/13 219.137.0.0/15 220.129.0.0/12 220.160.0.0/15 220.162.0.0/16 220.171.0.0/20 221.216.0.0/13 222.216.0.0/15 222.218.0.0/16
なんとなく気になるので、chkrootkit と integrit を使うことにしてみたメモ。
今回はめもす屋さんを参考にさせていただきました <(_`_)>
んで、chkrootkit は設定いらず。integrit も integrit.debian.conf を書き換えて終わり。
後は侵入されるのを待つだけ(違CONFIGS="/etc/integrit/bin.conf /etc/integrit/boot.conf /etc/integrit/dev.conf /etc/integrit/etc.conf /etc/integrit/lib.conf /etc/integrit/sbin.conf /etc/integrit/usr.conf"
ずーっと前からディスプレイを繋がずに使ってましたが、シングルユーザが必要な場合やネットワークに問題がある場合にはディスプレイを直接繋いでメンテしなければならず、なんだかなぁな状態だったので、シリアルケーブル買ってきた。
debian でシリアルコンソールにするのは結構簡単。
# うーん、簡単とか言うなら、Solaris ならデフォでシリアルコンソールになってるんだが...
書き換えが必要だったのは /etc/inittab および /boot/grub/menu.lst 。
今回はblog.shimazu.orgさんを参考にさせていただきました <(_`_)>
# ちなみに、この設定だと通信速度が 115200 byte/s なので端末エミュレータ側も通信速度をあわせておく必要がある。
T0:23:respawn:/sbin/getty -L ttyS0 115200 vt100
シリアルコンソールだと何故かコンソールのサイズを認識してくれず、stty size とすると 0 0 といわれてしまう。 これだとコンソールの真ん中ちょっと下くらいにカーソルが居続けることになって、なんかとても気持ちが悪い。serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1 terminal --timeout=10 serial console ## ## End Default Options ## title Debian GNU/Linux, kernel 2.6.26-2-686 root (hd0,0) kernel /boot/vmlinuz-2.6.26-2-686 root=/dev/hda1 ro acpi=noirq console=tty0 console=ttyS0,115200n8 initrd /boot/initrd.img-2.6.26-2-686 title Debian GNU/Linux, kernel 2.6.26-2-686 (single-user mode) root (hd0,0) kernel /boot/vmlinuz-2.6.26-2-686 root=/dev/hda1 ro acpi=noirq console=tty0 console=ttyS0,115200n8 single initrd /boot/initrd.img-2.6.26-2-686
size=($(stty size))
if [ "${size[0]}" -eq "0" ] ; then stty rows 40 ; fi
if [ "${size[1]}" -eq "0" ] ; then stty cols 90 ; fi
関係ないけど、環境変数 HISTFILESIZE を 0 に設定しておくと .bash_history が記録されないので、記録したく無い人は .bashrc とか /etc/profile に書いておくと少し便利かもしれない。