はじめに

玄箱HGのDebian化セットアップ手順記録を残す

システム異常により再度セットアップした際にまとめた物であるため細かい部分の抜けがあるかもしれない

「玄箱」は持っていないので基本的に記載しない

以下「玄箱」と記載していても全て「玄箱HG」の事である

施していない内容も情報として記載する

改版履歴

2012.10.16 玄箱HGをDebian 6.0(squeeze)で復旧させた際に記録作成

2012.10.18 サーバ監視パッケージ類を追加

2012.10.22 cronについて修正、ブートの仕組みを記載、体裁を調整

2012.10.28 ブートの仕組みを間違えていたので修正

2012.11.06 sambaの項を修正

目次

最初に行う基本的な設定 ( DNS resolver  aptitude  sudo  telnetd  sftpd  )

NTPサーバ ddclient DNS(bind9) Samba Apache2 php5 MySQL ログローテーション

RRDtoll+HotSaNIC(システム監視)

Webアクセス解析 ( visitors  webdruid  awstats  )

Snort(不正アクセス監視) ACID(snortアクセスログ解析)

検知ツール ( chkrootkit  )

初期導入

玄箱をDebian化する方法

多数、公開されているので、そちらを参考にした方が良い

玄箱を Debian 4.0 (etch) にする方法はこちらを参照

玄箱を Debian 5.0(lenny)にする方法はこちらを参照

玄箱を Debian 6.0(squeeze)にする方法はこちらを参照

玄箱をDebian 5.0(lenny)以降にする場合は、新規、アップグレードともに注意が必要

玄箱をU-Boot化した場合は、Debian 5.0(lenny)以降のインストールにおいて上記の通りでなくても良い(U-BootについてはU-Bootとはを参照)

EMモード

玄箱は電源投入するとFLASH ROMに入っているLinux2.4.17が起動する

そのままFLASH ROMのリソース(カーネルモジュールを含むカーネル以外のOS資源)で動作している状態を「EMモード」と呼ぶ

本来の機能であるNASは提供されたリソース(ファームと呼んでいる)をHDに置き、置かれたリソースを /(ルート)として動作している

玄箱のDebian化は、提供されているNAS用リソースをDebianに置き換えたものである

EMモードにするには

・1つ目のパーティションが存在しないHDDを入れて電源投入

・背面の赤いボタンを押しながら(3秒以上と言われている)停止させた後の電源投入

・背面の赤いボタンを押しながら電源投入

・FLASH ROMの起動方法書き換え(具体的には以下の操作)

カーネル2.4の場合

# echo -n 'NGNG' > /dev/fl3
# reboot

カーネル2.6の場合

# echo -n "NGNG" > /dev/mtdblock2

EMモードで起動すると前面のLEDが全て点滅するので判断できる(ただし点滅していてもEMモードで起動しているとは限らない)

EMモードからHD起動にするには

# echo -n 'OKOK' > /dev/fl3
# reboot

EMモードでのIPアドレス

・DHCPがあれば割り当てに従う

・なければ「192.168.0.100」か「192.168.11.150」または不明(nmap -sP 192.168.*.* などで探すしかない)

EMモードでのログイン

・root(password: kuroadmin)→ 初代玄箱は、passwordが「kuro」らしい

EMモードでディスク構成の設定

# mfdisk -c /dev/hda(パーティション作成)
 d でパーティションを削除
 n でプライマリパーティションを生成
 t でパーティションタイプを変更(82ならスワップ)
 w で書込み
# mke2fs -j /dev/hda1(ファイルシステム作成)
# mkswap /dev/hda2(スワップ作成)

ディスクの構成は次のとおりにした

HDD: Maxtor 6Y160P0
  容量        160GB
  回転数       7200 rpm
  シリーズ      DiamondMax Plus 9
  キャッシュ     8MB
  インターフェイス  Ultra ATA133
  ディスク枚数    不明
  平均シークタイム  9 ms

hda1 1024M
hda2 1024M
hda3 8192M
hda4 残り

Disk /dev/hda: 255 heads, 63 sectors, 19929 cylinders
Units = cylinders of 16065 * 512 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/hda1             1       131   1052226   83  Linux
/dev/hda2           132       262   1052257+  83  Linux
/dev/hda3           263      1307   8393962+  83  Linux
/dev/hda4          1308     19929 149581215   83  Linux

loader.o

玄箱はFLASH ROMのカーネルから起動するようになっていため version が 2.4.17 のままであり変更することが困難である

そこでカーネルを更新するための仕組みとして利用されているのが「loader.o」である

玄箱は電源投入でFLASH ROMのカーネルが動作しHDDのリソースでOSの初期動作に入る(unixで言うと run Level、state移行という仕組みがある)

OSの初期動作の部分で最初だけ「loader.o」(厳密にはカーネル+loader.o)を用いて(HDの)/bootに置かれたカーネルを再ロードさせる

