Tag Archives: FreeBSD

ipf.logが大きくなってきた

ipf.logはFreeBSDで使っているIPフィルタのログファイル名ですが、特になにも気にせず放置してたら500MB超えていました。折角/var/log内に置いているファイルだしシステムでローテーションしようと方法を検索。

下記のページがヒットしました。なるほどnewsyslog.confで設定するんですね。

NetBSD3.0 i386 の /etc/newsyslog.conf について
http://rabbit-kernel.hp.infoseek.co.jp/it/newsyslog/

とりあえず次の一行を追加
/var/log/ipf.log             600  5     *    $D0   Z

/var/log/ipf.logを「権限600」で「5世代」、「サイズ制限なし」で「毎日0時」だと思います。最後のZはなんでしょう?また日付が変わったらちゃんとローテーションできたか様子見です。

 

無線LANのカーネルモジュールはif_wi.ko

# kldstat
Id Refs Address Size Name
1 7 0xc0400000 6f6544 kernel
2 1 0xc0af7000 59f20 acpi.ko
3 1 0xc3fad000 16000 linux.ko

もしかして、一昨日ndisドライバの組み込みに失敗してコア吐いたのはif_wiが入ってないから?
まだまだ試す余地はありそうだ。(でも内蔵無線LAN計画も進めたい)

と思ってカーネルにロードしようとしたら
# kldload if_wi
kldload: can’t load if_wi: File exists
既にある見たい。

おまけ:
折角なんでサウンドドライバをロード
# kldload snd_driver

無線LANを使いたいのだが…

引き続きクライアントFreeBSDの設定。
こちらは無線LANに対応させたいのですがPlanexのGW-NS54Gを使おうとしたがドライバがない。
この場合WindowsドライバーがNDIS準拠であればラッパーを作成して使えるらしい。

早速最新ドライバーをダウンロードして必要ファイルを抜き出し下記コマンドを実行しました。
# ndiscvt -s N54GNDS.sys -i N54GNDS.inf -o ndis_driver_data.h
Segmentation fault (core dumped)

…………………………。コアダンプですか。N54GNDS.inf内ではN54GNDS.SYSと書いていたのでsysファイル名を変えて再チャレンジ
# cp N54GNDS.sys N54GNDS.SYS
# ndiscvt -s N54GNDS.SYS -i N54GNDS.inf -o ndis_driver_data.h
Segmentation fault (core dumped)

だめだ…。
別のバージョンのドライバーなら使えるかなー?(用意した最新はVer.1.1)
いまさら11MBPSなんて買いたくないし、一応X24にはCFがあるのでzaurusと共用で使うという手もありますがZaurus用のCF無線LANは故障で廃棄。CFタイプは結構高いしまた買うのも…。

他の古い3バージョンでも他のサーバのFreeBSD(バージョンは同じ6.2)でも全部コアダンプでした。orz
PCMCIAの11Mは探すのも大変だしZaurusと兼用ということでCF無線LANカード買うしかないのか。

1枚のLANカードに複数のIPを振ってみた

httpsの通信ではネームベースのバーチャルホストでは鍵の識別ができなくなるので、複数IPを振ってみることにしました。その他の利用法としてLAN内のみで開発する場合に複数のサブネットを作成することでLAN用サブネットではウェブアクセス、エイリアスの新サブネットではDB接続等の構成が可能になります。

ではやり方。
# ee /etc/rc.conf (一部抜粋)
ifconfig_fxp0=”inet xxx.yyy.zzz.11 netmask 255.255.255.248″
ifconfig_fxp0_alias0=”inet xxx.yyy.zzz.12 netmask 255.255.255.255″

rc.confにこのように設定します。
netmaskが255.255.255.255なのは同じカードで同じネットマスクの場合に、同じサブネットですよ~という意味らしい。これを255.255.255.248のように設定すると同じIP帯のサブネットを別途生成することになり後々わかわからない傷害に悩まされる可能性がある。

次に、増設したLAN側(CardBus)の設定も多重化します。こちらはIPだけでなくサブネットも多重化してみます。

# ee /etc/devd/rl0.conf (一部抜粋)

device-name “rl0”;
action “ifconfig $device-name inet 192.168.0.11 netmask 255.255.255.0”;
action “ifconfig $device-name inet 192.168.0.12 netmask 255.255.255.255 alias”;
action “ifconfig $device-name inet 192.168.3.11 netmask 255.255.255.0 alias”;
action “ifconfig $device-name inet 192.168.3.12 netmask 255.255.255.255 alias”;
action “route add default 192.168.0.1”;
action “route add default 192.168.3.1”;

