FreeBSD 8.3R-p2 → 8.3R-p3

投稿日: Leave a comment

6/12に/usr/srcがアップデートされていたのでビルド。
以下、/usr/src/UPDATINGから抜粋。

20120612:       p3      FreeBSD-SA-12:03.bind
                        FreeBSD-SA-12:04.sysret
                        FreeBSD-EN-12:02.ipv6refcount
        Fix a problem where zero-length RDATA fields can cause named to crash.
        [12:03]

        Correct a privilege escalation when returning from kernel if
        running FreeBSD/amd64 on non-AMD processors. [12:04]

        Fix reference count errors in IPv6 code. [EN-12:02]

namedはいい加減システムから抜いてほしい。それだけでもセキュリティアップデートの手間がだいぶ減るような気がする。

FreeBSD 8.2R-p7 → 8.3R-p1

投稿日: Leave a comment

FreeBSDのサーバのバージョンをアップデートした。

シリアルコンソールをつなぐのも面倒だったので、リモートから全部やってみた。
つまり、/usr/src/Makefileに書いてある手順

#  1.  `cd /usr/src'       (or to the directory containing your source tree).
#  2.  `make buildworld'
#  3.  `make buildkernel KERNCONF=YOUR_KERNEL_HERE'     (default is GENERIC).
#  4.  `make installkernel KERNCONF=YOUR_KERNEL_HERE'   (default is GENERIC).
#       [steps 3. & 4. can be combined by using the "kernel" target]
#  5.  `reboot'        (in single user mode: boot -s from the loader prompt).
#  6.  `mergemaster -p'
#  7.  `make installworld'
#  8.  `make delete-old'
#  9.  `mergemaster'            (you may wish to use -i, along with -U or -F).
# 10.  `reboot'
# 11.  `make delete-old-libs' (in case no 3rd party program uses them anymore)

のうち、5の代わりにデーモンを全部終了させる。つまりこんな感じ。

# cd /usr/src
# make -j 4 buildworld >& /root/log/buildworld_TOBY_8.3R-p1_20120507.log &
# make -j 4 buildkernel >& /root/log/buildkernel_TOBY_8.3R-p1_20120507.log &
# make installkernel

ビルド中はtail -fして終わるのを待ち、終わったら、カーネルのインストール。その後、リブートせず、サーバプロセスを全部終了させる。たとえば、/etc/rc.d/named stopのように、rc.dの起動スクリプトをひたすらstopを引数にして実行する。

そして、sshd以外のデーモンがすべて終了したら次の作業。

# mergemater -p
# make installworld
# make delete-old
# mergemaster
# reboot

これで無事再起動してくるのを待つ。

Copyright (c) 1992-2012 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
        The Regents of the University of California. All rights reserved.
FreeBSD is a registered trademark of The FreeBSD Foundation.
FreeBSD 8.3-RELEASE-p1 #4: Mon May  7 23:28:56 JST 2012
    ueda@toby:/usr/obj/usr/src/sys/TOBY i386
Timecounter "i8254" frequency 1193182 Hz quality 0
CPU: Intel(R) Atom(TM) CPU D510   @ 1.66GHz (1666.66-MHz 686-class CPU)
  Origin = "GenuineIntel"  Id = 0x106ca  Family = 6  Model = 1c  Stepping = 10
  Features=0xbfebfbff
  Features2=0x40e31d
  AMD Features=0x20100000
  AMD Features2=0x1
  TSC: P-state invariant
real memory  = 2147483648 (2048 MB)
avail memory = 2085040128 (1988 MB)
ACPI APIC Table:
FreeBSD/SMP: Multiprocessor System Detected: 4 CPUs
FreeBSD/SMP: 1 package(s) x 2 core(s) x 2 HTT threads
 cpu0 (BSP): APIC ID:  0
 cpu1 (AP/HT): APIC ID:  1
 cpu2 (AP): APIC ID:  2
 cpu3 (AP/HT): APIC ID:  3
(以下省略)

samba動かず

投稿日: Leave a comment

飲み会で自宅サーバーの写真を見ようと思ってVPNでつないでサーバーにアクセスしたらつながらず。