この仕組みのおかげでカーネルの再構築が可能になっている

Lenny(以降かな)は、ブートの仕組みの変更のため(この変更内容は理解していない)、上記のようなカーネルの再ロードはできない

(おそらくリソースを共存できないってことだと思う)

対応策としては

・(loader.oを利用)HDDのパーティション1にFLASH ROMからブートできるOSを置いて起動させ、別パーティションに置いた Lenny を起動させる

・(U-Boot化)HDDのパーティション1のカーネルをロードできる U-Boot に変更する(FLASH ROMのカーネルは動作しない)

loader.oを利用したLenny起動の仕組み

hda3にLennyを置いたとして、hda1に以前の(カーネル2.6, loader.oが含まれるDebian化キットで)etch環境を置く

loader.o のパラメータで hda3 を / (ルート)にする

loader.o のコンパイル
# cd /usr/src
# wget http://jan.csie.ntu.edu.tw/~jo/kuro/loader/loader.tar.gz
# tar xzvf loader.tar.gz
# cd loader
# vi Makefile
# INCLUDE = -isystem /usr/src/linux-2.6.20/
(玄箱のCPUの指定)
# export ARCH=ppc
# make
# cp -p loader.o /boot
(LOADERの行を修正)
# vi /etc/kuro_load_param
# FILENAME="/var/tmp/kernel_loading..."
# KERNEL="/boot/vmlinux.bin"
# LOADER="/boot/loader.o"
# OPTIONS="root=/dev/hda1"
# #INITRD="/root/initrd.gz"

U-Boot

便利なIPL-ROMにするということ

マザーボードのBIOSをアップデートすると思えば良い(失敗すると何も起動しなくなる)

現状は方法を割愛する

AVR

玄箱 AVR 制御用デバイスカーネルのバージョンによって異なる

2.4.17 /dev/ttyS1
2.4.17 /dev/AVR00
2.6.25 /dev/ttyS1
2.6.28 /dev/ttyS0

以下で判断できるか

# aptitude install avr-evtd
# ps -ef | grep avr
root     11951     1  0 13:01 ?        00:00:00 /usr/sbin/avr-evtd -d /dev/ttyS1

# vi /etc/default/avr-evtd
DEVICE=/dev/ttyS1
(定義ファイルに書いてあった)
DISKCHECK=OFF
(ディスクチェックはOFF was 90)
ROOT=sda3
WORK=sda4

ファンに対するコマンド(他の説明はこちら等を参照)

# echo -n ']]]]' > /dev/ttyS1(ファン高速回転)
# echo -n '\\\\' > /dev/ttyS1(ファン低速回転)

カーネル再導入

玄箱用のカーネルを再度セットアップ

カーネルは、www.genbako.com から頂戴する(ありがたや)

必要パッケージ

# apt-get install wget
# apt-get install module-init-tools

カーネルとモジュールをダウンロードして展開

# cd /tmp
# wget http://www.genbako.com/kernelimage-2.6.25.1-kuroHG.tgz
# wget http://www.genbako.com/modules-2.6.25.1-kuroHG.tgz
# cd /boot; tar -zxvf /tmp/kernelimage-2.6.25.1-kuroHG.tgz
# cd /lib/modules/; tar -zxvf /tmp/modules-2.6.25.1-kuroHG.tgz 
# depmod -a(モジュールの依存関係ファイルを作成)

頑張るなら:LinkStation/玄箱/kernel - PukiWiki

カーネル再構築

iptablesを有効化するためにカーネルを再構築する

玄箱用カーネルパッチなども、www.genbako.com からありがたく頂戴する

必要パッケージ

# apt-get install less
# apt-get install patch
# apt-get install wget
# apt-get install gcc
# apt-get install ncurses-dev
# apt-get install bzip2
# apt-get install module-init-tools

本家カーネル配布サイトからカーネルをダウンロード(2.6.25)

# cd /usr/src
# wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.25.tar.bz2
# tar -jxpvf linux-2.6.25.tar.bz2

カーネルパッチのダウンロード

# wget http://www.genbako.com/kurobox-sources-2.6.25.patch
# wget http://www.genbako.com/kurobox-section-mismatch2625.patch

カーネルパッチの実施

# cd linux-2.6.25
# patch -Np1 < ../kurobox-sources-2.6.25.patch
# patch -Np1 < ../kurobox-section-mismatch2625.patch

カーネル再構築

# cp config_kuroboxhg .config
# export ARCH=ppc
# make menuconfig

iptablesの有効化(コンフィグ画面の詳細はこちらが詳しい)

