マルウェアに感染していたりボットネットのものといわれているIPアドレス群が公開されていたりします。 そういったノードとの通信を拒否するためには、数千のIPアドレス/ネットワークを制御する必要があります。
普通にiptablesを使ってルールを追加するとルールを設定するタイミングでハングアップしそうになるため、ipsetを導入することにしました。
いままでDebian lenny(5.0.x)を使ってきましたが、ipset-sourceパッケージを利用するために Debian squeeze(6.0.x)に移行しようというのが今回の作業です。
Debian squeezeへのアップグレード
Gatewayとなるalixへはgccなどの開発環境をインストールしていないため、別のalixでまずsqueezeに移行し、ipset用のdebモジュールを開発する事にしました。
基本的にはetchからlennyに移行した時と方法は同じですが、googleでも他の事例を検索してみました。 だいたいはapt-get dist-upgradeではなく、aptitude full-upgradeを使っているようでした。
もしalixのような最小構成で使っているのでなければ、間違いなくaptitudeがお勧めですが、今回はいつもどおりapt-getを使いました。
書き換えたsources.listは以下のとおりです。
deb http://ftp.jp.debian.org/debian squeeze main contrib non-free
deb-src http://ftp.jp.debian.org/debian squeeze main contrib non-free
deb http://security.debian.org/debian-security squeeze/updates main contrib non-free
deb-src http://security.debian.org/debian-security squeeze/updates main contrib non-free
$ sudo apt-get update $ sudo apt-get install apt $ sudo apt-get dist-upgrade
途中で新しい設定ファイルと置き換えるかどうかは、 /etc/init.d/openvpn以外は全て差分(Diff)を確認して、デフォルトの'N'を選択しました。
grub2への移行
今回の方法でsqueezeへ移行するとgrub2が導入され、とりあえず従来のgrub1からgrub2を経由してカーネルが起動する状態になります。
grub2の設定は/boot/grub/grub.cfgファイルで行ないますが、serial行は次のようにword,parityを設定する必要がありました。
serial --speed=38400 --word=8 --parity=no terminal_input serial terminal_output serial set timeout=5
/boot/grub/grub.cfgファイルを直接編集するのではなく、/etc/default/grubを編集し、$ sudo grub-mkconfig を実行します。
/etc/default/grubは次のようになっています。
# This file is sourced by update-grub, and its variables are propagated # to its children in /etc/grub.d/ GRUB_DEFAULT=0 GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` GRUB_CMDLINE_LINUX="console=ttyS0,38400n8" GRUB_SERIAL_COMMAND="serial --speed=38400 --word=8 --parity=no" # Uncomment to disable graphical terminal (grub-pc only) GRUB_TERMINAL=serial # Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux #GRUB_DISABLE_LINUX_UUID=true
grub1を経由して無事に起動する事を確認した後は、コマンド、upgrade-from-grub-legacyによって直接grub2のブートローダがMaster Boot Record(MBR)あるいはパーティションの先頭セクタに導入することができ、再起動すればgrub1に代わりgrub2が起動することになります。
grub2には変更なく移行できたものの…
手元の環境では grub1 が /boot/grub/menu.lst から起動する時に、 default 0の設定から /boot/vmlinuz-2.6.26-2-686 が起動していました。
"title Chainload into GRUB 2"と書かれている2番目のtitle行を指すために、 default 1に変更して再起動し、無事に grub2 から起動する事を確認しました。
アップグレードに伴なうディスクの増加
もろもろデータをいれて8GBのCompactFlashのうち、約半分の4GBほどを使用していましたが、導入によって一時的に800MBほど増加しました。
Gatewayにするalixは2GBのCompact Flashを使っていて、こちらも約半分の900MBほどを使っていましたが、導入時には400MBほど増加しました。
$ sudo apt-get dist-upgrade ... アップグレード: 212 個、新規インストール: 53 個、削除: 4 個、保留: 0 個。 167 MB のアーカイブを取得する必要があります。 この操作後に追加で 230 MB のディスク容量が消費されます。
導入後のdf出力は次のとおりです。
Filesystem 1K-ブロック 使用 使用可 使用% マウント位置 /dev/sda1 1942036 1468316 375848 80% / tmpfs 127432 0 127432 0% /lib/init/rw udev 123088 60 123028 1% /dev tmpfs 127432 4 127428 1% /dev/shm
IPSetモジュールの作成と導入
Squeezeにしたのはipsetのモジュールをm-a(module-assistantコマンド)を使って導入するためでした。
m-aはdebパッケージを作成してくれるため、本番機に開発環境を入れることなく、他の開発機でdebパッケージを作成します。
$ sudo apt-get install ipset-source module-assistant
これで/usr/src/ipset.tar.bz2ファイルが導入されるはずです。 次にコンパイルに必要なファイル群を導入します。
$ sudo m-a prepare
prepareを実行すると、kernel moduleをコンパイルするために必要なパッケージが一式導入されます。 既に開発環境は整っているため、現在使っているsqueezeの標準kernel 2.6.32-5-common に対応するヘッダファイル群だけが導入される事になりました。
以下の特別パッケージがインストールされます: linux-headers-2.6.32-5-common linux-kbuild-2.6.32 以下のパッケージが新たにインストールされます: linux-headers-2.6.32-5-686 linux-headers-2.6.32-5-common linux-kbuild-2.6.32
次にipsetのmoduleを作成します。
$ sudo m-a build ipset
終ると /usr/src/ipset-modules-2.6.32-5-686_2.5.0-1+2.6.32-29_i386.deb が作成されるので、ブロードバンドルータにしているalixに転送して導入しました。
0 件のコメント:
コメントを投稿