追加サブネットについては2台とも設定してお互いに通信できるようにしました。(念のため片方だけ設定したときに、もう片方からpingが通らないことを確認)

あとは新規に追加したグローバルIPの方はファイヤーウォールの穴あけないと接続できない。(出来た方が問題なのでこれ良い)。ウェブとメールだけは空ける必要があるので後で空けておこう。

USBメモリでFreeBSDをインストール

実は昨日、ThinkPad X24をFreeBSD用に購入。先週ThinkPad一台潰してFreeBSD入れたばかりなのにと思われそうですが、今度はサーバ用途ではなくクライアントとして使うということで軽いものが欲しかった。流石に1.5kg程度になると軽くてカバンの中に入れても平気だ。

それに最近のUNIX系ソフトも充実しているので、ネットワークプログラマーという職業柄、別にWindowsである必要もないんじゃない?と思うようになり、そしてリナザウが限界来てたりとUNIXノートの理由ができてしまいました。

ただし今までと違うのはFDDもCD-ROMも無いという条件でのインストールです。
ドライブ無しのインストール方法はいろいろありますが、今回のX24にさらに付け加えるとシリアルポートなし、パラレルポートもなしです。一応ネットワークブートは可能ですがサーバ側になるFreeBSDの環境構築とルータから切り離す必要とさらにイメージCDと負担が大きかったので不可。

その条件でいろいろググってたら面白い情報を発見。『USBのFDDでブートできるPCであればUSBメモリからブート可能』らしい。おまけに不要になった1GBのUSBメモリの処分にも悩んでたし丁度良い。

おまけに先週立ち上げたサーバはusbdを生かしたままなのでこのサーバでUSB起動フラッシュメモリを作ってみた。

準備したもの:
・USBメモリ(1GB)
・FreeBSD6.2のサーバ(ThinkPad A21p)
・これからインストールするThinkPad X24

参考にしたサイト:たーくんずろぐ – USBメモリからのOS起動

参考サイトとの相違点としてはFreeBSD6.2は起動ディスクがboot含めて4枚なので次のように4枚目のディスクの作業が増える。

# mdconfig -a -t vnode -f /tmp/kern3.flp

# mount /dev/md3a /mnt
# cd /mnt
# cp kernel.gz.ac /usb/
# cd /
# umount /mnt
# mdconfig -d -u 3

これからはFDD/CD無しのPCでもある程度安心できそうだ。
因みに出来たUSBメモリの中身はこちら
# cd /usb
# ls
.snap boot kernel.gz.ab kernel.gz.boot mfsroot.gz
acpi.ko.gz kernel.gz.aa kernel.gz.ac kernel.gz.split

FreeBSDにCardBusを認識させる

前回、自動認識に失敗したCardBusタイプのLANカードですが、これを認識させることができましたので設定メモ。

まず、自動認識を行おうとしているときに何が起きていたか次のコマンドで確認

# dmesg | egrep ‘cbb|pccard|cardbus’
cbb alloc res fail
cardbus0: Can’t get memory for IO ports
cbb alloc res fail
cbb alloc res fail
cbb alloc res fail
cbb alloc res fail
cardbus0: <network, ethernet=””>at device 0.0 (no driver attached)

どうも割り込みに失敗している模様。
次にデフォルトの割り当てアドレスを確認。
# sysctl -a | grep hw.cbb
hw.cbb.start_memory: 2281701376
hw.cbb.start_16_io: 256
hw.cbb.start_32_io: 4096
hw.cbb.debug: 0

ググッた内容だと
hw.cbb.start_memory=”0x40000000″
hw.cbb.start_32_io=”0x2000″
とすることで動作した報告があるので(PCによって変わるそうです)/boot/loader.confに下記を加えます。

# ee /boot/loader.conf
hw.cbb.start_memory=”0x40000000″
hw.cbb.start_32_io=”0x2000″

ここで一旦rebootして自動認識に成功したか確認。

ll /dev/net/
total 0
crw——- 1 root wheel 0, 32 Feb 20 07:59 fxp0
crw——- 1 root wheel 0, 76 Feb 20 07:59 lo0
crw——- 1 root wheel 0, 40 Feb 20 07:59 plip0
crw——- 1 root wheel 0, 81 Feb 20 07:59 rl0

rl0として認識されました。

この後は認識されたLANの設定ですが、LAN側として個別に設定したいのでdevdを使います。
devd(8)を有効にするためrc.confにdevd_enable=”YES”を追記。

# ee /etc/rc.conf
devd_enable=”YES”