Networking  ---> [Enter]
  Networking options  ---> [Enter]
  [*] Network packet filtering framework (Netfilter)  ---> [Space -> Enter]
      [*]   Network packet filtering debugging [SPACE]
            Core Netfilter Configuration  ---> [Enter]
               Netfilter NFQUEUE over NFNETLINK interface [SPACE]
               Netfilter LOG over NFNETLINK interface     [SPACE]
               Netfilter connection tracking support      [SPACE]
              全選択後、EXITで1つ上に戻る
            IP: Netfilter Configuration  ---> [Enter]
               IPv4 connection tracking support (required for NAT) [SPACE]
              全選択後、EXITで最上位まで戻る
EXITでYesを選択し終了
# make oldconfig
# make vmlinux  (80分位)
# objcopy -p -O binary vmlinux /boot/vmlinux.bin
# cp -pf System.map /boot/
# make modules  (40分位)
# make modules_install
旧モジュールを削除(新しいのが問題なかったら)
# cd /lib/modules
# rm -rf 2.6.25.1-kuroboxHG(例)

5.0(lenny)以降で、loader.oを用いたブートプロセスにしている場合は hda1 にカーネルがあるのでマウントしてコピーする

TOP

最初に行う基本的な設定

DNS resolver

ネームサーバの設定

# vi /etc/resolv.conf
search
nameserver xxx.xxx.xxx.xxx
nameserver xxx.xxx.xxx.xxx  ←セカンダリを設定する場合

aptitude

# vi /etc/apt/sources.list
#squeeze (6.0)
deb ftp://ftp.dti.ad.jp/pub/Linux/debian squeeze main contrib non-free
#lenny   (5.0)
#deb http://archive.debian.org/debian/ lenny main contrib non-free
#etch    (4.0)
#deb http://archive.debian.org/debian/ etch contrib main non-free

sudo

# update-alternatives --config editor
alternative editor (/usr/bin/editor を提供) には 4 個の選択肢があります。

  選択肢    パス              優先度  状態
------------------------------------------------------------
* 0            /bin/nano            40        自動モード
  1            /bin/ed             -100       手動モード
  2            /bin/nano            40        手動モード
  3            /usr/bin/vim.basic   30        手動モード
  4            /usr/bin/vim.tiny    10        手動モード

現在の選択 [*] を保持するには Enter、さもなければ選択肢の番号のキーを押してくだ さい: 4
update-alternatives: /usr/bin/editor (editor) を提供するために 手動モード で /usr/bin/vim.tiny を使います。

visudoでviが使用できるようにするには4を選択

telnetd

# vi /etc/inetd.conf
(telnetの行をコメントアウト)

導入するなら

# aptitude install xinetd telnetd

sftpd

# aptitude install vsftpd
# vi /etc/vsftpd.conf
tcp_wrappers=YES
(サーバーへのアクセスを許可するのにTCP Wrapperを使用)
anonymous_enable=NO
(匿名ユーザーアクセスを拒否)
local_enable=YES
write_enable=YES
(ローカルアカウントの接続を許可)
local_umask=022
(新規ファイル作成時のパーミッションマスク)
xferlog_file=/var/log/vsftpd.log
(ログファイルの場所)
ascii_upload_enable=YES
(Asciiモードによるアップロードを許可)
ascii_download_enable=YES
(sciiモードによるダウンロードを許可)

# vi /etc/hosts.allow
vsftpd: 127.0.0.1 192.168.0.0/255.255.0.0

# /etc/init.d/vsftpd restart

NTPサーバ

# aptitude -y install ntp
# mv /etc/ntp.conf /etc/ntp.conf.org
# vi /etc/ntp.conf
server ntp.nict.jp
server ntp.jst.mfeed.ad.jp

# /etc/init.d/ntp restart
# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 ntp-b3.nict.go. .NICT.           1 u   11   64    1   24.545    1.283   0.002
 ntp2.jst.mfeed. 210.173.160.86   2 u   11   64    1   26.129    3.310   0.002

ISP別公開NTPサーバー一覧

ddclient

ddclientがMyDNSに対応していないので修正

自身で修正したものはLenny(5.0)アップ時に消えてなくなってしまったのでこちらから対応版を頂戴した

# aptitude install ddclient
(設定を求められるが適当に入力 → MyDNSを入力すると最後はWARNINGで終わる)
対応済みPerlスクリプト(/usr/sbin/ddclient)と、対応済み設定ファイル(/etc/ddclient.conf)をダウンロードして設置
# vi /etc/ddclient.conf
daemon=300
syslog=yes
pid=/var/run/ddclient.pid
use=web, web=checkip.dyndns.org/, fw-skip='IP Address'
custom=yes
protocol=mydns
server=www.mydns.jp

login=xxxxxxxx
password='xxxxxxxx'

max-interval=5d

# /usr/sbin/ddclient -daemon=0 -debug -verbose -noquiet
(最後に「SUCCESS:  updating papasan.mydns.jp: good: IP address set to XXX.XXX.XXX.XXX」と表示されれば正常)
# /etc/init.d/ddclient start

DNS(bind9)

# aptitude install bind9 dnsutils dns-browse

/etc/bind 内を修正
・・・

上位DNSはgoogleを利用