アンドロイド側の問題と思っていたけど、帰ってきたらPCからもつながらず。よくよく見てみたらnmbdがcoreをはいて落ちていた。

で、再インストールしてみたりしたけど解決せず、ネットで調べたら同じ状態に陥っている人を見つけた。

smb.confを修正して動くことは確認したけど、ほかに方法はないかと思って調べたら、libiconv-1.14用のパッチを作っている人を発見。

さっそくportsのMakefileに入れ込んでから、再コンパイル・再インストール。

unix charset = EUC-JP-MS

でも動くようになった。libiconvをアップデートするときは気を付けるようにしよう。

シリアルコンソール

投稿日: Leave a comment

サーバを棚の上に置くことを考えると、モニタもキーボードもつながないことに今更気がついて、シリアルコンソールを使えるようにしてみた。

情報源は本家のHandbook。手っ取り早く、結論だけ参考にさせてもらう。

# cat /boot/loader.conf
hint.atkbd.0.flags="0x1"
boot_multicons="YES"
boot_serial="YES"
comconsole_speed="115200"
console="comconsole,vidconsole"

# cat /boot.config
-P

# grep ttyu0 /etc/ttys
#ttyu0  "/usr/libexec/getty std.9600"   dialup  off secure
ttyu0   "/usr/libexec/getty std.115200" vt100   on  secure

hint.atkbd.0.flags=”0x1″は何で設定したか正確な記憶がないが、たぶんUSBキーボードを使うための何らかのおまじないだったと思う。

boot.configで-Pを指定するとキーボードの有無でシリアルコンソールにするかどうかを選べるのだが、USBキーボードだとキーボード無しと認識するみたいで、常に-hDと指定したのと同じになってしまう。

何度かリブートしてみてちゃんとシリアルの方にブートメッセージやらが出てきてくれているので、設定としてはおしまい。落ち着いたら本当に棚にあげてしまおう。

Postfix導入

投稿日: Leave a comment

ローカルの/var/mailにたまり続ける日々のシステムレポートを何とかすべく、色々考えた。結論としてはPostfixに行き着いたが、途中ssmtpというのにも手を出した。

ssmtpは送信専用のMTAでローカルではsendmailのふりをしてくれる。外のSMTPサーバを使って配送してくれて、From:フィールドの置き換えとか、root(正確にはuid 1000未満のユーザ)宛のメールを特定のアドレスに飛ばしてくれるので、毎日のroot宛メールをさばくにはちょうどいい。

というわけで、色々試してみて、動作的にもいい感じだったのだけど、一般ユーザ(uid 1000以上のユーザ)宛は宛先を書き換えてくれず、やってもドメイン名をつけるだけという動きで、使い物にならず。
あと、smtpsのパスワードを設定ファイルに平文で書くのも違和感あり。

パスワードは少々我慢したとして、もう少し粘ればTo:フィールドのアドレス書き換えくらいできそうな気もしたけど、設定項目が少なく、断念してPostfixに手を出した。

ssmtpと同じく、送信専用にするのはこんな感じの設定でOK。

myhostname = toby.localdomain
mydomain = localdomain
myorigin = $myhostname

inet_interfaces = $myhostname, localhost

unknown_local_recipient_reject_code = 550

mynetworks_style = host

# relay setting

relayhost = [aperire.sakura.ne.jp]:587

smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/usr/local/etc/postfix/sasl_passwd
smtp_sasl_tls_security_options = noanonymous
smtp_sasl_mechanism_filter = plain

inet_interfacesをローカル限定にするのと、relayhostを設定するのがポイントなのかな。今回は、relayhostとして日記のサーバのsmtps(STARTTLS)を使用するようにsasl_passwdにアカウントとパスワード等を用意。

そして、From:の書き換えは以下の行を同じくmain.cfに追加し、

# rewrite sender address for relayhost
sender_canonical_maps = hash:/usr/local/etc/postfix/sender_canonical

sender_canonicalというファイルに、<user名> <Fromアドレス>を羅列すればOK。

最後に、aliasesに各ユーザ宛の転送先をsendmailと同様に記載して、newaliasesを実行。