/etc/devdディレクトリが存在しなかった為作成してrl0用の設定ファイルを作成。
# mkdir /etc/devd
# ee /etc/devd/rl0.conf

attach 100 {
device-name “rl0”;
action “ifconfig $device-name inet 192.168.0.10 netmask 255.255.255.0”;
action “route add default 192.168.0.1”;
};

detach 100 {
device-name “rl0”;
};

以上の作業を完了して再度rebootして2台とも正しく設定完了しました。
ちゃんと100Mbpsで動作していることもifconfigで確認できました。

rl0: flags=8843<up,broadcast,running,simplex,multicast> mtu 1500
options=8<vlan_mtu>
inet 192.168.0.10 netmask 0xffffff00 broadcast 192.168.0.255
inet6 fe80::290:ccff:fec5:d73%rl0 prefixlen 64 scopeid 0x4
ether 00:90:xx:xx:xx:xx <- MACアドレスはメーカコード以外伏字
media: Ethernet autoselect (100baseTX )
status: active

[動作実績]
PC:IBM A22m,A21p
LAN:Planex FNW-4000-TX
OS:FreeBSD6.0,FreeBSD6.2
設定内容:上記
関連:LAN構築用にFNW-4000-TX買いました。

FreeBSD6.2-RELEASEのインストール

1. インストール前に

1-1.起動ディスク作成ツールとFDイメージの取得

エクスプローラーFTPサイトにアクセスして
起動ディスクを作成するためのツールをダウンロード
ftp://ftp.freebsd.org/pub/FreeBSD/tools/

00_index.txt
README.TXT
boot.bin
bootinst.exe
bsdboot/
ckdist.exe
ckdist.man
dist/
extipl.exe
fdimage.exe
fips.doc
fips.exe
fips.faq
gunzip.exe
gzip.exe
ide_conf.exe
md5.exe
osbs135.exe
osbsbeta.exe
pfdisk.exe
presizer.doc
presizer.exe
rawrite.exe
restorrb.exe
srcs/

 

エクスプローラーFTPサイトにアクセスしてFDイメージを取得
ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/6.2-RELEASE/floppies/
CHECKSUM.MD5
CHECKSUM.SHA256
README.TXT
boot.flp
fixit.flp
kern1.flp
kern2.flp
kern3.flp
1-2. 起動ディスクの作成

fdimage.exeを利用してフロッピーイメージを作成。
※Cドライブ直下にtoolsとfloppiesを入れカレントをC:toolsにした場合
C:tools>fdimage ../floppies/boot.flp A:

続けて、
C:tools>fdimage ../floppies/fixit.flp A:
C:tools>fdimage ../floppies/kern1.flp A:
C:tools>fdimage ../floppies/kern2.flp A:
C:tools>fdimage ../floppies/kern3.flp A:
2. インストール

2-1.インストーラーの起動

FDからブートできるようにBIOSの設定を調整してBootディスクを入れて起動します。

次にKernel floppy 1を入れるように支持されるのでkern1ディスクを入れます
Kernel floppy 1
Kernel floppy 2
Kernel floppy 3
boot floppy

この後インストーラーが立ち上がります。

2-2. インストールパッケージの選択

Country Selection -> japan
System Console Keymap -> Japanese 106 keymap
sysinstall Main Menu -> Custom -> Distributions -> Minimal

2-3. パーティションの設定

実は手動で設定すると何故かインストール終了後マウントポイントがぶっ飛んでいたので、オートにしました。
/ 495MB
swap 995MB
/var 1470MB
/tmp 495MB
/usr 33515MB

2-4. Mediaの設定

Media -> FTP を選択する
LANカードの設定はcase by case
2-5. ユーザ管理

User Managementでwheelグループのユーザを作成。できればシェルはtcsh

2-6. その他
タイムゾーンの設定 JST
マウスの設定 無効

これでcommitしインストール開始すると必要なパッケージがダウンロードされてインストール完了
3. インストール後の設定

3-1. SSH環境の設定

まずはSSHでログインできるように
ee /etc/rc.confに

sshd_enable=”YES”

を追加

/etc/ssh/ssh_config
/etc/ssh/sshd_config

上記2つで

PasswordAuthentication yes

と設定されいることを確認する。ちなみに6.2の/etc/ssh/ssh_configはデフォルトでYesになっていました。
そのあとsshdを起動するためrebootでSSHログイン可能。

SSHユーザーの制限は/etc/ssh/sshd_configにAllowUsersの項目を追加し

AllowUsers user1 user2

のように記述する。
3-2. リソースの節約

6.0の時と同様使用しないコンソールは動作させない。

ee /etc/ttys