どのフリーDNSサーバが速いかを比較

主な接続プロバイダーのDNS一覧

内部のテスト

# dig @localhost -x 192.168.0.xxx
# dig @localhost xxx.xxx.jp

外部へのテスト

# dig @localhost yahoo.co.jp

リゾルバ設定

# vi /etc/resolv.conf
domain ドメイン名
dnsserver 127.0.0.1

syslogで「managed-keys.bind」が無いというエラーが出る対策

1.単純に作業ディレクトリにtouchする(1か2のうちどちらかでOK)
$ sudo touch /var/cache/bind/managed-keys.bind && sudo /etc/init.d/bind9 restart
2.「managed-key」のディレクトリを指定、同ファイルをtouchするか作成する
 必要になった時の為にコメントアウトで入れておけば忘れずに済む。
options {
    // managed-keys-directory "/etc/bind";
};

こちらを参考にでも

Samba

ローカル内でフルアクセスの設定

# aptitude install samba
(途中ワークグループを求められたら入力)
# vi /etc/samba/smb.conf
[global]
(先頭辺りに)
unix charset = UTF-8
dos charset = CP932
map to guest = Bad User

workgroup = MSHOME

(必要あれば接続元の制限)
#### Networking ####
nterfaces = 127.0.0.0/8 eth0 192.168.0.0/24
bind interfaces only = yes

(認証なしにする)
### Authentication ####
# security = user
security = share

(末尾に追加)
[share]
path = /var/share
public = yes
writeable = yes
create mode = 0666
directory mode = 0777

# service samba restart

既に起動しているWindowsからは、新しいsamba設定が有効にならない場合がある(Windowsの再起動で有効)

Samba システムの設定ファイル

Apache2

# aptitude install apache2
# service apache2 stop (/etc/init.d/apache2 stop)

# vi /etc/apache2/conf.d/security
ServerTokens Prod
ServerSignature Off
TraceEnable Off
(サーバ情報の非表示などセキュリティ設定)

# vi /etc/apache2/apache2.conf
ServerName www.server.world
(サーバ名の追記)

# vi /etc/apache2/mods-available/dir.conf
(ディレクトリ名のみでアクセスできるファイルの設定)

# vi /etc/apache2/mods-available/mime.conf
AddHandler cgi-script .cgi .pl
(MIMEタイプの設定)

# vi /etc/apache2/sites-available/default
ServerAdmin webmaster@server.world
(管理者アドレス設定)
DocumentRoot /var/www
(公開ドキュメント等の設定)
Options FollowSymLinks ExecCGI
(Indexes の削除、CGI追加)

# ln -s /usr/bin/perl /usr/local/bin/perl
(perlをlocal/binでも動作するように)
# service apache2 start

/etc/apache2/ 配下のファイルについて

apache2.conf    :基本的には書き換えない,以下の sites-enabled, mods-enabled を include
sites-available  :書き換えたい設定はここに置く
sites-enabled   :有効にした設定をリンクする(リンク先はsites-available)
mods-available   :同様にmod用
mods-enabled    :同様
conf.d       :Apache2を利用する他パッケージが設定ファイルの配置用に使用
ports.conf
envvars
magic
httpd.conf     :使用されない

php5

# aptitude install php5 php5-cli php-pear php5-cgi libapache2-mod-php5 php5-common
# vi /etc/apache2/mods-enabled/mime.conf
AddHandler php5-script .php

$ vi /etc/php5/apache2/php.ini
expose_php = Off
(PHPのバージョンを隠す)
error_reporting  =  E_ALL & ~E_NOTICE | E_STRICT
(ログに記録するレベルを指定、E_STRICTはPHP5で推奨されていない関数が使用された場合などに警告を出す)
display_errors = Off
(エラーをHTMLで表示しないようにする)
log_errors = On
(phpのエラーをログに記録する)
log_errors_max_len = 4096
(ログに記録するサイズを増やす)
error_log = /var/log/php/php_error_log
(記録するログのファイルを指定 → あとで作成すること))
register_long_arrays = Off
($HTTP_*_VARS のような古くて長い変数は使用しない)
register_argc_argv = Off
(Webアプリケーションではargcやargvは不要)
magic_quotes_gpc = Off
(PHP6で削除される機能)
default_charset = "UTF-8"
(デフォルトの文字コードを指定)
include_path = ".:/usr/share/php:/usr/share/pear"
(require()やinclude()するファイルのディレクトリを指定)
enable_dl = Off
(動的モジュールのロードをオフにする)
file_uploads = Off
(ファイルアップロードを使わない場合は確実にOff)
allow_url_fopen = Off
(URIをファイルとして扱わないようにする(これが有効だとインターネットのどこからでもコードを読み込んで実行できてしまう可能性がある))
session.cookie_httponly = 1
(JavaScriptでセッションIDを使用しない場合は1にする)
session.entropy_length = 32
session.entropy_file = /dev/urandom
(セッションIDを作成する際の外部リソースへのパスをとバイト数)
session.hash_function = 1
(SHA-1の指定に変更)