portsで入れた時にゴニョゴニョ言われたrc.confやperiodic.confに追記する内容等々を書きこんでおしまい。

思ったよりサクッと動いたので、もっと早くやっておけばよかったと思った。

blocksshd → sshguard

投稿日: Leave a comment

blocksshdがportsから消えてしまったので、代わりのツールということで、sshguardというのを入れてみた。

ツールの仕組みはどちらも同じで、auth.logから不正アクセスを検出し、ある時間内のアクセス数がしきい値を超えたらファイアーウォールで一定時間アクセスを防ぐというもの。

違いは、blocksshdはデーモンで動いてポーリングで処理するのに対して、sshguardはsyslogでパイプ経由で直接(リアルタイムに)処理される所。

ファイアーウォールとしてpacket filter (PF) を使っているので、sshguard-pfをインストール。

まずは、/etc/pf.conf にsshguardから制御するテーブルを追加。

table <sshguard> persist

同じく、/etc/pf.conf にフィルタールールを追加。

block in quick on $if4     proto tcp from <sshguard> to any port 22 label "ssh bruteforce"
block in quick on $if6_ext proto tcp from <sshguard> to any port 22 label "ssh bruteforce"

つぎに、/etc/syslog.confに以下の行を追加。

auth.info;authpriv.info                         |/usr/local/sbin/sshguard

最後に、pf.confを読みなおして、syslogdを再起動して完了。

syslogd再起動後、最初にログが発生した時点で、auth.logに以下のメッセージが表示されて、一応動いていることを確認。

Mar  5 20:09:23 toby sshguard[52924]: Started successfully [(a,p,s)=(40, 420, 1200)], now ready to scan.

終わり。

FreeBSD 8.2-RELEASE-p6

投稿日: Leave a comment

FreeBSD 8.2-RELEASE-p6 が5日前のリリースされていたのでアップデート。

20120104:       p6      FreeBSD-EN-12:01.freebsd-update
        Extend the character set accepted by freebsd-update(8) in file
        names in order to allow upgrades to FreeBSD 9.0-RELEASE.

内容的にはシェルスクリプト1個 (freebsd-update.sh) が変更されただけなので、buildworld も buildkernel も意味なさ気だけど念のため実施。

FreeBSD 8.2R-p5

投稿日: Leave a comment

FreeBSD 8.2Rのセキュリティアップデートが12/23に出ていたので、csupして更新作業を実施。

手順は/usr/src/Makefileに書いてあるとおり。KERNCONFは/etc/make.confに書いてあるので、3と4はそれぞれ make buildkernel、make installkernelとするだけでOK。

#  1.  `cd /usr/src'       (or to the directory containing your source tree).
#  2.  `make buildworld'
#  3.  `make buildkernel KERNCONF=YOUR_KERNEL_HERE'     (default is GENERIC).
#  4.  `make installkernel KERNCONF=YOUR_KERNEL_HERE'   (default is GENERIC).
#       [steps 3. & 4. can be combined by using the "kernel" target]
#  5.  `reboot'        (in single user mode: boot -s from the loader prompt).
#  6.  `mergemaster -p'
#  7.  `make installworld'
#  8.  `make delete-old'
#  9.  `mergemaster'                         (you may wish to use -U or -ai).
# 10.  `reboot'
# 11.  `make delete-old-libs' (in case no 3rd party program uses them anymore)

これで、uname -r が 8.2-RELEASE-p5 になった。

BIND98更新

投稿日: Leave a comment

@jpcertからtwitterでBIND9の脆弱性に関する情報が流れてきた。

@jpcert
JPCERTコーディネーションセンター

ISC BIND 9のキャッシュDNS サーバには、サービス運用妨害 (DoS) の
原因となる脆弱性があります。修正パッチの適用についての検討を!^YK
https://www.jpcert.or.jp/at/2011/at110031.html

というわけで、早速 portupgrade bind98 でパッチ済みのバージョンに更新。

ISC BIND 9のキャッシュDNS サーバには、サービス運用妨害 (DoS) の原因となる脆弱性があります。修正パッチの適用についての検討を!^YK