玄箱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 ログローテーション
Webアクセス解析 ( visitors webdruid awstats )
Snort(不正アクセス監視) ACID(snortアクセスログ解析)
検知ツール ( chkrootkit )
多数、公開されているので、そちらを参考にした方が良い
玄箱を 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とはを参照)
玄箱は電源投入するとFLASH ROMに入っているLinux2.4.17が起動する
そのままFLASH ROMのリソース(カーネルモジュールを含むカーネル以外のOS資源)で動作している状態を「EMモード」と呼ぶ
本来の機能であるNASは提供されたリソース(ファームと呼んでいる)をHDに置き、置かれたリソースを /(ルート)として動作している
玄箱のDebian化は、提供されているNAS用リソースをDebianに置き換えたものである
・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
玄箱は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のカーネルは動作しない)
hda3にLennyを置いたとして、hda1に以前の(カーネル2.6, loader.oが含まれるDebian化キットで)etch環境を置く
loader.o のパラメータで hda3 を / (ルート)にする
# 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"
便利なIPL-ROMにするということ
マザーボードのBIOSをアップデートすると思えば良い(失敗すると何も起動しなくなる)
現状は方法を割愛する
玄箱 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(モジュールの依存関係ファイルを作成)
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 にカーネルがあるのでマウントしてコピーする
ネームサーバの設定
# vi /etc/resolv.conf search nameserver xxx.xxx.xxx.xxx nameserver xxx.xxx.xxx.xxx ←セカンダリを設定する場合
# 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
# 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を選択
# vi /etc/inetd.conf (telnetの行をコメントアウト)
導入するなら
# aptitude install xinetd telnetd
# 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
# 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
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
# aptitude install bind9 dnsutils dns-browse /etc/bind 内を修正 ・・・
上位DNSはgoogleを利用
内部のテスト
# 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"; };
こちらを参考にでも
ローカル内でフルアクセスの設定
# 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の再起動で有効)
# 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 :使用されない
# 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 でリンクされる
# 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 }
# aptitude install lm-sensors # aptitude install libsysfs-dev
玄箱では利用できるものがないため一旦パッケージ削除
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からの不正アクセスの把握と運用状況のエラーチェック
# 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で実行させることも可能
# 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/***" と記述すること
(ユーザで登録する場合は問題ないようだ)
# 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 (日曜日を週の頭にもってくる)
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 が 空ファイルで残っている場合があり、そのままだと起動しないので存在したら削除すると解決
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’ (日本語表示になる)
以下の修正は必要なさそうである
# vi /etc/acidbase/base_conf.php $alert_dbname : ‘mysql’ $alert_host : ‘localhost’ $alert_port : ‘’ $alert_user : ‘snort’ $alert_password : ‘snort’
クラッカーが侵入した際にシステムにインストールするrootkitを検出する
# aptitude install chkrootkit # /usr/sbin/chkrootkit (rootkitがインストールされていないか検査)