[mbstring]
mbstring.language = Japanese
(言語環境を日本語に設定)
mbstring.internal_encoding = UTF-8
(default_charsetと同じ文字コードを指定)

PHPのエラーをログに記録する際に指定したファイルの作成

# mkdir /var/log/php
# touch /var/log/php/php_error_log
# chown -R www-data. /var/log/php

Apacheを再起動

# service apache2 restart

phpのログのローテーション(参考)

$ sudo vi /etc/logrotate.d/php
/var/log/php/php_error_log {
  weekly  missingok
  notifempty
  sharedscripts
  postrotate
    /etc/init.d/apache2 reload > /dev/null 2>/dev/null || true
  endscript
}

/etc/phpmyadmin に apache.conf があり /etc/apache2/conf.d/phpmyadmin.conf でリンクされる

MySQL

# aptitude install mysql-client mysql-server php5-dev php5-cli php5-common php-pear php5-mysql php5-mcrypt php5-dev php5-mhash php5-gd php5-xsl php5-xmlrpc
(MySQLのrootのパスワードの新規設定を要求してくる)
# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 41
Server version: 5.1.63-0+squeeze1 (Debian)

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
+--------------------+
2 rows in set (0.01 sec)

mysql> grant all privileges on *.* to (ユーザ名)@localhost identified by '(パスワード)';(rootでない一般ユーザを作る)
Query OK, 0 rows affected (0.03 sec)

mysql> select user from mysql.user where user='xxxx';(登録されたかどうか確認)
+------+
| user |
+------+
| xxxx |
+------+
1 row in set (0.00 sec)

mysql> quit
Bye
# vi /etc/mysql/my.cnf
[client]
default-character-set = utf8

[mysqld]
default-character-set = utf8
skip-character-set-client-handshake

[mysqldump]
default-character-set = utf8

[mysql]
default-character-set = utf8

# service mysql restart
# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 35
Server version: 5.1.63-0+squeeze1 (Debian)

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show variables like 'character\_set\_%';
+--------------------------+--------+
| Variable_name            | Value  |
+--------------------------+--------+
| character_set_client     | utf8   |
| character_set_connection | utf8   |
| character_set_database   | utf8   |
| character_set_filesystem | binary |
| character_set_results    | utf8   |
| character_set_server     | utf8   |
| character_set_system     | utf8   |
+--------------------------+--------+
7 rows in set (0.00 sec)

mysql> quit
# aptitude install phpmyadmin
自動設定を求めてくるのでapache2を指定
dbconfig-commonで管理は「いいえ」を選択
# vi /etc/apache2/conf.d/phpmyadmin.conf
(アクセス制限など追加)
   Deny from all
   Allow from 127.0.0.1 10.0.0.0/24
# service apache2 restart

http://(ホスト名)/phpmyadmin/ でアクセス可能か確認

インストールで自動設定されない場合

# ln -s /etc/phpmyadmin/apache.conf /etc/apache2/conf.d/phpmyadmin.conf
必要があればphpmyadmin.confを編集(アクセス制限など追加)
   Deny from all
   Allow from 127.0.0.1 10.0.0.0/24
# service apache2 restart

ログローテーション

# aptitude install logrotate
# vi /etc/logrotate.conf
weekly を monthly に変更(週から月へ)
rotate 4 を rotate 36 に変更(3年分残す)