gettyを0と1を残して全てコメントアウト、さらにシリアル接続は使わないので全てコメントアウトして再起動。
3-3. セキュリティ強化でちょっと工夫

ログインメッセージの編集⇒/etc/motd
3-3. カーネル再構築とファイヤーウォールの設定

以前と同じ方法なのでファイヤーウォールの設定を参照

とりあえずここまで設定してダメだったのがLAN用に購入したカードがCardBusの自動認識で失敗していることかな。これは6.0側もダメだったのでこちらの新しいサーバで確かめながらやって行こう…。

ファイヤーウォールの設定

本当はサーバーの前段に設置したいのですが余裕ないのでサーバーに組み込み。なぜ前段にしないといけないのかというとDos攻撃によって回線がパンクするだけならまだしもログでパーティションがパンクしたりCPUの過負荷でデーターが破損したりと二次災害の危険があるからです。

ファイヤーウォールの設定はカーネルの再構築かカーネルモジュールの組み込みが必要になるので慎重に作業を進めてください。(リモートで接続できなくなっても保証できませんよ)

まずは、カーネルに組み込まれているか確認

# kldstat
Id Refs Address Size Name
1 7 0xc0400000 63070c kernel
2 16 0xc0a31000 568dc acpi.ko
3 1 0xc15af000 15000 linux.ko

# kldstat -v | grep ip
106 ips/ipsd
107 pci/ips
119 miibus/ciphy
160 ppbus/plip
# kldstat -v | grep fw
91 fwohci/firewire
92 pci/fwohci
93 cardbus/fwohci
94 firewire/fwe

カーネルモジュールがあるか確認

# find / -name ipl.ko
/boot/kernel/ipl.ko

設定ファイルがあるか確認

# find /etc -name ipf.rules

いきなり有効にするとSSHが切断されるので
ipf.rulesを編集してlocalhostとSSHの経路のみ確保。
ifconfigコマンドでインターフェースを確認を忘れずに

fxp0:WAN
lo0:localhost

# プログラム本体があるかどうか
# which ipf
/sbin/ipf

# vi /etc/ipf.rules

rc.confに記述を追加
# vi /etc/rc.conf

ipfilter_enable=”YES”
ipfilter_rules=”/etc/ipf.rules”
ipmon_enable=”YES”
ipmon_flags=”-D /var/log/ipf.log”
/boot/loader.confに記述を追加(最小環境では空でした)
ipl_load=”YES”

モジュール組み込み
# kldload ipl

上手くいったかな?すぐに確認
# kldstat
Id Refs Address Size Name
1 8 0xc0400000 63070c kernel
2 16 0xc0a31000 568dc acpi.ko
3 1 0xc15af000 15000 linux.ko
4 1 0xc1aa0000 2a000 ipl.ko

とりあえず切断はされていない。

運命の再起動
# reboot

SSHでまったく問題なしに入れた。
ここまで楽にできると本当にファイヤーウォールが機能しているか不安だ。

PostgreSQLが起動しているのでtelnetで不正アクセスしてみる。
反応しました、全然機能していません。orz…

起動しているか確認
# /etc/rc.d/ipfilter status
ipf: IP Filter: v4.1.8 (416)
Kernel: IP Filter: v4.1.8
Running: yes
Log Flags: 0 = none set
Default: pass all, Logging: available
Active list: 0
Feature mask: 0x10f

フィルターの確認(-iはイン、-oはアウト)
# ipfstat -i
# ipfstat -o

全然フィルタリングされていませんでした。orz…
設定ファイルの修正
# vi /etc/ipf.rules

設定を反映
# ipf -Fa -Z -f /etc/ipf.rules

2005年12月 1日 07:51
/var/log/auth.logを見ると見知らぬIPからSSHを狙われているのを発見。どうもファイアーウォールが効いてない。実際にログインされた形跡はないので実害はありませんがipf.rulesを見直し。

『全ブロックの後に必要なIPとポートのみ受け入れ』のつもりが『全パスの後に…』になっていた。orz…

要するに単なる設定ミスだが、初めてLinuxサーバー立てたときに漏れクシを作ってしまった以上に恥ずかしい失敗をしてしまった。二段階に予防しておいて良かったと思ったのはSSHハッキングを受けるときに使用されたユーザー名がwww, web, root, test, bin等システムで登録されている事が多いアカウントでした。SSH側でログインユーザーを限定し、システムで不要なユーザーは削除していたので助かったもののこれがLinuxでパッケージに入れたままの状態ならログイン成功してサーバーを破壊されていたかもしれません。

こわいこわい・・・。