# cd /etc/logrotate.d
# vi apache2
/var/log/apache2/*.log {
        monthly				# was weekly
        missingok
        rotate 36			# was 52
        compress
        delaycompress
        notifempty
        create 640 root adm
        sharedscripts
        postrotate
                /etc/init.d/apache2 reload > /dev/null
        endscript
}

# vi php
/var/log/php/php_error_log {
        weekly
        missingok
        notifempty
        sharedscripts
        postrotate
                /etc/init.d/apache2 reload > /dev/null
        endscript
}

TOP

ハードウェア情報の取得

# aptitude install lm-sensors
# aptitude install libsysfs-dev

玄箱では利用できるものがないため一旦パッケージ削除

RRDtoll+HotSaNIC(システム監視)

RRDtool+HotSaNICの導入は簡単だということで使ってみる

# aptitude install rrdtool librrds-perl
# aptitude install hddtemp
途中でデーモン起動を問われるが「いいえ」とする(設定は dpkg-reconfigure hddtemp で変更可能)
# cd /opt
# wget http://ufpr.dl.sourceforge.net/sourceforge/hotsanic/hotsanic-0.5.0-pre5.tgz
# tar xvzf hotsanic-0.5.0-pre5.tgz
# chown -R root:root HotSaNIC
# ./setup.pl
(NETSTAT, PART, SENSORS, SYSTEM, TRAFFIC を選択)
 ・・・
Configuring local interfaces. Please answer these:
found: eth0  -  (y)es or (n)o ? y
found: lo  -  (y)es or (n)o ? y

途中、rrdtimer.pl と rrdtool のパスが見つからずエラーが出る

  rrdtimer.pl ← DAEMONDIRの設定前に探しているから

  rrdtool ← BINPATHの設定がないから(初期が BINPATH="not configured" になっている)

元の.settings.defaultを修正しても良いが、新規に作られた settings を修正

DAEMONDIRは既に設定されているのでBINPATHのみ設定

# vi settings
BINPATH="/usr/bin"

# ./setup.pl
(再度、NETSTAT, PART, SENSORS, SYSTEM, TRAFFIC を選択)

snmp関係は必要ないので not configured でOK(ホストのみのトラフィック取得は可能)

全体の設定値は ./settings で、各種の設定値は ./modules/(各種)/ 配下にある

rrdtoolで必要となるrddファイルは(各種)配下にあり存在するかで処理するしないのキーファイルとなっている

セットアップ内容の確認

# vi settings
WEBDIR="/mnt/www/hotsanic"
(web表示させるためのディレクトリを指定)
LOGDIR="/var/log/hotsanic"
(ログファイルを格納するディレクトリを指定)
STIME="120"
(情報取得間隔(秒))
DTIME="15"
(グラフを更新する間隔(分))
IMAGEFORMAT="png"
(グラフの画像タイプ(pngに変更する))

ハードディスクの温度取得を追加

# vi modules/sensors/settings
SENSOR="/usr/sbin/hddtemp -n /dev/hda |",hda,HDD1,1,1,0,-C,0,60

Web表示されるためのHTML格納ディレクトリと生成しインデックスを生成する

# mkdir /mnt/www/hotsanic
# chown www-data. /mnt/www/hotsanic
# ./makeindex.pl(インデックスのみ生成される → 情報取得を変更した場合に再度実行)
generating index-files for each plugin...
netstat
  creating directory /mnt/www/hotsanic/netstat
  moving index-files to webdir

part
  creating directory /mnt/www/hotsanic/part
  moving index-files to webdir

sensors
  creating directory /mnt/www/hotsanic/sensors
  moving index-files to webdir

system
  creating directory /mnt/www/hotsanic/system
  moving index-files to webdir

traffic
  creating directory /mnt/www/hotsanic/traffic
  moving index-files to webdir


building /mnt/www/hotsanic/index.html ...
table-size: 3 lines.

Modules are added in this order:
traffic
system
part
sensors
netstat

done.

起動時の自動起動とWeb表示アクセス制限の追加

# ln -s /opt/HotSaNIC/rrdgraph /etc/init.d/rrdgraph
# update-rc.d rrdgraph default

# vi /etc/apache2/sites-available/default
<Directory /mnt/www/hotsanic/>
  Order deny,allow
  deny from all
  allow from 192.168.0.0/24(LAN内からのみアクセス許可)
</Directory>
(追加)他パッケージに合わせるなら、vi /etc/apache2/init.d/hotsanic.conf で新規に作成したほうが望ましい

起動

# /etc/init.d/rrdgraph start
Starting rrdtimer...
reading & checking config (/opt/HotSaNIC/settings) ...
evaluating cmdline arguments...
entering daemon mode...
# service apache2 restart
# ./convert.pl(グラフが出来上がった頃に1回だけ実行)

参考:kajuhome.com/hotsanic.shtml linux.mini13i.com/?tool%2FHotSaNIC#ud75f376 siruko.com/kuro/index.html www.infobb.com/pc/bsd-rrdtool.html

Webアクセス解析

目的はWebからの不正アクセスの把握と運用状況のエラーチェック

visitors

# aptitude install visitors graphviz
# mkdir /mnt/www/admin/visitors
# chown www-data. /mnt/www/admin/visitors

(実行例1)
# visitors -A -m 30 -o html -f /mnt/www/admin/visitors/report.html /var/log/apache2/access.log

(実行例2)
# visitors -GKZHUWMRDOBXYS -m 30 -o html -T -P http://www.example.jp -f /mnt/www/admin/visitors/report.html /var/log/apache2/access.log

(実行例3)ページのアクセス状況をチャート図にする
# visitors --prefix http://www.example.jp -V /var/log/apache2/access.log | dot -Tpng -o/mnt/www/admin/visitors/report.png

参考:www.uetyi.mydns.jp/wordpress/linux-server/entry-170.html

定期的に実行するならcron化だが、処理負荷が低いのでphpやcgiで実行させることも可能

webdruid

# aptitude install webdruid graphviz
# mkdir /mnt/www/admin/webdruid
# vi /etc/webdruid/webdruid.conf
LogFile /var/log/apache2/access.log
(ログファイルの設定)
OutputDir /mnt/www/admin/webdruid
(Web表示出力ディレクトリの設定)
HideReferrer www.xxxxx.jp
(リファラを除外)
IgnoreSite 192.168.24.*
(LAN内からのアクセスを除外)
DNSCache dns_cache.db
DNSChildren 10
(解析結果のアドレスをドメイン名に変更)

日本語に対応させるために以下の処理を施す

# cd /usr/share/locale/ja/LC_MESSAGES
# mv webdruid.mo webdruid.mo.org

テスト

# webdruid
(ブラウザで確認)

cron登録

# crontab -e
10 0 * * * root webdruid

↑(誤)↓(正)

# crontab -e
10 0 * * * /usr/bin/webdruid > /dev/null 2>&1
(大きな間違いはrootを記述したこと → ユーザで登録する場合は実行ユーザ指定は必要ない)

crontabの登録

/etc/crontab を直接編集しても結果は同じ(管理者権限で編集可能)

debianの場合、crontab -e で編集すると /var/spool/cron/crontabs/ に登録

cron登録の注意

・実行ファイルに(sh や perl)があれば "."(ピリオド)は使用できない

・/usr/bin/*** を実行する場合は "cd / && /usr/bin/***" or "cd /; /usr/bin/***" と記述すること

(ユーザで登録する場合は問題ないようだ)

awstats

# aptitude install awstats
# vi /etc/awstats/awstats.conf
LogFile="/var/log/apache2/access.log"
(51行目ログファイルの指定)
SiteDomain="www.example.jp"
(153行目 ドメイン指定(取得ドメインがexample.jpの場合))
HostAliases="localhost 127.0.0.1 www.example.jp"
(168行目 スト名の指定)
DirData="/var/lib/awstats"
(203行目 データディレクトリの指定)
SkipHosts="localhost 127.0.0.1 REGEX[^192\.168\.0\.]"
(466行目 同一Lan内からのアクセスをカウントしない)
Lang="jp"
(905行目 表示言語の指定)

iconファイルがweb homeにないとアクセスエラーになるのでAliasを作る

# vi /etc/apache2/conf.d/awstats.conf
Alias /awstats-icon /usr/share/awstats/icon/

必要があれば以下も修正

# vi /etc/apache2/sites-available/default
(/usr/lib/cgi-bin で実行するので対応)
# vi /etc/logrotete.d/apache2
(log ファイルの読み込みを可能にする(例えば create 640 www-data www-data にする))

/usr/lib/cgi-bin/awstats.pl が本体となる

Syntax: awstats.pl -config=virtualhostname [options]

-update はデフォルトオプション

テスト実行

# /usr/lib/cgi-bin/awstats.pl -config=www.example.jp
Create/Update database for config "/etc/awstats/awstats.conf" by AWStats version 6.95 (build 1.943)
From data in log file "/var/log/apache2/access.log"...
Phase 1 : First bypass old records, searching new record...
Searching new records from beginning of log file...
Phase 2 : Now process new records (Flush history on disk after 20000 hosts)...
Jumped lines in file: 0
Parsed lines in file: 1539
 Found 502 dropped records,
 Found 2 corrupted records,
 Found 0 old records,
 Found 1035 new qualified records.

累積で処理を軽減したい場合は cron で登録して定期的に実行させる

アクセスは http://www.example.jp/cgi-bin/awstats.pl で行う

*上記はデフォルトでインストールされ、これでは誰でも表示できてしまうので修正する

○cgi-bin での実行は好ましくないので場所を移動

# mv /usr/lib/cgi-bin/awstats.pl /mnt/www/admin
# vi /usr/local/sbin/mkawstats
(apend)
#!/bin/sh
#
exec /mnt/www/admin/awstats.pl $@ -config=www.example.jp

# mkawstats -update
Create/Update database for config "/etc/awstats/awstats.conf" by AWStats version 6.95 (build 1.943)
From data in log file "/var/log/apache2/access.log"...
Phase 1 : First bypass old records, searching new record...
Direct access after last parsed record (after line 4537)
Jumped lines in file: 4537
 Found 4537 already parsed records.
Parsed lines in file: 765
 Found 746 dropped records,
 Found 0 corrupted records,
 Found 0 old records,
 Found 19 new qualified records.

#vi /usr/share/awstats/tools/update.sh
AWSTATS=/mnt/www/admin/awstats.pl
(cronで動作していた)

定義ファイルの詳細

LogFile="/var/log/apache2/access_landisk.log.utf8"
(ログファイルの位置を指定)
LogType=W
(ログのタイプ、「W」はWebログのこと。)
LogFormat=1
(ログのフォーマットを指定、combined なら「1」を指定)
SiteDomain="landisk.kororo.jp"
(ドメイン名の指定)
HostAliases="219.117.218.XXX localhost 127.0.0.1"
(ホストのエイリアス名を指定する)
DNSLookup=0
(ルックアップを行うかどうかで、負荷はかけたくないなら「0」にして無効化する、ただし国別アクセス解析ができなくなる)
DirData="/var/lib/awstats"
(解析結果を保存する場所)
DirCgi="/cgi-bin/awstats"
(cgi-binディレクトリのある場所、ドキュメントルートからの相対or絶対パス)
DirIcons="/awstats-icon"
(解析結果ページに表示されるアイコン画像へ、ドキュメントルートからの相対or絶対パス)
DefaultFile="index.php"
(解析対象のインデクスファイル)
Lang="jp"
(言語の指定)
UseFramesWhenCGI=1
(表示を左右2画面のフレームにする)
DetailedReportsOnNewWindows=0
(詳細表示をクリックしたときに別ウィンドウにするかどうか)
AllowToUpdateStatsFromBrowser=1
(ブラウザから解析の更新を可能にする、通常はcronで定刻時刻に解析データをアップデートするようにするところを、ブラウザから解析データを更新できるようにする。)
AllowFullYearView=3
(年間の集計を許可する)
SkipHosts="127.0.0.1 REGEX[^172\.16\.50\.]"
(ローカルからのアクセスをカウントしない)
FirstDayOfWeek=0
(日曜日を週の頭にもってくる)

Snort(不正アクセス監視)

MySQLを使用して管理する場合 snort での install では依存関係上後で困るので snort を含めた snort-mysql で install した方が良いようだ

snortのインストール

# aptitude install snort
(ローカルネットワークの範囲を求められるので入力)
# vi /etc/snort/snort.conf
var HOME_NET $eth0_ADDRESS
(修正)
var RULE_PATH /etc/snort
(修正)
output database: log, mysql, user=snort password=snort dbname=snort host=localhost
(コメントを除き修正)

訂正:Debian 6.0 の場合

/etc/snort/snort.confの編集は必要ならばで、その際snort.debian.confも確認のこと

# vi database.conf
output database: log, mysql, user=snort password=snort dbname=snort host=localhost

ここから開始でも問題ない

# aptitude install snort-mysql
DBを使用するかどうか求められるので「はい」を選択

snort ユーザーを作成し snort データベースを作成(MySQLのセットアップが前提)

# zcat /usr/share/doc/snort-mysql/create_mysql.gz | mysql -D snort -u snort -p

下記のようにコマンドを入力するとデーモンとしてSnortが起動

# snort -c /etc/snort/snort.conf -i eth0 -u snort -g snort -l /var/log/snort -D -y
or
# /etc/init.d/snort start

定義ファイルのチェック

# /etc/init.d/snort config-check

何かの拍子で /etc/snort/db-pending-config が 空ファイルで残っている場合があり、そのままだと起動しないので存在したら削除すると解決

ACID(snortアクセスログ解析)

snortが出力したDBデータを解析するソフトウェア

セットアップ前にsnortがDBに情報を出力できるようにしておくこと

# aptitude install acidbase

警告: php に対するインクルードパスが変更されています!                     x
 x                                                                           x
 x libphp-adobd は /usr/share/adodb にインストールされなくなっています。新   x
 x しいインストールのパスは /usr/share/php/adodb です。                      x
 x                                                                           x
 x php.ini ファイルを更新してください。web サーバの設定も変更する必要がある  x
 x かもしれません。

(上記の警告は問題ないようだ)

使用DBを求められるのでMySQLを選択
acidbase用のパスワード設定 → snort

本体は /usr/share/acidbase に、連携ファイルは /etc/acidbase に格納

/etc/acidbase/apache.conf が /etc/apache2/conf.d/acidbase.conf でリンクされる

# vi /etc/acidbase/apache.conf (/etc/apache2/conf.d/acidbase.conf)
allow from 127.0.0.0/255.0.0.0 192.168.0.0/24
(アクセスできるように修正)
# serivce apache2 restart

ブラウザから、http://(ホスト)/acidbase/base_main.php でアクセス
「Setup page」を選択
「Create ACID AG」というボタンを選択
Goto the Main page to use the application. の「Main page」でメインページが表示

必要に応じて以下を修正

# vi /etc/dbconfig-common/acidbase.conf 
# vi /etc/acidbase/base_conf.php (/usr/share/acidbase/base_conf.php)
$BASE_Language = ‘japanese’
(日本語表示になる)

参考:www.atmarkit.co.jp/fsecurity/rensai/snort01/snort01.html


以下の修正は必要なさそうである

# vi /etc/acidbase/base_conf.php
$alert_dbname : ‘mysql’
$alert_host : ‘localhost’
$alert_port : ‘’
$alert_user : ‘snort’
$alert_password : ‘snort’

TOP

検知ツール

chkrootkit

クラッカーが侵入した際にシステムにインストールするrootkitを検出する

# aptitude install chkrootkit
# /usr/sbin/chkrootkit
(rootkitがインストールされていないか検査)

TOP


Copyright © 2012 inoshita.jp, ALL rights reserved.