JavaScript 表示ができません。お使いのブラウザの JavaScript を有効にしてください。
お知らせ : 新しく VineLinux5.2 を使ったサーバ構築のページを作りました。こちらからお入り下さい。

はじめに

● このぺージでは、VineLinux4.2 を使って出来るだけセキュリティに配慮した自宅サーバを構築していきます。また、次のようなネットワーク構成を前提として進めていきますので、ホスト名やIPアドレスなどは各自の環境に置き換えて下さい。
このサーバ構築にあたっては DELL の PowerEdgeシリーズ を利用しています。 うまくキャンペーンなどを利用すれば、2万円台から購入することが出来ますので、非常にリーズナブルだと思います。

Linux の教科書は?

2009年02月05日
一昔前までは、いざ Linux を始めようと思っても、あるのはすでにある程度のスキルを持った方しか理解できないような難解な書物が一般でした。解からない語句を調べようとしても、その調べた先にある言葉がまた解からなく、どんどんと底無し沼に嵌まっていくような暗澹たる気分にさせられたのは一度や二度ではありません。しかし、インターネットが整備されてきて検索によって膨大な情報に接することが出来るようになると同時に、ディストリビューション側でもより簡単に Linux に親しめる環境作りがなされてきた結果、今では本当に誰でもそれほどの苦労なく Linux を扱えるようになってきています。
とは言え、やはり最低限の知識は必要になります。これは何も Linux に限ったことではなくて、Windows であろうが Mac OS-X であろうが、もうちょっとコンピュータと近付きたい・理解したいと思うようになれば自然と必要となってくるものです。
Linux に関しては、2008年の秋に学習教材として「Linux標準教科書」が無料で提供されるようになりました。内容は、基礎知識や基本操作、Linuxを用いた簡単なサーバ構築など入門者の方にも適したものとなっており、まだ読まれていない方は是非目を通されることをお薦めします。
詳しくは「Linux標準教科書」開発プロジェクトのページまで。教科書のダウンロードも同じページから行えます。

インストールの手順

● インストールの方法についてはVine Linux 4.1 インストールガイドに詳しい説明がありますので、そちらを参考にしてください。サーバ構築にあたってのインストールでは、必要のない物は入れないという基本姿勢で行っています。何が必要で何が必要でないかの判断は難しいかもしれませんが、 後からでも追加することは簡単に出来ます。私はインストール時の「インストールの種類」の選択時に ”カスタム” を選択して、’エディタ’’DNSサーバ’’NFSサーバ’’ネットワークサーバ’のみをインストールするようにしています。これでインストール時のサイズは 484MB となります。もちろんここで ”サーバ” を選んでもまったく問題はありません。

これからのサーバ構築の進め方について

● これから各種設定を行っていく訳ですが、ある程度の順番を決めておきます。最小構成に近いインストールを前提としているため、途中で追加パッケージが必要となる場合があります。そのためインターネットに接続する必要性が出てくるのですが、無防備な状態での接続はあまりに危険です。そこで最初にやるべきことは、ファイアーウォールの設定になります。この後、DHCP ADSL の設定と進んでいきます。また追加パッケージが必要になってくる場合がありますが、メンテナンスと取扱いの容易さを考えて極力 apt による rpm パッケージのインストールとします。

sudo の設定

最終更新日 2008.02.01
● sudo とは何か?
コンピュータを使う場合、Windows(NT/2000/XP)・Linux にかかわらず一般ユーザーアカウントと管理者アカウントとがある。後者は Windows では Administrator と呼ばれ、Linux では多くの場合 root と称されている。

OS が何であれ普段は一般ユーザーでコンピュータを使用するのが大前提だが、アプリケーションのインストールとか設定の変更で管理者権限が必要となるときがある。一般ユーザーから管理者(root)権限を得る方法としては su があるのだが、この場合だとその都度 root のパスワードを要求されてしまう。仮りにシステムにバックドアなどが仕掛けられていたりすると当然パスワードが流出してしまうことになる。また su したまま作業を続けた結果、ちょとした勘違い・タイプミスなどでシステム設定を削除・破壊してしまうなどの危険性もある(経験あり)。

そのような時に sudo を使えばパスワードは一般ユーザーのもので済み、その sudo を使ったコマンドが終われば一般ユーザーにプロンプトが戻るので、忘れてしまって root のまま作業を続ける心配もなくなる。
設定の仕方は最初だけ root 権限になってコンソールから # visudo と打ち、下記のように一般ユーザー名を追加する。
# visudo

# sudoers file.
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the sudoers man page for the details on how to write a sudoers file.
#

# Host alias specification

# User alias specification

# Cmnd alias specification

# Defaults specification

# Runas alias specification

# User privilege specification
root    ALL=(ALL) ALL
user    ALL=(ALL) ALL          <-  追加する(user は自分のユーザー名)

# Uncomment to allow people in group wheel to run all commands
# %wheel        ALL=(ALL)       ALL

● 追加の仕方:root ALL=(ALL) ALL の次の行までカーソルを移動し、そこでキーボードから ”i” を打つと入力モードになる。 user ALL=(ALL) ALL を入力し終わったら ”Esc” キーでコマンドモードに戻ります。最後に ”Shiftキー+zz” とすることで保存終了することができます。

● 終わった後は忘れずに # exit で一般ユーザーに戻っておくこと。また sudo が使えるコマンドを制限することもできるので、サーバとして運用している場合には一般ユーザーから OS を起動・停止するコマンドが使えないように次のように設定することもできる。
% sudo visudo
Cmnd_Alias SHUTDOWN =  /sbin/halt, /sbin/shutdown, /sbin/poweroff,
 /sbin/reboot, /sbin/init

root   ALL=(ALL) ALL
user   ALL=(ALL) ALL, !SHUTDOWN
この状態で
% sudo /sbin/shutdown -r now
Sorry, user user is not allowed to execute '/sbin/shutdown -r now' as root
 on localhost.localdomain.
となって一般ユーザーからの sudo を使った再起動が出来なくなる。
● 使い方(例)
% sudo apt-get update
Password:  <- ここで一般ユーザーのパスワードを入力する
   

最初に設定しておくと便利なチップス

最終更新日 2008.02.11
● root になれるユーザーの制限。/etc/group の wheel に root になることを許可するユーザー名を追加
$ sudo vi /etc/group
    wheel:x:10:root,pub        ← pub(ユーザー名)を追加  
  
● あるファイルがインストールされているかどうかなどを調べてたい時に便利なコマンドに locate が あります。システムをインストールしたばかりだとまだデータベースが出来ていないため、最初に次のコマンドで更新します。
  $ sudo updatedb
  
  ちょっと時間がかかります。 その後調べたいファイルがある時には
  
  $ locate hogehoge  ←  ファイル名です
  

NIC の確認とネットワークの設定

最終更新日 2008.02.01
● すでにサーバ機には NIC が2枚(或は3枚?)刺さっていると思います。そのうち eth0 を内部向け eth1 をインターネット側に設定します。とりあえずここではネットワークを次のように設定する  こととします。
     ネットワーク     : 192.168.3.0/24
     サーバアドレス    : 192.168.3.1
     クライアントアドレス : 192.168.3.2 〜 192.168.3.254
● NIC の設定などは、次のルーター構築のページでもう少し詳しく説明します。

ファイアーウォールのルールを作成します

最終更新日 2008.02.01
● ここでは ADSL を使ったインターネットへの接続を前提にしています。最初に rp-pppoe が入っているか確認してください。
$ rpm -q rp-pppoe
● 先に書いたように最小でインストールしている場合は入っていないと思いますので、APTを使うための準備の中の「例 6.2. CD-ROMから利用する場合」を参考にしてインストールCD から抜き出して入れておきましょう。 ファイアーウォールのルールは、パケットフィルタリング機能である iptables を使用します。このルールを /etc/ppp/firewall-masq として書き込みます。参考までに私の iptables をこちらから落とせるようにしておきます。

/etc/ppp/firewall-masq
#!/bin/sh
#
# firewall-masq		This script sets up firewall rules for a machine
#                       acting as a masquerading gateway
#
# Copyright (C) 2000 Roaring Penguin Software Inc.  This software may
# be distributed under the terms of the GNU General Public License, version
# 2 or any later version.
## iptablesのパス
IPTABLES="/sbin/iptables"
# Interface to Internet
EXTIF=ppp0
INTIF=eth0

LOCAL="192.168.3.0/24"
ANY="0.0.0.0/0"

LOOPBACK="127.0.0.0/8"
CLASS_A="10.0.0.0/8"
CLASS_B="172.16.0.0/12"
CLASS_C="192.168.0.0/16"
CLASS_D_MULTICAST="224.0.0.0/4"
CLASS_E_RESERVED_NET="240.0.0.0/5"
P_PORTS="0:1023"
UP_PORTS="1024:65535"
TR_SRC_PORTS="32769:65535"
TR_DST_PORTS="33434:33523"

#################################################
# functions 
# 外へでるパケット(と関係するパケット)を許す
AcceptInt() {
protocol=$1
ports=$2
srcs=$3
for port in `echo $ports | sed 's/,/ /g'`
do
    if [ "$srcs" = "" ] ; then
	$IPTABLES -A INPUT -i $EXTIF -p $protocol --sport $port \
	    -m state --state ESTABLISHED -j ACCEPT
	$IPTABLES -A OUTPUT -o $EXTIF -p $protocol --dport $port \
	    -m state --state NEW,ESTABLISHED -j ACCEPT
    else
	for src in `echo $srcs | sed 's/,/ /g'`
	do
	    $IPTABLES -A INPUT -i $EXTIF -s $src -p $protocol --sport $port \
		-m state --state ESTABLISHED -j ACCEPT
	    $IPTABLES -A OUTPUT -o $EXTIF -d $src -p $protocol --dport $port \
		-m state --state NEW,ESTABLISHED -j ACCEPT
	done
    fi
done
}
# 外からくるパケット(と関係するパケット)を許す
AcceptExt() {
protocol=$1
ports=$2
srcs=$3
for port in `echo $ports | sed 's/,/ /g'`
do
    if [ "$srcs" = "" ] ; then
	$IPTABLES -A INPUT -i $EXTIF -p $protocol --dport $port \
	    -m state --state NEW,ESTABLISHED -j ACCEPT
	$IPTABLES -A OUTPUT -o $EXTIF -p $protocol --sport $port \
	    -m state --state ESTABLISHED -j ACCEPT
    else
	for src in `echo $srcs | sed 's/,/ /g'`
	do
	    $IPTABLES -A INPUT -i $EXTIF -d $src -p $protocol --dport $port \
		-m state --state NEW,ESTABLISHED -j ACCEPT
	    $IPTABLES -A OUTPUT -o $EXTIF -s $src -p $protocol --sport $port \
		-m state --state ESTABLISHED -j ACCEPT
	done
    fi
done
}

#################################################

## load modules
modprobe ip_tables
modprobe ip_conntrack

## 全てのチェインを空する。
# 空になったユーザ定義チェインを削除して
# カウンターをリセットする。
$IPTABLES -F
$IPTABLES -X
$IPTABLES -Z

## 全てのポリシーをDROPにする。
# セキュリティー上 DROPの方が強固なものがつくれる。
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP

## Loopback
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A OUTPUT -o lo -j ACCEPT

## SYN-FLOODING 
# SYNパケットの溢れ防御
$IPTABLES -N syn-flood
$IPTABLES -A INPUT -i $EXTIF -p tcp --syn -j syn-flood
$IPTABLES -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN
$IPTABLES -A syn-flood -j LOG \
    --log-prefix "IPTABLES SYN-FLOOD:"
$IPTABLES -A syn-flood -j DROP

## Make sure NEW tcp connections are SYN packets
$IPTABLES -A INPUT -i $EXTIF -p tcp ! --syn -m state --state NEW -j LOG  \
    --log-prefix "IPTABLES SYN-FLOOD:"
$IPTABLES -A INPUT -i $EXTIF -p tcp ! --syn -m state --state NEW -j DROP

## ping of death
# 死のpingからの防御
$IPTABLES -N ping-death
$IPTABLES -A INPUT -i $EXTIF -p icmp --icmp-type echo-request -j ping-death
$IPTABLES -A ping-death -m limit --limit 1/s --limit-burst 4 -j RETURN
$IPTABLES -A ping-death -j LOG \
    --log-prefix "IPTABLES PING-DEATH:"
$IPTABLES -A ping-death -j DROP

## port scaner
# こっそり覗きポートスキャナーからの防御
$IPTABLES -N port-scan
$IPTABLES -A INPUT -i $EXTIF -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j port-scan
$IPTABLES -A port-scan -m limit --limit 1/s --limit-burst 4 -j RETURN
$IPTABLES -A port-scan -j LOG \
    --log-prefix "IPTABLES PORT-SCAN:"
$IPTABLES -A port-scan -j DROP

## SPOOFING
# なりすましパケットの防御
# drop i:ppp+ source:local 
$IPTABLES -N spoofing
$IPTABLES -A INPUT -i $EXTIF -s $CLASS_A -j spoofing
$IPTABLES -A INPUT -i $EXTIF -s $CLASS_B -j spoofing
$IPTABLES -A INPUT -i $EXTIF -s $CLASS_C -j spoofing
$IPTABLES -A INPUT -i $EXTIF -s $CLASS_D_MULTICAST -j spoofing
$IPTABLES -A INPUT -i $EXTIF -s $CLASS_E_RESERVED_NET -j spoofing
$IPTABLES -A INPUT -i $EXTIF -d $LOOPBACK -j spoofing
$IPTABLES -A spoofing -j LOG --log-prefix "IPTABLES SPOOFING:"
$IPTABLES -A spoofing -j DROP

## local 
# ひとまずローカルはすべて通す
$IPTABLES -A INPUT -i $INTIF -s $LOCAL -j ACCEPT
$IPTABLES -A OUTPUT -o $INTIF -s $LOCAL -j ACCEPT

## DHCP
# ローカルから来たDHCP要求を通す
$IPTABLES -A INPUT -i $INTIF -p udp --dport 67 -j ACCEPT

## DNS
# DNSサーバの応答、要求を通す
AcceptInt udp 53

## AUTH 
#$IPTABLES -A OUTPUT -o $EXTIF -p tcp --sport 113 -j REJECT \
#    --reject-with tcp-reset
#$IPTABLES -A INPUT -i $EXTIF -p tcp --dport 113 -j REJECT \
    --reject-with tcp-reset
$IPTABLES -A OUTPUT -o $EXTIF -p tcp --sport 113 -j ACCEPT

## NTP 
# 123:ntp 
AcceptInt udp 123
## Real Player
# Real Player:6970:7170
$IPTABLES -A INPUT -i $EXTIF -p udp --dport 6970:7170 \
    -m state --state NEW -j ACCEPT

## 外に出るTCPパケットを通す。
# 80:http 20:ftp-data ,21:ftp ,25:smtp , 23:telnet ,22:ssh ,110:pop3,113:auth,443:https
AcceptInt tcp 80,20,21,25,110,113,443
## 外からのTCPパケットを許す
# 80:http ,20:ftp-data,21:ftp,25:smtp,22:ssh ,113:auth,6699:winmx,2401:cvspserver 
#AcceptExt tcp 80,20,21,25,22,113,6699
#AcceptExt tcp 22
#AsseptExt tcp 80,20,21
## FTP
# ESTABLISHED RELATED for passive mode ftp
# passiveモードでのFTP DATAパケットを通す。
$IPTABLES -A INPUT -i $EXTIF -p tcp --sport $UP_PORTS --dport $UP_PORTS \
    -m state --state ESTABLISHED -j ACCEPT
$IPTABLES -A OUTPUT -o $EXTIF -p tcp --sport $UP_PORTS --dport $UP_PORTS \
    -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT  -i $EXTIF -p tcp --sport 20 -m state \
 --state ESTABLISHED,RELATED -j ACCEPT 
$IPTABLES -A OUTPUT -o $EXTIF -p tcp --dport 20 -m state \
 --state ESTABLISHED,RELATED -j ACCEPT 

# ESTABLISHED RELATED for data connection mode ftp
$IPTABLES -A INPUT  -i $EXTIF -p tcp --dport 20 -m state \
 --state ESTABLISHED -j ACCEPT 
$IPTABLES -A OUTPUT -o $EXTIF -p tcp --sport 20 -m state \
 --state ESTABLISHED,RELATED -j ACCEPT 

## TRACEROUTE
# 外に出るtracerouteを通るようにする。
$IPTABLES -A OUTPUT -o $EXTIF -p udp --dport $TR_DST_PORTS \
    -m state --state NEW -j ACCEPT

## ICMP
# ping を通すようにする
$IPTABLES -A INPUT -i $EXTIF -p icmp \
    -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A OUTPUT -o $EXTIF -p icmp \
    -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

## others LOG
$IPTABLES -A INPUT  -i $EXTIF -p udp -j LOG --log-prefix "IPTABLES UDP-IN:"
$IPTABLES -A INPUT  -i $EXTIF -p udp -j DROP
$IPTABLES -A OUTPUT -o $EXTIF -p udp -j LOG --log-prefix "IPTABLES UDP-OUT:"
$IPTABLES -A OUTPUT -o $EXTIF -p udp -j DROP
$IPTABLES -A INPUT  -i $EXTIF -p icmp -j LOG --log-prefix "IPTABLES ICMP-IN:"
$IPTABLES -A INPUT  -i $EXTIF -p icmp -j DROP
$IPTABLES -A OUTPUT -o $EXTIF -p icmp -j LOG --log-prefix "IPTABLES ICMP-OUT:"
$IPTABLES -A OUTPUT -o $EXTIF -p icmp -j DROP
#$IPTABLES -A INPUT  -i $EXTIF -p tcp -j LOG --log-prefix "IPTABLES TCP-IN:"
$IPTABLES -A INPUT  -i $EXTIF -p tcp -j DROP
$IPTABLES -A OUTPUT -o $EXTIF -p tcp -j LOG --log-prefix "IPTABLES TCP-OUT:"
$IPTABLES -A OUTPUT -o $EXTIF -p tcp -j DROP
$IPTABLES -A INPUT  -i $EXTIF -j LOG --log-prefix "IPTABLES UNKNOWN-IN:"
$IPTABLES -A INPUT  -i $EXTIF -j DROP
$IPTABLES -A OUTPUT -o $EXTIF -j LOG --log-prefix "IPTABLES UNKNOWN-OUT:"
$IPTABLES -A OUTPUT -o $EXTIF -j DROP


## Do masquerading
# LOCALのパケットをマスカレードする。
$IPTABLES -A FORWARD -s $LOCAL -j ACCEPT
$IPTABLES -A FORWARD -d $LOCAL -j ACCEPT
$IPTABLES -A FORWARD -j LOG

$IPTABLES -t nat -A POSTROUTING -j MASQUERADE

# マスカレードを許可する。
echo 1 > /proc/sys/net/ipv4/ip_forward

# 必要なモジュールを組み込む
modprobe ip_conntrack_ftp
● このスクリプト作成にあたっては、Fedoraで自宅サーバー構築 を参考にさせていただきました。感謝!

指定した国と、特定のIPアドレスを拒否する

最終更新日 2009.01.28
● 拒否したいIPアドレスからのアクセスを破棄する。最初に拒否アドレスを列挙するファイルを作り、アクセス権限を変更しておく。
$ sudo touch /root/deny_ip
$ sudo chmod 644 /root/deny_ip
● 後は、vi などで拒否したいアドレスをこのファイルに記述していく。
● 例:
$ sudo cat /root/deny_ip
122.156.xxx.0/24
125.82.xxx.0/24
203.133.xx.0/24
211.155.xxx.0/24
218.16.xxx.0/24
       :
       :
● 次に、/etc/ppp/firewall-masq (このサイトの場合)にルールを書き加えます。## ICMP ## のルールの次あたりに入れると良いでしょう。
# 拒否したいIPアドレスからのアクセスはログを記録せずに破棄する
# ※拒否したいIPアドレスは/root/deny_ipに1行ごとに記述しておくこと

if [ -s /root/deny_ip ]; then
        for ip in `cat /root/deny_ip`
        do
            $IPTABLES -I INPUT -s $ip -j DROP
        done
fi

# 指定した国からのアクセスはログを記録せずに破棄する
# ※COUNTRYLISTにスペース区切りでアクセスを拒否したいCountry Codeを指定
COUNTRYLIST='CN TW BR CZ HK SE MX RU PL AT IN IT DE ZA RO BG MY'
$IPTABLES -N OTHERFILTER
$IPTABLES -A OTHERFILTER -j DROP
for country in $COUNTRYLIST
do
    for ip in `cat delegated-apnic-latest | grep "apnic|$country|ipv4|"`
    do
        FILTER_ADDR=`echo $ip |cut -d "|" -f 4`
        TEMP_CIDR=`echo $ip |cut -d "|" -f 5`
        FILTER_CIDR=32
        while [ $TEMP_CIDR -ne 1 ];
        do
                TEMP_CIDR=$((TEMP_CIDR/2))
                FILTER_CIDR=$((FILTER_CIDR-1))
        done
        $IPTABLES -I INPUT -s $FILTER_ADDR/$FILTER_CIDR -j OTHERFILTER
    done
done
● 新たに書き加えた拒否するアドレス・国が有効となるのは、iptables(このサイトの例だと pppoe)を再起動させてからになりますが、 その前に各国割当てIPアドレス情報の最新版をAPNIC(http://www.apnic.net/)より取得しておきます。この作業は自動化も出来なくはないのですが、ここでは「手」で行います。
$ cd /etc/ppp
$ sudo /usr/bin/wget -q http://ftp.apnic.net/stats/apnic/delegated-apnic-latest
● これで /etc/ppp 以下に delegated-apnic-latest というファイルがダウンロードされているはずです。最後に pppoe を再起動してルールを適用させます。
$ sudo /etc/rc.d/init.d/pppoe restart

ネットワークカード(NIC)の設定

最終更新日 2008.02.01
● eth0 を内部接続用(LAN)に設定
$ sudo vi /etc/sysconfig/network-scripts/ifcfg-eth0
    DEVICE=eth0
    BOOTPROTO=static
    DHCPCDARGS=-R
    BROADCAST=192.168.3.255
    IPADDR=192.168.3.1
    NETMASK=255.255.255.0
    NETWORK=192.168.3.0
    ONBOOT=yes
● eth1 を外部接続用(インターネット側)に設定
$ sudo vi /etc/sysconfig/network-scripts/ifcfg-eth1
    DEVICE=eth1
    ONBOOT=no
● ネットワークの再起動
$ sudo /etc/rc.d/init.d/network restart
● ネットワークの確認
$ /sbin/ifconfig
eth0      リンク方法:イーサネット  ハードウェアアドレス xx:xx:xx:xx:xx:xx
          inetアドレス:192.168.3.1 ブロードキャスト:192.168.3.255  マスク:255.255.255.0
           ↑         アドレスが表記
          inet6アドレス: ( 以下 略 )

eth1      リンク方法:イーサネット ハードウェアアドレス xx:xx:xx:xx:xx:xx
      UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
      ↑ UP と出ていればOK
          *注: 一度もインターネットに接続していない時は eth1 は表示されません  

ADSL を使ったインターネット接続設定

最終更新日 2008.05.15
● ここでは ADSL や FTTH で PPPoE を使って接続する場合を想定しています。PPPoE を利用するには rp-pppoe と ppp のパッケージが必要になります。インストールされていない場合は
$ sudo apt-get install rp-pppoe ppp
としてインストールしておいてください。次に pppoe-setup を使って設定をしていきます。
$ sudo /usr/sbin/pppoe-setup
    Welcome to the Roaring Penguin PPPoE client setup.  First, I will run
    some checks on your system to make sure the PPPoE client is installed
    properly...

    Looks good!  Now, please enter some information:

    USER NAME

    >>> Enter your PPPoE user name (default root): XXXXXXXX 
↑ プロバイダから通知されているユーザーID を記入
     
    INTERFACE

    >>> Enter the Ethernet interface connected to the DSL modem
    For Solaris, this is likely to be something like /dev/hme0.
    For Linux, it will be ethn, where 'n' is a number.
    (default eth0): eth1   ← 外部接続用の eth1 を記入

    Do you want the link to come up on demand, or stay up continuously?
    If you want it to come up on demand, enter the idle time in seconds
    after which the link should be dropped.  If you want the link to
    stay up permanently, enter 'no' (two letters, lower-case.)
    NOTE: Demand-activated links do not interact well with dynamic IP
    addresses.  You may have some problems with demand-activated links.
    >>> Enter the demand value (default no):   ← そのままエンターキーを打つ

    DNS

    Please enter the IP address of your ISP's primary DNS server.
    If your ISP claims that 'the server will provide DNS addresses',
    enter 'server' (all lower-case) here.
    If you just press enter, I will assume you know what you are
    doing and not modify your DNS setup.
    >>> Enter the DNS information here: 
 ↑ プロバイダから DNS サーバのIP アドレスを指定されている場合は
             プライマリDNS のIPアドレスを入力してください。
 ↑ プロバイダからのアドレス指定が無い場合は、server と記入してください。
    
          DNSの IPアドレスを入力した場合
					
          Please enter the IP address of your ISP's secondary DNS server.
          If you just presss enter, I will assume there is only one DNS server.
          >>> Enter the secondary DNS server address here: 	
	↑ 続けてセカンダリDNS のIPアドレスを入力してください。


    PASSWORD

    >>> Please enter your Password:  ← プロバイダから通知されたパスワードを記入
    >>> Please re-enter your Password:  ← もう一度パスワードを記入

          FIREWALLING

          Please choose the firewall rules to use.  Note that these rules are
          very basic.  You are strongly encouraged to use a more sophisticated
          firewall setup; however, these will provide basic security.  If you
          are running any servers on your machine, you must choose 'NONE' and
          set up firewalling yourself.  Otherwise, the firewall rules will deny
          access to all standard servers like Web, e-mail, ftp, etc.  If you
          are using SSH, the rules will block outgoing SSH connections which
          allocate a privileged source port.

          The firewall choices are:
          0 - NONE: This script will not set any firewall rules.  You are responsible
                    for ensuring the security of your machine.  You are STRONGLY
                    recommended to use some kind of firewall rules.
          1 - STANDALONE: Appropriate for a basic stand-alone web-surfing workstation
          2 - MASQUERADE: Appropriate for a machine acting as an Internet gateway
                          for a LAN
          >>> Choose a type of firewall (0-2): 2   ← 1 は直接ネットに接続する場合
                                                          2 はルーターとして使用する場合

    ** Summary of what you entered **

    Ethernet Interface: eth1
    User name: XXXXXXXX
    Activate-on-demand: No
        Primary DNS:xxx.xxx.xxx.xxx	          ← DNSの IPアドレスを入力した場合
    Secondary DNS: xxx.xxx.xxx.xxx            ← DNSの IPアドレスを入力した場合
    Firewalling: MASQUERADE
    
    Accept these settings and adjust configuration files (y/n)? y 
  ↑  間違いがなければ y を打つ

その他の接続確認

最終更新日 2008.02.01
● /etc/resolv.conf の確認
$ sudo vi /etc/resolv.conf
    nameserver XXX.XXX.XXX.XXX   ← プロバイダから通知されたプライマリアドレス
    nameserver XXX.XXX.XXX.XXX   ← プロバイダから通知されたセカンダリアドレス
● インターネットへの接続確認
$ sudo /etc/rc.d/init.d/pppoe start
● ファイアーウォールが作動しているか確認
$ sudo /sbin/iptables -L | less
    Chain INPUT (policy DROP)
         :
         :
となっていて、スクリプトで設定した通りのログになっているかチェック

● さらにクライアントマシンから次のサイトにアクセスして、自分の意図している結果になっているか確認する。
Shields UP! - Internet Vulnerability Profiling の中程にある Proceed ボタンをクリック。
   その次のページの "All Service Ports" ボタンをクリックして、下記のように緑色の STEALTH で埋まっていればとりあえず OK です。

     外部からのアクセスを許可しているポート → ■ OPEN
     外部からのアクセスを拒否しているポート → ■ CLOSE
     その他、DROP しているポート       → ■ STEALTH

さらに "Text Summary" のボタンを押して下記のようにテスト結果が表示されていれば OK です。



● 起動時に自動で接続するには下記のコマンドなのですが、これに限っては自動起動させずにシステム立ち上げ後に接続するようにしたほうがベターです。
$ sudo /sbin/chkconfig pppoe on

ネットワークの確認とDHCPのインストール

最終更新日 2008.02.01
● 次のようなネットワークを想定しています。
    ネットワーク  アドレス : 192.168.3.0/24
    サーバ    IPアドレス : 192.168.3.1
    クライアント IPアドレス : 192.168.3.128 ~ 192.168.3.254
● DHCP をインストールする。
$ rpm -q dhcp として、インストールされてなければ
$ sudo apt-get install dhcp としてインストール。

dhcpd.conf を作成

最終更新日 2008.02.01
● dhcpd.conf の作成。
$ sudo cp /usr/share/doc/dhcp-3.0.4/dhcpd.conf.sample /etc/

としてサンプルファイルを利用するか、下記のように直接作成する。  

$ sudo vi /etc/dhcpd.conf
        ddns-update-style interim;
        ignore client-updates;

        subnet 192.168.3.0 netmask 255.255.255.0 {  
        # 自分のネットワークに合わせる

        # --- default gateway
            option routers 192.168.3.1;
            option subnet-mask 255.255.255.0;

        # option nis-domain "domain.org";
            option domain-name "server.name"; 
        # 自分のサーバの名前を指定
            option domain-name-servers 192.168.3.1;

            option time-offset -18000; # Eastern Standard Time
            option ntp-servers 192.168.3.1;
        # option netbios-name-servers 192.168.3.1;
        # --- Selects point-to-point node (default is hybrid). Don't change this
              unless
        # -- you understand Netbios very well
        # option netbios-node-type 2;

            range dynamic-bootp 192.168.3.128 192.168.3.254; 
        # 割り当てたいIPアドレスを指定
            default-lease-time 21600;
            max-lease-time 43200;

            # we want the nameserver to appear at a fixed address
            #host ns {
            # next-server marvin.redhat.com;
            # hardware ethernet 12:34:56:78:AB:CD;
            # fixed-address xxx.xxx.xx.xxx;
            #}
        }

DHCPサーバの起動と自動起動設定

最終更新日 2008.02.01
$ sudo /etc/rc.d/init.d/dhcpd start
$ sudo /sbin/chkconfig dhcpd on

クライアント側での設定

最終更新日 2008.02.01
● Linux クライアント側でDHCPサーバから自動でアドレスを取得出来るよう設定をする。
$ sudo vi /etc/sysconfig/network-scripts/ifcfg-eth0
      DEVICE=eth0
      BOOTPROTO=dhcp
      HWADDR=XX:XX:XX:XX:XX:XX # MACアドレスがわからない場合は下記参照。
      ONBOOT=yes
      TYPE=Ethernet
● ネットワークカードの MAC アドレスの調べ方
$ /sbin/ifconfig | grep ハードウェアアドレス
      eth0 リンク方法:イーサネット ハードウェアアドレス XX:XX:XX:XX:XX:XX
● クライアント側でのネットワーク再起動
$ sudo /etc/rc.d/init.d/network restart
● クライアント側での IPアドレス取得状況の確認。
$ /sbin/ifconfig
      eth0 リンク方法:イーサネット ハードウェアアドレス XX:XX:XX:XX:XX:XX
      inetアドレス:192.168.3.253 ブロードキャスト:192.168.3.255 マスク
            :255.255.255.0
      inet6アドレス: xxxx::xxx:xxxx:xxxx:xxxx/xx 範囲:リンク
      UP BROADCAST NOTRAILERS RUNNING MULTICAST MTU:1500 Metric:1
      RXパケット:122376 エラー:0 損失:0 オーバラン:0 フレーム:0
      TXパケット:84125 エラー:0 損失:0 オーバラン:0 キャリア:0
      衝突(Collisions):0 TXキュー長:100
      RX bytes:70686517 (67.4 Mb) TX bytes:8192442 (7.8 Mb)
  

ファイル改竄検知システム(Tripwire) の導入

最終更新日 2008.02.01
● クラッカーなどからのファイルの改竄をチェックする Tripwire をインストールします。出来るだけ Linux のインストールの初期段階で導入しておくのが望ましいです。また設定が少しややこしいかも知れませんが、落ち着いて理解しながら進めてください。
以前は本家から rpm パッケージをダウンロードできたのですが、現在は SourceForge.net にある tar.bz2 しかないようです。私は rpmfind.net から fedora 版の src.rpm を落としてきてインストールしました。
$ cd rpm/SRPMS/
$ wget ftp://rpmfind.net/linux/fedora/extras/6/SRPMS/tripwire-2.4.1.1-1.fc6.src.rpm
--02:27:29--  ftp://rpmfind.net/linux/fedora/extras/6/SRPMS/
tripwire-2.4.1.1-1.fc6.src.rpm          => `tripwire-2.4.1.1-1.fc6.src.rpm'
rpmfind.net をDNSに問いあわせています... 194.199.20.114, 195.220.108.108
rpmfind.net|194.199.20.114|:21 に接続しています... 接続しました。
anonymous としてログインしています... ログインしました!
==> SYST ... 完了しました。    ==> PWD ... 完了しました。
==> TYPE I ... 完了しました。  ==> CWD /linux/fedora/extras/6/SRPMS ... 完了しました。
==> PASV ... 完了しました。    ==> RETR tripwire-2.4.1.1-1.fc6.src.rpm ... 完了 しました。
長さ: 756,079 (738K) (確証はありません)

100%[==============================>] 756,079       52.17K/s    ETA 00:00

02:27:44 (62.88 KB/s) - `tripwire-2.4.1.1-1.fc6.src.rpm' を保存しました [756079]
● 私の場合は最初に最小限のインストールとしているため、rebuild するためには次のパッケージが必要となります。各自の環境下で確認して足りないものをインストールしておいてください。
$ sudo apt-get install rpm-build
以下のパッケージが新たにインストールされます:
  patch rpm-build
$ sudo apt-get install openssl-devel
$ sudo apt-get install gcc
以下のパッケージが新たにインストールされます:
  binutils gcc gcc-cpp glibc-devel glibc-kernheaders
$ sudo apt-get install gcc-c++
以下のパッケージが新たにインストールされます:
  gcc-c++ libstdc++3-devel
$ sudo apt-get install bison
以下のパッケージが新たにインストールされます:
  bison m4
$ sudo apt-get install make   
● これでようやく準備が整いました。続いて rebuild して rpm パッケージを作ります。
$ rpm --rebuild tripwire-2.4.1.1-1.fc6.src.rpm
tripwire-2.4.1.1-1.fc6.src.rpm をインストール中です。
               :
(中略 しばらく時間がかかります)
               :
パッケージに未収録のファイルを検査中: /usr/lib/rpm/check-files
 /var/tmp/tripwire-2.4.1.1-1-root-pub
書き込み完了: /home/pub/rpm/RPMS/i386/tripwire-2.4.1.1-1.i386.rpm
実行中(%clean): /bin/sh -e /var/tmp/rpm-tmp.33874
+ umask 022
+ cd /home/pub/rpm/BUILD
+ cd tripwire-2.4.1.1
+ /bin/rm -rf /var/tmp/tripwire-2.4.1.1-1-root-pub
+ exit 0
実行中(--clean): /bin/sh -e /var/tmp/rpm-tmp.33874
+ umask 022
+ cd /home/pub/rpm/BUILD
+ rm -rf tripwire-2.4.1.1
+ exit 0
● 出来上がったパッケージをインストールします。
$ sudo rpm -Uvh /home/pub/rpm/RPMS/i386/tripwire-2.4.1.1-1.i386.rpm
Password:
準備中...                   ###################################### [100%]
   1:tripwire               ####################################### [100%]


● まず最初にサイトキーを作成します。
$ sudo /usr/sbin/twadmin -m G -S /etc/tripwire/site.key

(When selecting a passphrase, keep in mind that good passphrases typically
have upper and lower case letters, digits and punctuation marks, and are
at least 8 characters in length.)

Enter the site keyfile passphrase:    ← 任意のパスプレーズを入力
Verify the site keyfile passphrase:   ← 確認のためもう一度パスプレーズを入力
Generating key (this may take several minutes)...Key generation complete.
● ローカルキーを作成します。
$ sudo /usr/sbin/twadmin -m G -L /etc/tripwire/`hostname`-local.key

(When selecting a passphrase, keep in mind that good passphrases typically
have upper and lower case letters, digits and punctuation marks, and are
at least 8 characters in length.)

Enter the local keyfile passphrase:    ← 任意のパスプレーズを入力
Verify the local keyfile passphrase:   ← 確認のためもう一度パスプレーズを入力
Generating key (this may take several minutes)...Key generation complete.
● Tripwireのデフォルトの設定ファイルは tw.cfg ファイルで、これはセキュリティのため暗号署名されたファイルになります。 実際の設定にはまず暗号化されていない twcfg.txt で行い、その後このファイルを基に tw.cfg を生成します。
最初に設定ファイルを作成します。
$ sudo vi /etc/tripwire/twcfg.txt

ROOT                   =/usr/sbin
POLFILE                =/etc/tripwire/tw.pol
DBFILE                 =/var/lib/tripwire/$(HOSTNAME).twd
REPORTFILE             =/var/lib/tripwire/report/$(HOSTNAME)-$(DATE).twr
SITEKEYFILE            =/etc/tripwire/site.key
LOCALKEYFILE           =/etc/tripwire/$(HOSTNAME)-local.key
EDITOR                 =/bin/vi
LATEPROMPTING          =false
LOOSEDIRECTORYCHECKING =false   → true に変更
MAILNOVIOLATIONS       =true
EMAILREPORTLEVEL       =3
REPORTLEVEL            =3     →  4 に変更
MAILMETHOD             =SENDMAIL
SYSLOGREPORTING        =false  → true に変更
MAILPROGRAM            =/usr/sbin/sendmail -oi -t
● 今作成した設定ファイルを基に暗号署名ファイルを生成します。
$ sudo /usr/sbin/twadmin -m F -c /etc/tripwire/tw.cfg -S\
 /etc/tripwire/site.key /etc/tripwire/twcfg.txt
Please enter your site passphrase:  ← 先ほど作成したサイトパスを入力
Wrote configuration file: /etc/tripwire/tw.cfg
● テキストの設定ファイルを削除します。
$ sudo rm -f /etc/tripwire/twcfg.txt
● 再度設定し直したい場合には、次ぎのコマンドで復元することが出来ます。
$ sudo /usr/sbin/twadmin  -m f -c /etc/tripwire/tw.cfg > /etc/tripwire/twcfg.txt
● ポリシーファイルの作成 Tripwireでは、ポリシーファイルから作成したデータベースと、実際のファイル状態を比較することによってファイルの改竄がないかチェックします。
$ sudo vi /etc/tripwire/twpol.txt
● ここではあらかじめサンプルファイルが用意されていますので、そのまま vi を終了します。但しこのサンプルファイルが全て自分の環境に適応している訳ではありませんので、スクリプトによって最適化します。
$ sudo vi /etc/tripwire/twpolmake.pl  ← 以下のスクリプトを作成します
#!/usr/bin/perl
# Tripwire Policy File customize tool
# ----------------------------------------------------------------
# Copyright (C) 2003 Hiroaki Izumi
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
# ----------------------------------------------------------------
# Usage:
#    perl twpolmake.pl {Pol file}
# ----------------------------------------------------------------
#
$POLFILE=$ARGV[0];

open(POL,"$POLFILE") or die "open error: $POLFILE" ;
my($myhost,$thost) ;
my($sharp,$tpath,$cond) ;
my($INRULE) = 0 ;

while () {
    chomp;
    if (($thost) = /^HOSTNAME¥s*=¥s*(.*)¥s*;/) {
        $myhost = `hostname` ; chomp($myhost) ;
        if ($thost ne $myhost) {
            $_="HOSTNAME=¥"$myhost¥";" ;
        }
    }
    elsif ( /^{/ ) {
        $INRULE=1 ;
    }
    elsif ( /^}/ ) {
        $INRULE=0 ;
    }
    elsif ($INRULE == 1 and ($sharp,$tpath,$cond) =
         /^(¥s*¥#?¥s*)(¥/¥S+)¥b(¥s+->¥s+.+)$/) {
        $ret = ($sharp =~ s/¥#//g) ;
        if ($tpath eq '/sbin/e2fsadm' ) {
            $cond =~ s/;¥s+(tune2fs.*)$/; ¥#$1/ ;
        }
        if (! -s $tpath) {
            $_ = "$sharp#$tpath$cond" if ($ret == 0) ;
        }
        else {
            $_ = "$sharp$tpath$cond" ;
        }
    }
    print "$_¥n" ;
}
close(POL) ;
● このスクリプトを走らせます。
$ sudo sh -c 'perl /etc/tripwire/twpolmake.pl /etc/tripwire/twpol.txt >
                       /etc/tripwire/twpol.txt.new' 
● 最適化されたポリシーテキストファイルを基に、暗号署名ファイルを生成します。
$ sudo /usr/sbin/twadmin -m P -c /etc/tripwire/tw.cfg -p /etc/tripwire/tw.pol -S 
/etc/tripwire/site.key /etc/tripwire/twpol.txt.new  ← 一行で入力してください
Password:
Please enter your site passphrase:  ← 先ほど作成したサイトパスを入力
Wrote policy file: /etc/tripwire/tw.pol
● ポリシーテキストファイルはそのままで読めてしまうため削除しておきます。
$ sudo rm -f /etc/tripwire/twpol.txt
$ sudo rm -f /etc/tripwire/twpol.txt.new
● ポリシー(テキスト)ファイルを復元させる場合は
$ sudo /usr/sbin/twadmin -m p -c /etc/tripwire/tw.cfg -p /etc/tripwire/tw.pol
 -S /etc/tripwire/site.key > /etc/tripwire/twpol.txt  ← 一行で入力してください
● ポリシーファイルを生成したら、ポリシーファイルを基にデータベースを作成します。整合性チェックでは、このデータベースとチェック時のファイルが比較されます。
$ sudo /usr/sbin/tripwire  -m i -s -c /etc/tripwire/tw.cfg
Please enter your local passphrase:  ← 先ほどのローカルパスを入力します
● Tripwire を実行します。
$ sudo /usr/sbin/tripwire -m c -s -c /etc/tripwire/tw.cfg
Tripwire(R) 2.4.1 Integrity Check Report

Report generated by:          root
Report created on:            2008年01月27日 03時50分38秒
Database last updated on:     Never

==================================================
Report Summary:
==================================================

Host name:                    domain.name
Host IP address:              127.0.0.1
Host ID:                      None
Policy file used:             /etc/tripwire/tw.pol
Configuration file used:      /etc/tripwire/tw.cfg
Database file used:           /var/lib/tripwire/penguin.violet.twd
Command line used:            /usr/sbin/tripwire -m c -s -c /etc/tripwire/tw.cfg

==================================================
Rule Summary:
==================================================

---------------------------------------------------------------------
  Section: Unix File System
---------------------------------------------------------------------

  Rule Name                       Severity Level    Added    Removed  Modified
  ---------                       --------------    -----    -------  --------
  Invariant Directories           66                0        0        0
  Temporary directories           33                0        0        0
* Tripwire Data Files             100               1        0        0
  Critical devices                100               0        0        0
  (/proc/kcore)
  User binaries                   66                0        0        0
  Tripwire Binaries               100               0        0        0
  Libraries                       66                0        0        0
  Operating System Utilities      100               0        0        0
  File System and Disk Administraton Programs
                                  100               0        0        0
  Kernel Administration Programs  100               0        0        0
  Networking Programs             100               0        0        0
  System Administration Programs  100               0        0        0
  Hardware and Device Control Programs
                                  100               0        0        0
  System Information Programs     100               0        0        0
  Application Information Programs
                                  100               0        0        0
  Shell Related Programs          100               0        0        0
  Critical Utility Sym-Links      100               0        0        0
  Shell Binaries                  100               0        0        0
  Critical system boot files      100               0        0        0
  System boot changes             100               0        0        0
  OS executables and libraries    100               0        0        0
  Critical configuration files    100               0        0        0
  Security Control                100               0        0        0
  Login Scripts                   100               0        0        0
  Root config files               100               0        0        0

Total objects scanned:  11276
Total violations found:  1

=====================================================
Object Summary:
=====================================================

-------------------------------------------------------------------------------
# Section: Unix File System
-------------------------------------------------------------------------------

-------------------------------------------------------------------------------
Rule Name: Tripwire Data Files (/var/lib/tripwire)
Severity Level: 100
-------------------------------------------------------------------------------

Added:
"/var/lib/tripwire/domain.name.twd"

=========================================================
Error Report:
=========================================================

No Errors

-------------------------------------------------------------------------------
*** End of report ***

Tripwire 2.4 Portions copyright 2000 Tripwire, Inc. Tripwire is a registered
trademark of Tripwire, Inc. This software comes with ABSOLUTELY NO WARRANTY;
for details use --version. This is free software which may be redistributed
or modified only under certain conditions; see COPYING for details.
All rights reserved.
● ここで動作検証のため、次のようなファイルを作成します。中身は適当に書いておいてください。
$ sudo vi /root/test.txt

再度 Tripwire を走らせます。

$ sudo /usr/sbin/tripwire -m c -s -c /etc/tripwire/tw.cfg
Tripwire(R) 2.4.1 Integrity Check Report

Report generated by:          root
Report created on:            2008年01月27日 03時52分27秒
Database last updated on:     Never

==========================================================
Report Summary:
==========================================================

Host name:                    domain.name
Host IP address:              127.0.0.1
Host ID:                      None
Policy file used:             /etc/tripwire/tw.pol
Configuration file used:      /etc/tripwire/tw.cfg
Database file used:           /var/lib/tripwire/penguin.violet.twd
Command line used:            /usr/sbin/tripwire -m c -s -c /etc/tripwire/tw.cfg

==========================================================
Rule Summary:
==========================================================

-------------------------------------------------------------------------------
  Section: Unix File System
-------------------------------------------------------------------------------

  Rule Name                       Severity Level    Added    Removed  Modified
  ---------                       --------------    -----    -------  --------
  Invariant Directories           66                0        0        0
  Temporary directories           33                0        0        0
* Tripwire Data Files             100               1        0        0
  Critical devices                100               0        0        0
  (/proc/kcore)
  User binaries                   66                0        0        0
  Tripwire Binaries               100               0        0        0
  Libraries                       66                0        0        0
  Operating System Utilities      100               0        0        0
  File System and Disk Administraton Programs
                                  100               0        0        0
  Kernel Administration Programs  100               0        0        0
  Networking Programs             100               0        0        0
  System Administration Programs  100               0        0        0
  Hardware and Device Control Programs
                                  100               0        0        0
  System Information Programs     100               0        0        0
  Application Information Programs
                                  100               0        0        0
  Shell Related Programs          100               0        0        0
  Critical Utility Sym-Links      100               0        0        0
  Shell Binaries                  100               0        0        0
  Critical system boot files      100               0        0        0
  System boot changes             100               0        0        0
  OS executables and libraries    100               0        0        0
  Critical configuration files    100               0        0        0
  Security Control                100               0        0        0
  Login Scripts                   100               0        0        0
* Root config files               100               1        0        0

Total objects scanned:  11277
Total violations found:  2  ←  変更されたファイルを検知している

=========================================================
Object Summary:
=========================================================

-------------------------------------------------------------------------------
# Section: Unix File System
-------------------------------------------------------------------------------

-------------------------------------------------------------------------------
Rule Name: Tripwire Data Files (/var/lib/tripwire)
Severity Level: 100
-------------------------------------------------------------------------------

Added:
"/var/lib/tripwire/domain.name.twd"

-------------------------------------------------------------------------------
Rule Name: Root config files (/root)
Severity Level: 100
-------------------------------------------------------------------------------

Added:
"/root/test.txt"  ←  変更されたファイルを検知している

==========================================================
Error Report:
==========================================================

No Errors

-------------------------------------------------------------------------------
*** End of report ***

Tripwire 2.4 Portions copyright 2000 Tripwire, Inc. Tripwire is a registered
trademark of Tripwire, Inc. This software comes with ABSOLUTELY NO WARRANTY;
for details use --version. This is free software which may be redistributed
or modified only under certain conditions; see COPYING for details.
All rights reserved.

先ほど作ったテストファイルを消しておく。

$ sudo rm -f /root/test.txt
● シェルスクリプトを書いて cron で定期的に動かす。下記のスクリプトでは結果をファイルに書き出すようにしているが、ここはメールで送るようにするなり各自でお好きなようにどうぞ。
$ cd /usr/local/bin
$ sudo vi tripwire.sh
#!/bin/bash

PATH=/usr/sbin:/usr/bin:/bin
MDAY=`LC_ALL=C date "+%b %_d"`

# パスフレーズ設定
LOCALPASS=CvjY8K
SITEPASS=mJKp46dS

cd /etc/tripwire

# Tripwireチェック実行
tripwire -m c -s -c tw.cfg > /tmp/tripwire

mv /tmp/tripwire /tmp/"$MDAY"
cp /tmp/"$MDAY" /home/pub/security/tripwire/
rm -f /tmp/"$MDAY"

# ポリシーファイル最新化
twadmin -m p -c tw.cfg -p tw.pol -S site.key > twpol.txt
perl twpolmake.pl twpol.txt > twpol.txt.new
twadmin -m P -c tw.cfg -p tw.pol -S site.key -Q $SITEPASS twpol.txt.new > /dev/null
rm -f twpol.txt*
rm -f *.bak

# データベース最新化
rm -f /var/lib/tripwire/*.twd*
tripwire -m i -s -c tw.cfg -P $LOCALPASS
● 実行権限を付与する。
$ sudo chmod 700 /usr/local/bin/tripwire.sh
● このスクリプトを実行すると、/home/user/security/tripwire/ 以下に "Mar 21" というように日付のファイル名で結果が書き込まれる。動作を確認したら cron に登録しておく。
$ sudo crontab -e
00 7 * * *      /usr/local/bin/tripwire.sh

rootkit検知ツール(chkrootkit) の導入

最終更新日 2008.02.01
● サーバへの侵入を計る rootkit を検知する chkrootkit を導入する。 chkrootkit.org からダウンロード先を辿り、最新ファイルを落とす。
$ cd rpm/SOURCES/
$ wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz
--04:02:17--  ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz
           => `chkrootkit.tar.gz'
ftp.pangeia.com.br をDNSに問いあわせています... 200.155.17.114
ftp.pangeia.com.br|200.155.17.114|:21 に接続しています... 接続しました。
anonymous としてログインしています... ログインしました!
==> SYST ... 完了しました。    ==> PWD ... 完了しました。
==> TYPE I ... 完了しました。  ==> CWD /pub/seg/pac ... 完了しました。
==> PASV ... 完了しました。    ==> RETR chkrootkit.tar.gz ... 完了しました。
長さ: 38,323 (37K) (確証はありません)

100%[====================================>] 38,323        35.64K/s

04:02:23 (35.57 KB/s) - `chkrootkit.tar.gz' を保存しました [38323]
● rpm でインストールしたかったのだが、gnome やら Xorg で依存関係が出たため(サーバには X をインストールしていないため)ソースからのインストールにする。
$ cd ../BUILD/
$ tar zxvf ../SOURCES/chkrootkit.tar.gz
chkrootkit-0.48
chkrootkit-0.48/ACKNOWLEDGMENTS
chkrootkit-0.48/check_wtmpx.c
chkrootkit-0.48/chkdirs.c
chkrootkit-0.48/chklastlog.c
chkrootkit-0.48/chkproc.c
chkrootkit-0.48/chkrootkit
chkrootkit-0.48/chkrootkit.lsm
chkrootkit-0.48/chkutmp.c
chkrootkit-0.48/chkwtmp.c
chkrootkit-0.48/COPYRIGHT
chkrootkit-0.48/ifpromisc.c
chkrootkit-0.48/Makefile
chkrootkit-0.48/README
chkrootkit-0.48/README.chklastlog
chkrootkit-0.48/README.chkwtmp
chkrootkit-0.48/strings.c
$ cd chkrootkit-0.48
$ sudo make sense
Password:
gcc -DHAVE_LASTLOG_H -o chklastlog chklastlog.c
gcc -DHAVE_LASTLOG_H -o chkwtmp chkwtmp.c
gcc -DHAVE_LASTLOG_H   -D_FILE_OFFSET_BITS=64 -o ifpromisc ifpromisc.c
gcc  -o chkproc chkproc.c
gcc  -o chkdirs chkdirs.c
gcc  -o check_wtmpx check_wtmpx.c
gcc -static  -o strings-static strings.c
gcc  -o chkutmp chkutmp.c
● 早速走らせてみる
$ sudo ./chkrootkit
ROOTDIR is `/'
Checking `amd'... not found
Checking `basename'... not infected
Checking `biff'... not found
Checking `chfn'... not infected
Checking `chsh'... not infected
Checking `cron'... not infected
Checking `crontab'... not infected
Checking `date'... not infected
Checking `du'... not infected
Checking `dirname'... not infected
Checking `echo'... not infected
Checking `egrep'... not infected
Checking `env'... not infected
Checking `find'... not infected
Checking `fingerd'... not found
Checking `gpm'... not found
Checking `grep'... not infected
Checking `hdparm'... not infected
Checking `su'... not infected
Checking `ifconfig'... not infected
Checking `inetd'... not tested
Checking `inetdconf'... not found
Checking `identd'... not found
Checking `init'... not infected
Checking `killall'... not infected
Checking `ldsopreload'... not infected
Checking `login'... not infected
Checking `ls'... not infected
(以下 略)

本体をコピーしておく

$ sudo cp -p chkrootkit /usr/local/bin/
● rootkit が検出されない場合は ”not infected”、された場合は "INFECTED" と表示される。
スクリプトを書いて rootkit が検知された場合ファイルに書き出すようにする。
$ sudo cp -p chkrootkit /usr/local/bin/

$ sudo vi /usr/local/bin/chkrootkit.sh
#!/bin/bash

/usr/local/bin/chkrootkit > /var/log/chkrootkit.log 2>&1

TMPLOG='mktemp'
grep INFECTED /var/log/chkrootkit.log > $TMPLOG
if [ ! -z "$(grep 465 $TMPLOG)" ]; then
        if [ -z $(/usr/sbin/lsof -i:465 | grep bindshell) ]; then
                sed -i '/465/d' $TMPLOG
        fi
fi

if [ -s $TMPLOG ]; then
        cat $TMPLOG >> /home/user/security/chkrootkit_report ← ファイルに出力させる
fi

rm -f $TMPLOG
● 実行権限を付ける。
$ sudo chmod 700 /usr/local/bin/chkrootkit.sh
● cron で自動実行させる。
$ sudo crontab -e
00 06 * * *     /usr/local/bin/chkrootkit.sh

RootkitHunter(rkhunter) の導入

最終更新日 2008.02.01
● chkrootkit は導入しているのですが、こちらも何か簡単そうでよさげだったのでインストールしてみました。

こちらから(http://rkhunter.sourceforge.net/)最新版(rkhunter-1.3.0.tar.gz)を落としてきます。(~/rpm/SOUSES にダウンロードすると仮定します)
$ cd rpm/SOURCES/
$ wget http://downloads.sourceforge.net/rkhunter/
          rkhunter-1.3.0.tar.gz?modtime=1190502076&big_mirror=0
[1] 28844
$ --00:26:57--  http://downloads.sourceforge.net/rkhunter/
          rkhunter-1.3.0.tar.gz?modtime=1190502076
       => `rkhunter-1.3.0.tar.gz?modtime=1190502076'sudo vi /usr/local/bin/chkrootkit.sh
downloads.sourceforge.net をDNSに問いあわせています... 66.35.250.203
downloads.sourceforge.net|66.35.250.203|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 302 Found
場所: http://jaist.dl.sourceforge.net/sourceforge/rkhunter/rkhunter-1.3.0.tar.gz [続く]
--00:26:57--  http://jaist.dl.sourceforge.net/sourceforge/rkhunter/rkhunter-1.3.0.tar.gz
           => `rkhunter-1.3.0.tar.gz'
jaist.dl.sourceforge.net をDNSに問いあわせています... 150.65.7.130
jaist.dl.sourceforge.net|150.65.7.130|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 252,011 (246K) [application/x-gzip]

100%[====================================>] 252,011      798.21K/s

00:26:58 (797.35 KB/s) - `rkhunter-1.3.0.tar.gz' を保存しました [252011/252011]

[1]+  Done wget http://downloads.sourceforge.net/rkhunter/
rkhunter-1.3.0.tar.gz?modtime=1190502076

$ cd ../BUILD/
$ tar zxvf ../SOURCES/rkhunter-1.3.0.tar.gz

解凍して出来た spec file を利用して rpm パッケージを作ります。

$ cd rkhunter-1.3.0/
$ cp files/rkhunter.spec ../../SPECS/
$ cd
$ rpm -bb rpm/SPECS/rkhunter.spec
実行中(%prep): /bin/sh -e /var/tmp/rpm-tmp.20048
+ umask 022
+ cd /home/pub/rpm/BUILD
+ cd /home/pub/rpm/BUILD
+ rm -rf rkhunter-1.3.0
+ /bin/gzip -dc /home/pub/rpm/SOURCES/rkhunter-1.3.0.tar.gz
+ tar -xf -
+ STATUS=0
+ '[' 0 -ne 0 ']'
+ cd rkhunter-1.3.0
++ /usr/bin/id -u
+ '[' 500 = 0 ']'
++ /usr/bin/id -u
+ '[' 500 = 0 ']'
+ /bin/chmod -Rf a+rX,u+w,g-w,o-w .
+ exit 0
実行中(%build): /bin/sh -e /var/tmp/rpm-tmp.20048
+ umask 022
+ cd /home/pub/rpm/BUILD
+ cd rkhunter-1.3.0
+ exit 0
実行中(%install): /bin/sh -e /var/tmp/rpm-tmp.20048
+ umask 022
+ cd /home/pub/rpm/BUILD
+ cd rkhunter-1.3.0
+ sh ./installer.sh --layout RPM --install

Checking system for:
 Rootkit Hunter installer files: found. OK
 Available file retrieval tools:
    wget: found. OK
Starting installation/update

Checking installation directories:
 Directory /var/tmp/rkhunter-1.3.0/usr/local/share/doc/rkhunter-1.3.0: creating: OK.
 Directory /var/tmp/rkhunter-1.3.0/usr/local/share/man/man8: creating: OK.
 Directory /var/tmp/rkhunter-1.3.0/etc: creating: OK.
 Directory /var/tmp/rkhunter-1.3.0/usr/local/bin: creating: OK.
 Directory /var/tmp/rkhunter-1.3.0/usr/local/lib: creating: OK.
 Directory /var/tmp/rkhunter-1.3.0/var/lib: creating: OK.
 Directory /var/tmp/rkhunter-1.3.0/usr/local/lib/rkhunter/scripts: creating: OK. 
 Directory /var/tmp/rkhunter-1.3.0/var/lib/rkhunter/db: creating: OK.
 Directory /var/tmp/rkhunter-1.3.0/var/lib/rkhunter/tmp: creating: OK.
 Directory /var/tmp/rkhunter-1.3.0/var/lib/rkhunter/db/i18n: creating: OK.
 Installing check_modules.pl: OK.
 Installing check_update.sh: OK.
 Installing check_port.pl: OK.
 Installing filehashmd5.pl: OK.
 Installing filehashsha1.pl: OK.
 Installing showfiles.pl: OK.
 Installing stat.pl: OK.
 Installing readlink.sh: OK.
 Installing backdoorports.dat: OK.
 Installing mirrors.dat: OK.
 Installing os.dat: OK.
 Installing programs_bad.dat: OK.
 Installing programs_good.dat: OK.
 Installing defaulthashes.dat: OK.
 Installing md5blacklist.dat: OK.
 Installing suspscan.dat: OK.
 Installing rkhunter.8: OK.
 Installing ACKNOWLEDGMENTS: OK.
 Installing CHANGELOG: OK.
 Installing FAQ: OK.
 Installing LICENSE: OK.
 Installing README: OK.
 Installing WISHLIST: OK.
 Installing language support files: OK.
 Installing rkhunter: OK.
 Installing rkhunter.conf: OK.
Installation finished.
+ /bin/mkdir -p /var/tmp/rkhunter-1.3.0//etc/cron.daily
+ /bin/cat
++ uname -n
+ /bin/chmod a+rwx,g-w,o-rwx /var/tmp/rkhunter-1.3.0/etc/cron.daily/01-rkhunter
+ /usr/lib/rpm/brp-compress
+ /usr/lib/rpm/brp-strip
+ /usr/lib/rpm/brp-strip-shared
+ /usr/lib/rpm/brp-strip-static-archive
+ /usr/lib/rpm/brp-strip-comment-note
ファイルの処理中: rkhunter-1.3.0-1
パッケージに未収録のファイルを検査中: /usr/lib/rpm/check-files /var/tmp/rkhunter-1.3.0
書き込み完了: /home/pub/rpm/RPMS/noarch/rkhunter-1.3.0-1.noarch.rpm
実行中(%clean): /bin/sh -e /var/tmp/rpm-tmp.12777
+ umask 022
+ cd /home/pub/rpm/BUILD
+ cd rkhunter-1.3.0
+ '[' /var/tmp/rkhunter-1.3.0 = / ']'
+ rm -rf /var/tmp/rkhunter-1.3.0
+ exit 0

出来た rpm パッケージをインストールしますが、
binutils が必要になりますのでなければ入れておきます。

$ sudo apt-get install binutils

$ sudo rpm -Uvh /home/pub/rpm/RPMS/noarch/rkhunter-1.3.0-1.noarch.rpm
準備中...                   ###################################### [100%]
   1:rkhunter               ###################################### [100%]
● データベースのアップデートをします。
$ sudo /usr/local/bin/rkhunter --update [ Rootkit Hunter version 1.3.0 ] Checking rkhunter data files... Checking file mirrors.dat [ No update ] Checking file programs_bad.dat [ No update ] Checking file backdoorports.dat [ No update ] Checking file suspscan.dat [ No update ] Checking file i18n/cn [ Updated ] Checking file i18n/en [ Updated ] Checking file i18n/zh [ Updated ] Checking file i18n/zhutf [ Updated ]
● さっそく動かしてみます。
$ sudo /usr/local/bin/rkhunter -c --createlogfile --skip-keypress
[ Rootkit Hunter version 1.3.0 ]

Checking system commands...

  Performing 'strings' command checks
    Checking 'strings' command                               [ OK ]

  Performing 'shared libraries' checks
    Checking for preloading variables                        [ None found ]
    Checking for preload file                                [ Not found ]
    Checking LD_LIBRARY_PATH variable                        [ Not found ]

  Performing file properties checks
    Checking for prerequisites                               [ Warning ]
    /bin/awk                                                 [ OK ]
    /bin/basename                                            [ OK ]
    /bin/bash                                                [ OK ]
    /bin/cat                                                 [ OK ]
    /bin/chmod                                               [ OK ]
    /bin/chown                                               [ OK ]
    /bin/cp                                                  [ OK ]
    :
    (略)   
    :
  Performing filesystem checks
    Checking /dev for suspicious file types                  [ None found ]
    Checking for hidden files and directories                [ Warning ]
    
Checking application versions...

    Checking version of GnuPG                                [ OK ]
    Checking version of Bind DNS                             [ OK ]
    Checking version of OpenSSL                              [ OK ]
    Checking version of OpenSSH                              [ OK ]


System checks summary
=====================

File properties checks...
    Required commands check failed
    Files checked: 120
    Suspect files: 5

Rootkit checks...
    Rootkits checked : 114
    Possible rootkits: 0

Applications checks...
    Applications checked: 4
    Suspect applications: 0

The system checks took: 43 seconds

All results have been written to the logfile (/var/log/rkhunter.log)

One or more warnings have been found while checking the system.
Please check the log file (/var/log/rkhunter.log)

と結果が表示されればOKですが、いくつか [ Warning ] が出てますねえ。
● /etc/rkhunter.conf を自分の環境に合わせて修正する。
最後の方に出ている
Checking for hidden files and directories                [ Warning ]
を修正していきます。ログの一番最後に書いてあるように /var/log/rkhunter.log を見ると

Warning: Hidden directory found: /dev/.udev
Warning: Hidden file found: /usr/share/man/man1/..1.gz:
      gzip compressed data, from Unix, max compression

と出ています。これを参考に config file の次の部分を捜し出し修正します。

$ sudo vi /etc/rkhunter.conf
#ALLOWHIDDENDIR=/dev/.udev   ← # を外す

#ALLOWHIDDENFILE=/usr/share/man/man1/..1.gz   ← # を外す

もう一度動かします。
$ sudo /usr/local/bin/rkhunter -c --createlogfile --skip-keypress
           :
         (中略)
           :
  Performing filesystem checks
    Checking /dev for suspicious file types                  [ None found ]
    Checking for hidden files and directories                [ None found ]

これで  [ Warning ] が消えました。
次に同じ要領で Performing file properties checks に出ている [ Warning ] 
 も rkhunter.conf を修正しておきます。             
● 後は crontab に書き込むか、下記のスクリプトを参考にして自動で動かすようにします。
  
$ cd /usr/local/bin
$ sudo vi rkhunter.sh
#!/bin/bash
/usr/local/bin/rkhunter --update
/usr/local/bin/rkhunter -c --createlogfile --skip-keypress --nocolors
 > /home/pub/security/rkhunter.log

$ sudo chmod 700 rkhunter.sh
$ sudo chmod 666 /home/pub/rkhunter.log
● cron で動かす。
$ sudo crontab -e

30 6 * * * /usr/local/bin/rkhunter.sh

# これで毎日6時半に rkhunter.sh が実行されます。

不正侵入検知システム(Snort と SnortSnarf) の導入

最終更新日 2008.02.01
● Snortのインストールと初期設定。最初に Snort の公式サイトから最新版を落としてくる。
$ cd rpm/SOURCES/
$ wget http://www.snort.org/dl/current/snort-2.8.0.1.tar.gz
--13:35:35--  http://www.snort.org/dl/current/snort-2.8.0.1.tar.gz
           => `snort-2.8.0.1.tar.gz'
www.snort.org をDNSに問いあわせています... 199.107.65.178
www.snort.org|199.107.65.178|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 4,331,731 (4.1M) [application/x-gzip]

100%[=============================>] 4,331,731    150.44K/s    ETA 00:00

13:36:09 (126.87 KB/s) - `snort-2.8.0.1.tar.gz' を保存しました [4331731/4331731]
● libpcap ライブラリが必要とされるので、なければ apt-get install しておく。また同様に autoconf automake libpcre libpcre-devel も必要なので同じくインストールしておく。
$ rpm -q libpcap autoconf automake pcre pcre-devel
libpcap-0.9.3-0vl1    ← あればOKだが、なければ下記のようにインストールしておく
パッケージ autoconf はインストールされていません。
パッケージ automake はインストールされていません。
パッケージ libpcre はインストールされていません。
パッケージ libpcre-devel はインストールされていません。

$ sudo apt-get install autoconf automake pcre pcre-devel
パッケージリストを読みこんでいます... 完了
依存情報ツリーを作成しています... 完了
以下のパッケージが新たにインストールされます:
  autoconf automake pcre pcre-devel
アップグレード: 0 個, 新規インストール: 4 個, 削除: 0 個, 保留: 0 個
1492kB/1628kB のアーカイブを取得する必要があります。
展開後に 4235kB のディスク容量が追加消費されます。
取得:1 http://www.t.ring.gr.jp 4.2/i386/main pcre-devel 6.6-0vl1.2 [290kB]
取得:2 http://www.t.ring.gr.jp 4.2/i386/main autoconf 2.59-2vl4 [650kB]
取得:3 http://www.t.ring.gr.jp 4.2/i386/main automake 1.9.6-0vl1 [552kB]
1492kB を 2s 秒で取得しました (521kB/s)
変更を適用しています...
準備中...                   ##################################### [100%]
   1:pcre                   ##################################### [ 25%]
   2:pcre-devel             ##################################### [ 50%]
   3:autoconf               ##################################### [ 75%]
   4:automake               ##################################### [100%]
完了
● 落としてきた tarボールを利用して Snort の rpm パッケージを作成する
$ rpmbuild -tb snort-2.8.0.1.tar.gz
実行中(%prep): /bin/sh -e /var/tmp/rpm-tmp.44902
+ umask 022
+ cd /home/pub/rpm/BUILD
+ cd /home/pub/rpm/BUILD
+ rm -rf snort-2.8.0.1
+ /bin/gzip -dc /home/pub/rpm/SOURCES/snort-2.8.0.1.tar.gz
      :
( 中略 )
      :
 パッケージに未収録のファイルを検査中: /usr/lib/rpm/check-files
                 /var/tmp/snort-2.8.0.1-1-root-pub
書き込み完了: /home/pub/rpm/RPMS/i386/snort-2.8.0.1-1.i386.rpm
実行中(%clean): /bin/sh -e /var/tmp/rpm-tmp.75228
+ umask 022
+ cd /home/pub/rpm/BUILD
+ cd snort-2.8.0.1
+ /bin/rm -rf /var/tmp/snort-2.8.0.1-1-root-pub
+ exit 0     
● 出来た rpm パッケージをインストールする。
$ sudo rpm -Uvh /home/pub/rpm/RPMS/i386/snort-2.8.0.1-1.i386.rpmPassword:
準備中...                   ##################################### [100%]
   1:snort                  ##################################### [100%]
● 落としてきたファイルを削除しておく
$ rm -f snort-*
● Snort の設定をする
$ sudo vi /etc/snort/snort.conf
var HOME_NET any
↓
var HOME_NET 192.168.3.0/24    ← 内部ネットワークアドレスを指定
var EXTERNAL_NET any
↓
var EXTERNAL_NET !$HOME_NET    ← 内部からのアクセスを不正アクセスとして扱わない
● 私の環境では外部向け NIC を eth1 としているため、Snort の監視先を変更する。
$ sudo vi /etc/sysconfig/snort
INTERFACE=eth0
      ↓
INTERFACE=eth1  ← ご自分の環境に合わせてください
● Snort のルールファイルを入手して展開、出来たルールを /etc/snort/rules/ にコピーしておく。
$ cd rpm/SOURCES/
$ wget http://www.snort.org/pub-bin/downloads.cgi/Download/vrt_os/
snortrules-snapshot-CURRENT.tar.gz
--14:11:45--  http://www.snort.org/pub-bin/downloads.cgi/Download/vrt_os/
snortrules-snapshot-CURRENT.tar.gz
           => `snortrules-snapshot-CURRENT.tar.gz'
www.snort.org をDNSに問いあわせています... 199.107.65.178
www.snort.org|199.107.65.178|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 特定できません [text/html]

    [  <=>                                               ] 9,798         47.02K/s

14:11:46 (46.82 KB/s) - `snortrules-snapshot-CURRENT.tar.gz' を保存しました [9798]

$ cd ../BUILD/
$ tar zxvf ../SOURCES/snortrules-snapshot-CURRENT.tar.gz

gzip: stdin: not in gzip format
tar: Child returned status 1
tar: 処理中にエラーが起きましたが、最後まで処理してからエラー終了させました

と、私の環境下ではエラーとなってしまう。

$ file ../SOURCES/snortrules-snapshot-CURRENT.tar.gz
 ../SOURCES/snortrules-snapshot-CURRENT.tar.gz: HTML document text
と、なにやら落としてきたファイルがおかしいので、次から落とし直す。

$ wget http://swing.jakou.com/vine/snortrules-snapshot-CURRENT.tar.gz
--22:46:08--  http://swing.jakou.com/vine/snortrules-snapshot-CURRENT.tar.gz
           => `snortrules-snapshot-CURRENT.tar.gz'
swing.jakou.com をDNSに問いあわせています... 125.100.100.15
swing.jakou.com|125.100.100.15|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 3,016,868 (2.9M) [application/x-tar]

100%[====================================>] 3,016,868      1.57M/s

22:46:10 (1.57 MB/s) - `snortrules-snapshot-CURRENT.tar.gz' を保存しました
 [3016868/3016868]

$ cd ../BUILD/

念のため再度落としてきたファイルをチェックする。

$ file ../SOURCES/snortrules-snapshot-CURRENT.tar.gz
   ../SOURCES/snortrules-snapshot-CURRENT.tar.gz: gzip compressed data, was
    "snortrules-snapshot-CURRENT_s.t", from Unix

今度は OK

$ tar zxvf ../SOURCES/snortrules-snapshot-CURRENT.tar.gz

● 展開して出来たルールをコピーしておく。
$ sudo cp -r rules/* /etc/snort/rules/
● 展開元のディレクトリとダウンロードしてきたファイルを削除しておく。
$ rm -rf doc/ rules/ so_rules/ etc/
$ rm -f ../SOURCES/snortrules-snapshot-CURRENT.tar.gz
● もう1つのルールも同じように処理しておく。
$ cd ../SOURCES/
$ wget http://www.snort.org/pub-bin/downloads.cgi/Download/comm_rules/
Community-Rules-CURRENT.tar.gz
--22:56:08--  http://www.snort.org/pub-bin/downloads.cgi/Download/
comm_rules/Community-Rules-CURRENT.tar.gz
           => `Community-Rules-CURRENT.tar.gz'
www.snort.org をDNSに問いあわせています... 199.107.65.178
www.snort.org|199.107.65.178|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 112,052 (109K) [application/octet-stream]

100%[====================================>] 112,052       48.58K/s

22:56:11 (48.46 KB/s) - `Community-Rules-CURRENT.tar.gz' を保存しました
 [112052/112052]

$ cd ../BUILD/
$ tar zxvf ../SOURCES/Community-Rules-CURRENT.tar.gz
$ sudo cp -r rules/* /etc/snort/rules/

$ rm -rf rules/ docs/
$ rm -f ../SOURCES/Community-Rules-CURRENT.tar.gz
● Snort を起動させる。
$ sudo /etc/rc.d/init.d/snortd start
Starting snort:                                            [  OK  ]
● システム起動時に自動で立ち上がるようにする。
$ sudo /sbin/chkconfig snortd on
● テスト項目を追加して Snort の動作を確認する。
$ sudo vi /etc/snort/snort.conf

以下を最終行へ追加するのと同時に、
さきほど変更した /etc/sysconfig/snort の INTERFACE=eth1 を eth0 に戻しておく。

alert icmp $HOME_NET any -> $HOME_NET any (msg:"ICMP traffic";sid:777;)
 ← 最下行に追加

$ sudo /etc/rc.d/init.d/snortd restart
Stopping snort:                                            [  OK  ]
Starting snort:                                            [  OK  ]
サーバとは別のマシンからサーバへ ping を打ってみる。
% ping 192.168.3.1
PING 192.168.3.1 (192.168.3.1) 56(84) bytes of data.
64 bytes from 192.168.3.1: icmp_seq=1 ttl=64 time=0.895 ms
64 bytes from 192.168.3.1: icmp_seq=2 ttl=64 time=0.644 ms
64 bytes from 192.168.3.1: icmp_seq=3 ttl=64 time=0.676 ms
● サーバでのログを確認する。
$ sudo tail -f /var/log/snort/alert
01/31-00:24:54.554555  [**] [1:777:0] ICMP traffic [**] [Priority: 0]
 {ICMP} 192.168.3.253 -> 192.168.3.1
01/31-00:24:54.554837  [**] [1:777:0] ICMP traffic [**] [Priority: 0]
 {ICMP} 192.168.3.1 -> 192.168.3.253
01/31-00:24:55.559763  [**] [1:777:0] ICMP traffic [**] [Priority: 0]
 {ICMP} 192.168.3.253 -> 192.168.3.1
01/31-00:24:55.559985  [**] [1:777:0] ICMP traffic [**] [Priority: 0]
 {ICMP} 192.168.3.1 -> 192.168.3.253
01/31-00:24:56.563761  [**] [1:777:0] ICMP traffic [**] [Priority: 0]
 {ICMP} 192.168.3.253 -> 192.168.3.1

このようにログが記録されていればOK。確認したら先ほど追加した1行を削除するのと、
/etc/sysconfig/snort も元に戻しておく。
その後 Snort を再起動しておく。 

$ sudo vi /etc/snort/snort.conf
alert icmp $HOME_NET any -> $HOME_NET any (msg:"ICMP traffic";sid:777;) ← 削除する
$ sudo /etc/rc.d/init.d/snortd restart
Stopping snort:                                            [  OK  ]
Starting snort:                                            [  OK  ]
● ログの表示ツール SnortSnarf をインストールする。Perlモジュール「Time::JulianDay」が必要となるのであらかじめインストールしておく。
$ sudo apt-get install perl-Time-modules
Password:
パッケージリストを読みこんでいます... 完了
依存情報ツリーを作成しています... 完了
以下のパッケージが新たにインストールされます:
  perl-Time-modules
アップグレード: 0 個, 新規インストール: 1 個, 削除: 0 個, 保留: 0 個
35.9kB のアーカイブを取得する必要があります。
展開後に 68.0kB のディスク容量が追加消費されます。
取得:1 http://www.t.ring.gr.jp 4.2/i386/plus perl-Time-modules 2003.1126-0vl1 [35.9kB]
35.9kB を 1s 秒で取得しました (35.6kB/s)
変更を適用しています...
準備中...                   ##################################### [100%]
   1:perl-Time-modules      #################################### [100%]
完了
● SnortSnarf をダウンロードしてきて展開しておく。
$ cd rpm/SOURCES
$ wget http://www.snort.org/dl/contrib/data_analysis/snortsnarf/
SnortSnarf-050314.1.tar.gz
--00:42:04--  http://www.snort.org/dl/contrib/data_analysis/snortsnarf/
SnortSnarf-050314.1.tar.gz
           => `SnortSnarf-050314.1.tar.gz'
www.snort.org をDNSに問いあわせています... 199.107.65.178
www.snort.org|199.107.65.178|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 144,103 (141K) [application/x-gzip]

100%[====================================>] 144,103       99.20K/s

00:42:06 (99.02 KB/s) - `SnortSnarf-050314.1.tar.gz' を保存しました [144103/144103]

$ cd ../BUILD/
$ tar zxvf ../SOURCES/SnortSnarf-050314.1.tar.gz
● SnortSnarf をインストールするディレクトリを作成してコピーしておく。
$ sudo mkdir /usr/local/snortsnarf
$ sudo cp SnortSnarf-050314.1/snortsnarf.pl /usr/local/snortsnarf/

$ sudo cp -r SnortSnarf-050314.1/include/ /usr/local/snortsnarf/
展開したディレクトリと落としてきたファイルを削除しておく。
$ rm -rf SnortSnarf-050314.1/
$ rm -f ../SOURCES/SnortSnarf-050314.1.tar.gz
● SnortSnarf の設定。このままだと最初に SnortSnarf を実行したときに下記のようなエラーが出るため次のファイルを編集しておく。
Using an array as a reference is deprecated at include/SnortSnarf/
HTMLMemStorage.pm line 290.
Using an array as a reference is deprecated at include/SnortSnarf/
HTMLAnomMemStorage.pm line 266.

$ sudo vi /usr/local/snortsnarf/include/SnortSnarf/HTMLMemStorage.pm
return @arr->[($first-1)..$end]; 290行目 "->" を削除する
            ↓
return @arr[($first-1)..$end];
$ sudo vi /usr/local/snortsnarf/include/SnortSnarf/HTMLAnomMemStorage.pm
return @arr->[($first-1)..$end]; 266行目 "->" を削除する
            ↓
return @arr[($first-1)..$end];
● SnortSnarf の HTML 出力先ディレクトリを作成する。
最初に apache2 をインストールしておきます。
$ sudo apt-get install apache2 Password:
パッケージリストを読みこんでいます... 完了
依存情報ツリーを作成しています... 完了
以下の追加パッケージがインストールされます:
  apr apr-util
以下のパッケージが新たにインストールされます:
  apache2 apr apr-util
アップグレード: 0 個, 新規インストール: 3 個, 削除: 0 個, 保留: 0 個
1430kB のアーカイブを取得する必要があります。
展開後に 3573kB のディスク容量が追加消費されます。
続行しますか? [Y/n]y
取得:1 http://www.t.ring.gr.jp 4.2/i386/main apr 1.2.7-0vl1 [114kB]
取得:2 http://www.t.ring.gr.jp 4.2/i386/main apr-util 1.2.7-0vl2 [66.0kB]
取得:3 http://www.t.ring.gr.jp 4.2/i386/updates apache2 2.2.3-0vl3.4 [1249kB]
1430kB を 2s 秒で取得しました (535kB/s)
変更を適用しています...
準備中...                   ###################################### [100%]
   1:apr                    ###################################### [ 33%]
   2:apr-util               ###################################### [ 67%]
   3:apache2                ##################################### [100%]
完了

出力先ディレクトリを作成する。
$ sudo mkdir /var/www/snort
● SnortSnarf 用のWebサーバー設定ファイルを作成して httpd を再起動する。
$ sudo vi /etc/apache2/conf.d/snort.conf
Alias /snort /var/www/snort

        Deny from all
        Allow from 127.0.0.1
        Allow from 192.168.3.0/24  ← 内部のネットワークアドレスを記入

上記は内部からのみアクセス出来るようにした場合。外部からのアクセスを許す場合は下記参照。

    Order deny,allow
    Deny from All
    Allow from All
    Allow from ::1

$ sudo /etc/rc.d/init.d/apache2 restart
httpdを停止中:                                             [  OK  ]
httpdを起動中:                                             [  OK  ]
● SnortSnarf のスクリプトを作成。
$ cd /usr/local/bin

$ sudo vi snortsnarf.sh
#!/bin/bash

cd /usr/local/snortsnarf
if [ -s /var/log/snort/alert ]; then
        if [ -s /var/log/snort/portscan.log ]; then
                ./snortsnarf.pl -dns -d /var/www/snort /var/log/snort/alert
                 /var/log/snort/portscan.log
        else
                ./snortsnarf.pl -dns -d /var/www/snort /var/log/snort/alert
        fi
fi

$ sudo chmod 700 snortsnarf.sh  ← 実行権限を与える
● SnortSnarf を実行してブラウザから表示できるか確認する。
$ sudo ./snortsnarf.sh

http://192.168.3.1/snort/ にアクセスして下記のように表示されればOK。


● SnortSnarf を日本語化する。
$ cd /usr/local/snortsnarf/include/SnortSnarf/
$ sudo mv HTMLOutput.pm HTMLOutput.pm.org ← デフォルトのHTMLOutput.pmをリネーム

$ sudo wget http://mt-fuji.ddo.jp/~fujito/Linux/secu_soft/s2/HTMLOutput.pm
--16:51:32--  http://mt-fuji.ddo.jp/~fujito/Linux/secu_soft/s2/HTMLOutput.pm
           => `HTMLOutput.pm'
mt-fuji.ddo.jp をDNSに問いあわせています... 58.190.0.92
mt-fuji.ddo.jp|58.190.0.92|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 86,832 (85K) [text/plain]

100%[========================================>] 86,832       527.70K/s

16:51:32 (526.06 KB/s) - `HTMLOutput.pm' を保存しました [86832/86832]
● 実際に SnortSnarf が日本語化出来たか確認する。
$ cd /usr/local/bin
$ sudo ./snortsnarf.sh

http://192.168.3.1/snort/  にアクセスする。下記のように日本語表示になっているのを確認。


● SnortSnarf を定期的に自動実行するように設定する。
$ sudo crontab -e
00 * * * *      /usr/local/bin/snortsnarf.sh   ← SnortSnarfを1時間ごとに実行する
● SnortSnarf のルールファイルを自動更新する。
$ cd ~/rpm/SOURCES
$ wget http://jaist.dl.sourceforge.net/sourceforge/oinkmaster/oinkmaster-2.0.tar.gz
--17:00:20--  http://jaist.dl.sourceforge.net/sourceforge/oinkmaster/oinkmaster-2.0.tar.gz
           => `oinkmaster-2.0.tar.gz'
jaist.dl.sourceforge.net をDNSに問いあわせています... 150.65.7.130
jaist.dl.sourceforge.net|150.65.7.130|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 80,111 (78K) [application/x-gzip]

100%[========================================>] 80,111        40.33K/s

17:00:26 (40.30 KB/s) - `oinkmaster-2.0.tar.gz' を保存しました [80111/80111]

$ cd ../BUILD/
$ tar zxvf ../SOURCES/oinkmaster-2.0.tar.gz
$ sudo cp oinkmaster-2.0/oinkmaster.pl /usr/local/bin/
$ sudo cp oinkmaster-2.0/oinkmaster.conf /etc/
$ sudo cp oinkmaster-2.0/oinkmaster.1 /usr/share/man/man1/
$ rm -rf oinkmaster-2.0
$ rm -f ../SOURCES/oinkmaster-2.0.tar.gz
● Oinkmaster の設定
$ sudo vi /etc/oinkmaster.conf
# Example for Snort-current ("current" means cvs snapshots).
# url = http://www.snort.org/pub-bin/oinkmaster.cgi//
snortrules-snapshot-CURRENT.tar.gz
url = http://www.snort.org/pub-bin/oinkmaster.cgi/Oink Code貼り付け/
snortrules-snapshot-CURRENT.tar.gz ← 追加

# Example for Community rules
# url = http://www.snort.org/pub-bin/downloads.cgi/Download/
comm_rules/Community-Rules.tar.gz
url = http://www.snort.org/pub-bin/downloads.cgi/Download/comm_rules/
Community-Rules-CURRENT.tar.gz ← 追加

$ sudo vi oinkmaster.sh
#!/bin/bash

/usr/local/bin/oinkmaster.pl -o /etc/snort/rules/ 2>&1 | logger -t oinkmaster
/etc/rc.d/init.d/snortd restart > /dev/null

$ sudo chmod 700 oinkmaster.sh
$ sudo crontab -e
00 00 * * *     /ust/local/bin/ionkmaster.sh
---------------------------------------
$ sudo vi /etc/oinkmaster.conf
# Example for Snort 2.4
# url = http://www.snort.org/pub-bin/oinkmaster.cgi//snortrules-snapshot-2.4.tar.gz
url = http://www.snort.org/pub-bin/downloads.cgi/Download/vrt_pr/
snortrules-pr-2.4.tar.gz ← 追加

# Example for Community rules
# url = http://www.snort.org/pub-bin/downloads.cgi/Download/comm_rules/
Community-Rules.tar.gz
url = http://www.snort.org/pub-bin/downloads.cgi/Download/comm_rules/
Community-Rules-2.4.tar.gz ← 追加
● Oinkmaster を実行して確認してみる。
$ cd /usr/local/bin
$ sudo ./oinkmaster.pl -o /etc/snort/rules/
Loading /etc/oinkmaster.conf
Downloading file from http://www.snort.org/pub-bin/oinkmaster.cgi/*oinkcode*/
snortrules-snapshot-CURRENT.tar.gz... done.
Archive successfully downloaded, unpacking... done.
Downloading file from http://www.snort.org/pub-bin/downloads.cgi/Download/
comm_rules/Community-Rules-CURRENT.tar.gz... done.
Archive successfully downloaded, unpacking... done.
Setting up rules structures...
WARNING: duplicate SID in your local rules, SID 3017 exists multiple times,
 you may need to fix this manually!
done.
Processing downloaded rules... disabled 0, enabled 0, modified 0, total=12604
Setting up rules structures...
WARNING: duplicate SID in your local rules, SID 3017 exists multiple times,
 you may need to fix this manually!
done.
Comparing new files to the old ones... done.

[***] Results from Oinkmaster started 20080131 17:10:38 [***]

[*] Rules modifications: [*]
    None.

[*] Non-rule line modifications: [*]
    None.

[*] Added files: [*]
    None.
---------------------------------

$ sudo oinkmaster.pl -o /etc/snort/rules/
Loading /etc/oinkmaster.conf
Downloading file from http://www.snort.org/pub-bin/downloads.cgi/Download/vrt_pr/
snortrules-pr-2.4.tar.gz... done.
Archive successfully downloaded, unpacking... done.
Downloading file from http://www.snort.org/pub-bin/downloads.cgi/Download/comm_rules/
Community-Rules-2.4.tar.gz... done.
Archive successfully downloaded, unpacking... done.
Setting up rules structures... done.
Processing downloaded rules... disabled 0, enabled 0, modified 0, total=4130
Setting up rules structures... done.
Comparing new files to the old ones... done.

[***] Results from Oinkmaster started 20070321 20:46:07 [***]

[*] Rules modifications: [*]
    None.

[*] Non-rule line modifications: [*]
    None.

[+] Added files (consider updating your snort.conf to include them if needed): [+]

    -> attack-responses.rules
    -> backdoor.rules
    -> bad-traffic.rules
    -> chat.rules
    -> classification.config
    -> community-bot.rules
    -> community-dos.rules
(以下 略)
● cron で oinkmaster を定期的に実行させる。
crontab -e
00 00 * * *     /usr/bin/oinkmaster.pl -o /etc/snort/rules/ 2>&1 |
 /usr/bin/logger -t oinkmaster

毎日00:00にOinkmasterを実行する

iptables が出力した syslog の内容を整理して表示する

最終更新日 2008.02.01
● 「ファイアーウォールのルールを作成します」で設定した /etc/ppp/firewall-masq によるログが、/var/log/messages に出力されています。普段これを定期的にチェックすることはなかなか出来ないため、ログの内容を整理して報告するようにします。

最初にログの状態を見てみます。
$ sudo tail -n 50 /var/log/messages
Mar 21 10:48:05 host kernel: IPTABLES ICMP-IN:IN=ppp0 OUT= MAC= SRC=218.152.38.xxx
DST=xxx.xxx.xxx.xxx LEN=61 TOS=0x00 PREC=0x00 TTL=112 ID=8814 PROTO=ICMP
 TYPE=8 CODE=0 ID=512 SEQ=46264
Mar 21 10:50:58 host kernel: IPTABLES UDP-IN:IN=ppp0 OUT= MAC= SRC=222.216.222.xxx
DST=xxx.xxx.xxx.xxx LEN=404 TOS=0x00 PREC=0x00 TTL=113 ID=2788 PROTO=UDP
 SPT=1308 DPT=1434 LEN=384
Mar 21 11:00:56 host kernel: IPTABLES UDP-IN:IN=ppp0 OUT= MAC= SRC=109.106.118.xxx
DST=xxx.xxx.xxx.xxx LEN=401 TOS=0x00 PREC=0x00 TTL=51 ID=12115 PROTO=UDP
 SPT=30617 DPT=1026 LEN=381
Mar 21 11:07:06 host kernel: IPTABLES ICMP-IN:IN=ppp0 OUT= MAC= SRC=65.60.219.xxx
DST=xxx.xxx.xxx.xxx LEN=92 TOS=0x00 PREC=0x00 TTL=114 ID=12029 PROTO=ICMP
 TYPE=8 CODE=0 ID=512 SEQ=14881
(以下 略)
このように ICMP-IN とか UDP-IN などのログが非常にたくさん記録されている。

● これをタイプ別・相手アドレス別・時間順に整理して報告するスクリプトを書く。
$ cd /usr/local/bin
$ sudo vi iptables_report.sh
#!/bin/bash

# iptables-report

# syslogd.conf
#    kern.=*    /var/log/messages
# iptables LOG target option
#    --log-prefix "IPTABLES XXXXXX"

HOSTNAME="host"   ← 自分のホスト名を入れてください。
IPT_LABEL="IPTABLES"
LOGFILE="/var/log/messages"

TODAY=`date +%c`
MDAY=`date -R "+%b %_d"`

echo
echo "$0: Creating temp files"
TMP1=`/bin/mktemp -q /var/log/tmp/logfile.XXXXXX`
if [ $? -ne 0 ]; then
    echo "$0: Can't create temporary file!"
    exit 1
fi
TMP2=`/bin/mktemp -q /var/log/tmp/logfile.XXXXXX`
if [ $? -ne 0 ]; then
    echo "$0: Can't create temporary file !"
    exit 1
fi

echo "$0: Filtering date-specific data"
cat $LOGFILE | grep "$MDAY" | grep $IPT_LABEL > $TMP1
echo "$0: Cosmetic markdown"
sed -e "s/ $HOSTNAME kernel://g" ¥
    -e "s/ $IPT_LABEL//g" ¥
    -e 's/IN=.* SRC=//g' ¥
    -e 's/ WINDOW=[0-9][0-9]*//g' ¥
    -e 's/ LEN=[0-9][0-9]*//g' ¥
    -e 's/ TTL=[0-9][0-9]*//g' ¥
    -e 's/ ID=[0-9][0-9]*//g' ¥
    -e 's/DST=//g' ¥
    -e 's/ TOS=[0-9]x[0-9][0-9]//g' ¥
    -e 's/ PREC=[0-9]x[0-9][0-9]//g' ¥
    -e 's/ RES=[0-9]x[0-9][0-9]//g' ¥
    -e 's/ URGP=0//g' ¥
    -e 's/ DF//g' ¥
    -e 's/ / /g' ¥
    -e 's/PROTO=//g' ¥
    -e 's/SPT=.*DPT=//g' $TMP1 > $TMP2

echo "$0: Sorting and grouping"
awk -F" " ' { print $4 " " $5 " " $1 " " $2 " " $3 " " $6 " " $7 " " $8 " " $9
} ' $TMP2 |
sort > $TMP1
awk -F" " '
$1 == LastTYPE{
if($2 == LastIP) print "¥t¥t" $3 " " $4 " " $5 " " $6 " " $7 " " $8 " " $9
else if($2 != LastIP) {
LastIP = $2
print "¥t" $2
print "¥t¥t" $3 " " $4 " " $5 " " $6 " " $7 " " $8 " " $9
}
}
$1 != LastTYPE{
LastTYPE = $1
print " "
print $1 " :"
if($2 == LastIP) print "¥t¥t" $3 " " $4 " " $5 " " $6 " " $7 " " $8 " " $9
else if($2 != LastIP) {
LastIP = $2
print "¥t" $2
print "¥t¥t" $3 " " $4 " " $5 " " $6 " " $7 " " $8 " " $9
}
}' $TMP1 > $TMP2

#echo "$0: Notifying via e-mail"                  
       ← メールで受け取る場合は "#" を外す。
#cat $TMP2 | mail -s "iptables report for $TODAY" jibun@adress.jp
       ← メールで受け取る場合は "#" を外す。

#echo "$0: Cleaning up"
mv $TMP2 "$MDAY"
chmod 744 "$MDAY"
cp "$MDAY" /home/user/security/iptables_report  
       ← ファイルに書き込む場合
rm -f $TMP1 $TMP2 $MDAY
● ファイルに書き込む場合は書き込み先のディレクトリを作っておく。
$ mkdir -p /home/pub/security/iptables_report/
● cron で自動実行する。
$ sudo crontab -e
59 7,11,23 * * * /usr/local/bin/iptables_report.sh
これで毎日、7時59分・11時59分・23時59分に実行され、上記の設定よってメールで報告されるかファイルに書き込まれる。

● 結果はこのように見やすい状態で表示される。
ICMP-IN:89.151.133.xxx :
		Mar 21 07:06:42 ICMP TYPE=8 CODE=0 SEQ=29736
		Mar 21 07:06:45 ICMP TYPE=8 CODE=0 SEQ=63273
 
ICMP-IN:89.156.175.xxx :
		Mar 21 03:44:45 ICMP TYPE=8 CODE=0 SEQ=51023
		Mar 21 03:44:47 ICMP TYPE=8 CODE=0 SEQ=55376
 
SYN-FLOOD:200.239.53.xxx :
		Mar 21 03:33:03 TCP 48688 ACK PSH
		Mar 21 03:33:03 TCP 48688 ACK PSH
		Mar 21 03:33:08 TCP 48688 ACK PSH
		Mar 21 03:33:19 TCP 48688 ACK PSH
		Mar 21 03:33:40 TCP 48688 ACK PSH
		Mar 21 03:34:23 TCP 48688 ACK PSH
		Mar 21 03:35:49 TCP 48688 ACK PSH
 
SYN-FLOOD:220.224.17.xxx :
		Mar 21 09:21:42 TCP 1433 RST 
 
UDP-IN:104.79.253.xxx :
		Mar 21 04:21:46 UDP 1026  
 
UDP-IN:109.106.118.xxx :
		Mar 21 11:00:56 UDP 1026  
 
UDP-IN:12.203.253.xxx :
		Mar 21 01:37:41 UDP 1026 
      

Squid の設定

最終更新日 2008.02.01
● プロクシサーバの設定をします。プロクシサーバは一度アクセスされた Web サイトの情報をサーバ内に キャッシュすることにより、次回からの同一 Web サイトへのアクセスの効率を向上します。また、プロ クシサーバがクライアントの身元を隠し、結果的にセキュリティが向上します。

● Squid のインストール
$ rpm -q squid としてパッケージがインストールされてなければ
$ sudo apt-get install squid としてインストール。

squid.conf の設定

最終更新日 2008.02.01
● squid.conf は非常に大きなファイルのため(ほとんどがコメントアウトだが)変更箇所及び付加した箇所のみを抜き出しました。またおおよその見当を付けるためとして行番号を入れておきました。
$ sudo vi /etc/squid/squid.conf
     # http_port 3128             ← 53 行目付近
     http_port 8080              ← 追加

     acl CONNECT method CONNECT       ← 1797 行目付近
     acl lan src 192.168.3.0/255.255.255.0   ← 追加

     # And finally deny all other access to this proxy← 1844 行目付近
     http_access allow localhost
     http_access allow lan            ← 追加
     http_access deny all

     visible_hostname server.name        ← 2067 行目付近 サーバ名を追加

     # forwarded_for on             ← 2344 行目付近
     forwarded_for off              ← 追加

     # none                    ← 2654 行目付近
     header_access X-Forwarded-For deny all 
      ← 相手に出来るだけ知られないようにいっぱい書いてみました(^^
     header_access Via deny all 
     header_access Cache-Control deny all
     header_access From deny all
     header_access Server deny all
     header_access User-Agent deny all
     header_access Link deny all
     header_access Accept deny all
     header_access Accept-Charset deny all
     header_access Accept-Encoding deny all
     header_access Accept-Language deny all
     header_access Content-Language deny all

     #header_replace User-Agent Godzilla/1.00 (CP/M; 8-bit)  ← 2680 行目付近
     header_replace User-Agent Netscape4.6 
       ← いわゆるブラウザ名をフェイクするためです。遊んでください
     #header_replace User-Agent Firefofox2.0 
この header_replace をうまく使えば、例えば InternetExproler しか受け付けないようなお馬鹿なサイトも ”header_replace User-Agent MSIE 6.0" とかすると、 Mozilla や FireFox でも見ることが出来たりします。

Squid の起動・確認等

最終更新日 2008.02.01
● Squid の起動
$ sudo /etc/rc.d/init.d/squid start
● Squid の自動起動
$ sudo /sbin/chkconfig squid on
● Squid の確認及びクライアントでの設定
クライアントのブラウザ(例として FireFox)のメニュータブで、編集 → 設定 → 詳細 →
接続設定 → 手動でプロクシを設定する にサーバーアドレスを入れ、ポートに 8080 を設定する。

プリンタサーバの設定

最終更新日 2008.02.01
● サーバにプリンタを接続して、全てのクライアントマシンからプリンタを使えるようにする。

最初にプリンタをサーバマシンに接続します。私の環境ではパラレルポートに接続しています。USB接続の方は読み替えて設定を進めてください。
サーバマシンで CUPS がインストールされていることを確認します。入っていなければ apt-get install cups しておきます。
$ sudo apt-get install cups
Password:
パッケージリストを読みこんでいます... 完了
依存情報ツリーを作成しています... 完了
以下の追加パッケージがインストールされます:
  cups-libs
以下のパッケージが新たにインストールされます:
  cups cups-libs
アップグレード: 0 個, 新規インストール: 2 個, 削除: 0 個, 保留: 0 個
8478kB のアーカイブを取得する必要があります。
展開後に 12.3MB のディスク容量が追加消費されます。
続行しますか? [Y/n]y
取得:1 http://www.t.ring.gr.jp 4.2/i386/main cups-libs 1.1.23-0vl7.3 [105kB]
取得:2 http://www.t.ring.gr.jp 4.2/i386/main cups 1.1.23-0vl7.3 [8373kB]
8478kB を 4s 秒で取得しました (1891kB/s)
変更を適用しています...
準備中...                   ##################################### [100%]
   1:cups-libs              ##################################### [ 50%]
   2:cups                   ##################################### [100%]
完了
クライアントのブラウザから http://192.168.3.1:631/(サーバアドレス:631) を開きます。
このままでは
You don't have permission to access the resource on this server
となってしまうので、設定ファイルを変更します。
$ sudo vi /etc/cups/cupsd.conf

Order Deny,Allow
Deny From All
Allow From 127.0.0.1
Allow From 192.168.3.0/24  ← 772行目付近 追加


Order Deny,Allow
Deny From All
Allow From 127.0.0.1
Allow From 192.168.3.0/24  ← 841行目付近 追加


$ sudo vi /etc/cups/mime.convs
#application/octet-stream        application/vnd.cups-raw        0       -← 行頭の # を外す

$ sudo vi /etc/cups/mime.types
#application/octet-stream ← 行頭の # を外す
CUPS を起動させます。
$ sudo /etc/rc.d/init.d/cups start
cupsを起動中:                                              [  OK  ]
もし "ERROR The requested URL could not be retrieved" と蹴られるようならプロキシの設定を見直してください。 FireFox の場合は、編集→設定→詳細→ネットワーク→接続設定ボタン→直接接続するサイト にサーバーアドレスを書き足します。


表示されたページから”プリンタ管理”をクリックします。


プリンタに名前を付けます。


接続方法を選びます。


プリンタドライバはクライアント側で用意しますので、ここでは "Raw" を選択します。


選択肢はこれ1つですからそのまま選びます。


プリンタの追加に成功すると、このように表示されると思います。
プリンタサーバとしての設定はここまで。後はクライアント側での設定になります。

apt を使ったパッケージの更新と自動化・ログファイルの作成

● VineLinux ではパッケージを rpm/apt を使って管理することが出来ます。これにより個々のパッケージのインストールや削除等に於いて、依存関係などを気にすることなく(必要なものがあれば教えてくれる) 簡単に行うことが出来ます。詳しくは RPM/APTによるパッケージ管理を読んでください。 手で行う場合は
$ sudo apt-get update
$ sudo apt-get upgrade
で良いのですが、毎日チェックしたりコマンドを入力するのは大変ですので自動化します。自動化そのものは cron に登録すれば済むことですが、更新が行われたのかどうかをチェックするために一緒にログファイルを作成するようにします。 次のような apt-up.sh というシェルスクリプトを書いてそれを /usr/local/bin に保存してください。
#!/bin/sh

apt-get update
apt-get -y upgrade

date >> /home/user/sec/apt-up

ls -l /var/cache/apt/archives/ | cut -c 57- > /tmp/apt-up

diff /tmp/apt-up /tmp/apt-archives >> /home/user/sec/apt-up
       ← 出力させたい場所とファイル名を記述

cp /tmp/apt-up /tmp/apt-archives
● パーミッションの変更をします。
$ sudo chmod 700 /usr/local/bin/apt-up.sh
● 出来たスクリプトを cron に登録します。
$ sudo crontab-e
10 4 * * *      /usr/local/bin/apt-up.sh
● これで毎日4時10分にスクリプトが実行されて、更新されたパッケージがあればアップデートされます。結果はこのようにログとして出力されます。但しスクリプトを見ればわかるように、一度実行させて /tmp/apt-archives を作ってからでないとエラーになるかもしれません。
Fri Feb  9 04:10:04 JST 2007
Sat Feb 10 04:10:05 JST 2007    ← アップデートがない場合は日付だけが記録される
Sun Feb 11 04:10:26 JST 2007    ← アップデートがあった場合はこのように出力される 
38,39c38,39
< samba-common_3.0.14a-0vl0.4_i386.rpm ← 新しくなったパッケージ
< samba_3.0.14a-0vl0.4_i386.rpm
---
> samba-common_3.0.14a-0vl0.3_i386.rpm ← 変更された旧パッケージ
> samba_3.0.14a-0vl0.3_i386.rpm

ハードディスクの情報を表示する

● コンピュータは様々なパーツから構成されていますが、その中でももっとも壊れてほしくないパーツの1つがハードディスクですね。そのハードディスクからの自己診断機能を利用して各種情報を取り出し表示してくれるのが smartctlコマンドです。 ただ VineLinux にはこのコマンドが用意されていないため、 http://smartmontools.sourceforge.net/ からダウンロードしてきます。
この Index にある SourceForge's Project Page を開き Download S.M.A.R.T. Monitoring Tools をクリックして5.36を開き src.rpm をダウンロードします。
$ rpm --rebuild rpm/SRPMS/smartmontools-5.36-1.src.rpm
+ '[' -f configure.in ']'
+ libtoolize --copy --force
/var/tmp/rpm-tmp.88418: line 26: libtoolize: command not found
エラー: /var/tmp/rpm-tmp.88418 の不正な終了ステータス (%build)
libtool がないと怒られていますので apt でインストールします。
$ sudo apt-get install libtool
Password:
パッケージリストを読みこんでいます... 完了
依存情報ツリーを作成しています... 完了
以下の追加パッケージがインストールされます:
  libtool-libs
以下のパッケージが新たにインストールされます:
  libtool libtool-libs
アップグレード: 0 個, 新規インストール: 2 個, 削除: 0 個, 保留: 0 個
676kB のアーカイブを取得する必要があります。
展開後に 2468kB のディスク容量が追加消費されます。
続行しますか? [Y/n]y
取得:1 http://updates.vinelinux.org 3.2/i386/main libtool-libs 1.5.6-0vl1 [24.5kB]
取得:2 http://updates.vinelinux.org 3.2/i386/main libtool 1.5.6-0vl1 [652kB]
676kB を 0s 秒で取得しました (677kB/s)
変更を適用しています...
準備中...                   ###################################### [100%]
   1:libtool-libs           ###################################### [ 50%]
   2:libtool                ###################################### [100%]
完了
もう一度リビルドします。
$ rpm --rebuild rpm/SRPMS/smartmontools-5.36-1.src.rpm
$ sudo rpm -Uvh /home/user/rpm/RPMS/i386/smartmontools-5.36-1.i386.rpm
準備中...                   ###################################### [100%]
Note that you can use a configuration file /etc/smartd.conf to control the
startup behavior of the smartd daemon.  See man 8 smartd for details.
   1:smartmontools          ################################### [100%]
Run "/etc/rc.d/init.d/smartd start" to start smartd service now.
smartd will continue to start up on system boot
私の環境では、ハードディスクは /dev/sda になっていますので次のコマンドを打つと
$ sudo /usr/sbin/smartctl -a /dev/sda
smartctl version 5.36 [i686-pc-linux-gnu] Copyright (C) 2002-6 Bruce Allen
Home page is http://smartmontools.sourceforge.net/

Device: ATA      HDS722580VLSA80  Version: V32O

In Linux, SATA disks accessed via libata are only supported by smartmontools
for kernel versions 2.6.15 and above. Try an additional '-d ata' argument.
とエラーになります。書いてあるようにオプションを追加して
$ sudo /usr/sbin/smartctl -a -d ata /dev/sda
smartctl version 5.36 [i686-pc-linux-gnu] Copyright (C) 2002-6 Bruce Allen
Home page is http://smartmontools.sourceforge.net/

=== START OF INFORMATION SECTION ===
Model Family:     Hitachi Deskstar 7K250 series
Device Model:     HDS722580VLSA80
Serial Number:    XXXXXXX
Firmware Version: V32OA6MA
User Capacity:    80,000,040,960 bytes
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   6
ATA Standard is:  ATA/ATAPI-6 T13 1410D revision 3a
Local Time is:    Wed Feb 21 10:50:09 2007 JST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

General SMART Values:
Offline data collection status:  (0x00) Offline data collection activity
                                        was never started.
                                        Auto Offline Data Collection: Disabled.
Self-test execution status:      (   0) The previous self-test routine completed
                                        without error or no self-test has ever
                                        been run.
Total time to complete Offline
data collection:                 (1828) seconds.
Offline data collection
capabilities:                    (0x1b) SMART execute Offline immediate.
                                        Auto Offline data collection on/off support.
                                        Suspend Offline collection upon new
                                        command.
                                        Offline surface scan supported.
                                        Self-test supported.
                                        No Conveyance Self-test supported.
                                        No Selective Self-test supported.
SMART capabilities:            (0x0003) Saves SMART data before entering
                                        power-saving mode.
                                        Supports SMART auto save timer.
Error logging capability:        (0x01) Error logging supported.
                                        General Purpose Logging supported.
Short self-test routine
recommended polling time:        (   1) minutes.
Extended self-test routine
recommended polling time:        (  31) minutes.

SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE
      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x000b   088   088   060    Pre-fail  Always
         -       2883621
  2 Throughput_Performance  0x0005   100   100   050    Pre-fail  Offline
        -       0
  3 Spin_Up_Time            0x0007   119   119   024    Pre-fail  Always
         -       175 (Average 161)
  4 Start_Stop_Count        0x0012   100   100   000    Old_age   Always
         -       135
  5 Reallocated_Sector_Ct   0x0033   100   100   005    Pre-fail  Always
         -       0
  7 Seek_Error_Rate         0x000b   100   100   067    Pre-fail  Always
         -       0
  8 Seek_Time_Performance   0x0005   100   100   020    Pre-fail  Offline
        -       0
  9 Power_On_Hours          0x0012   099   099   000    Old_age   Always
         -       12149
 10 Spin_Retry_Count        0x0013   100   100   060    Pre-fail  Always
        -       0
 12 Power_Cycle_Count       0x0032   100   100   000    Old_age   Always
        -       135
192 Power-Off_Retract_Count 0x0032   100   100   050    Old_age   Always
       -       632
193 Load_Cycle_Count        0x0012   100   100   050    Old_age   Always
       -       632
194 Temperature_Celsius     0x0002   211   211   000    Old_age   Always
       -       26 
(Lifetime Min/Max 15/48)
196 Reallocated_Event_Count 0x0032   100   100   000    Old_age   Always
       -       0
197 Current_Pending_Sector  0x0022   100   100   000    Old_age   Always 
      -       0
198 Offline_Uncorrectable   0x0008   100   100   000    Old_age   Offline
      -       0
199 UDMA_CRC_Error_Count    0x000a   200   200   000    Old_age   Always
       -       0

SMART Error Log Version: 1
No Errors Logged

SMART Self-test log structure revision number 1
No self-tests have been logged.  [To run self-tests, use: smartctl -t]


Device does not support Selective Self Tests/Logging

上記の結果から起動回数(Start_Stop_Count)、稼働時間(Power_On_Minutes)、
温度(Temperature_Celsius)などが解かると思います。その他のオプションは
$ /usr/sbin/smartctl --help
で表示されます。

USBカメラ(q-cam)を使ったWebカメラサーバを構築する

● Logicool社のUSB接続カメラ「Qcam Express」を使ったWebカメラサーバを構築する。

サーバとして使用しているマシンには X Window System をインストールしていないため動画配信は出来ないのだが、 xawtv の中に含まれる webcam を利用することで静止画は取り込むことが出来る。

rpm から xawtv をインストールしようとすると X を要求されてしまうので tar からインストールする。最初に依存関係で必要となる ncurses-devel と libjpeg-devel をインストールする。
$ sudo apt-get install ncurses-devel libjpeg-devel

$ cd rpm/SOUECES
$ wget http://dl.bytesex.org/releases/xawtv/xawtv-3.95.tar.gz

$ cd ../BUILD
$ tar zxvf ../SOUECES/xawtv-3.95.tar.gz
$ cd xawtv-3.95/
$ ./configure
$ make
$ sudo make install
/usr/local/bin/ 以下に webcam がインストールされたのを確認しておく。
$ cd /usr/local/bin
$ ls | grep webcam
webcam*
● USBカメラ(q-cam)用ドライバをダウンロードしてくる。
$ cd rpm/SOURCES/
$ wget http://downloads.sourceforge.net/qce-ga/qc-usb-0.6.5.tar.gz

 --19:15:04--  http://downloads.sourceforge.net/qce-ga/qc-usb-0.6.5.tar.gz
           => `qc-usb-0.6.5.tar.gz'
downloads.sourceforge.net をDNSに問いあわせています... 66.35.250.203
downloads.sourceforge.net[66.35.250.203]:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 302 Found
場所: http://nchc.dl.sourceforge.net/sourceforge/qce-ga/qc-usb-0.6.5.tar.gz [続 く]
--13:56:03--  http://nchc.dl.sourceforge.net/sourceforge/qce-ga/qc-usb-0.6.5.tar.gz
           => `qc-usb-0.6.5.tar.gz'
nchc.dl.sourceforge.net をDNSに問いあわせています... 211.79.61.10
nchc.dl.sourceforge.net[211.79.61.10]:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 145,877 [application/x-gzip]

100%[====================================>] 145,877      211.08K/s

13:56:04 (210.90 KB/s) - `qc-usb-0.6.5.tar.gz' を保存しました [145877/145877]
● qc-usb を解凍してインストールする。
$ cd ../BUILD
$ tar zxvf ../SOURCES/qc-usb-0.6.5.tar.gz
$ cd qc-usb-0.6.5/

$ make clean
/usr/bin/which: no depmod in (/bin:/usr/bin:/usr/X11R6/bin)
/bin/sh: line 1: [: -ge: unary operator expected
/bin/sh: line 1: [: -ge: unary operator expected
rm -f *.o qcset show *~ .¥#* .*.cmd *.mod.c *.ko
rm -rf .tmp_versions
● 普通に make all するとエラーになるので、カーネルの場所を指定して make します。この時に kernel-headers が必要になりますので、入ってなかったらインストールしておいてください。Vine4.1 の場合は mak all だけで OK のようです。
$ env LINUX_DIR=/usr/src/linux-2.4.33 make all
/usr/bin/which: no depmod in (/bin:/usr/bin:/usr/X11R6/bin)
/bin/sh: line 1: [: -ge: unary operator expected
/bin/sh: line 1: [: -ge: unary operator expected
cc -I/usr/src/linux-2.4.33/include -nostdinc -iwithprefix include -DMODULE -D__
KERNEL__ -DNOKERNEL -O2
 -fomit-frame-pointer -fno-strict-aliasing -fno-common -Wall -Wstrict-prototypes
  -Wno-trigraphs  -DHAVE_UTSRELEASE_H= -pipe -c qc-driver.c
cc -I/usr/src/linux-2.4.33/include -nostdinc -iwithprefix include -DMODULE -D__
KERNEL__ -DNOKERNEL -O2
 -fomit-frame-pointer -fno-strict-aliasing -fno-common -Wall -Wstrict-prototypes
  -Wno-trigraphs  -DHAVE_UTSRELEASE_H= -pipe -c qc-hdcs.c
cc -I/usr/src/linux-2.4.33/include -nostdinc -iwithprefix include -DMODULE -D__
KERNEL__ -DNOKERNEL -O2
 -fomit-frame-pointer -fno-strict-aliasing -fno-common -Wall -Wstrict-prototypes
  -Wno-trigraphs  -DHAVE_UTSRELEASE_H= -pipe -c qc-pb0100.c
cc -I/usr/src/linux-2.4.33/include -nostdinc -iwithprefix include -DMODULE -D__
KERNEL__ -DNOKERNEL -O2
 -fomit-frame-pointer -fno-strict-aliasing -fno-common -Wall -Wstrict-prototypes
  -Wno-trigraphs  -DHAVE_UTSRELEASE_H= -pipe -c qc-vv6410.c
cc -I/usr/src/linux-2.4.33/include -nostdinc -iwithprefix include -DMODULE -D__
KERNEL__ -DNOKERNEL -O2
 -fomit-frame-pointer -fno-strict-aliasing -fno-common -Wall -Wstrict-prototypes
  -Wno-trigraphs  -DHAVE_UTSRELEASE_H= -pipe -c qc-formats.ccc
   -I/usr/src/linux-2.4.33/include -nostdinc -iwithprefix 
 include -DMODULE -D__KERNEL__ -DNOKERNEL -O2 -fomit-frame-pointer
  -fno-strict-aliasing -fno-common 
 -Wall -Wstrict-prototypes -Wno-trigraphs -DHAVE_UTSRELEASE_H= -pipe
  -c qc-mjpeg.ccc -I/usr/src/linux-2.4.33/include -nostdinc -iwithprefix include
   -DMODULE -D__KERNEL__ -DNOKERNEL -O2 -fomit-frame-pointer -fno-strict-aliasing
    -fno-common -Wall -Wstrict-prototypes -Wno-trigraphs 
 -DHAVE_UTSRELEASE_H= -pipe -c qc-memory.c
qc-memory.c:73:2: 警告: #warning "HAVE_VMA=0"
ld -r -o quickcam.o qc-driver.o qc-hdcs.o qc-pb0100.o qc-vv6410.o
 qc-formats.o qc-mjpeg.o qc-memory.ogcc -Wall -O2 -s qcset.c -o qcset -lm

$ sudo make install
which: no depmod in (/bin:/usr/bin:/usr/X11R6/bin)
/bin/sh: line 1: [: -ge: unary operator expected
/bin/sh: line 1: [: -ge: unary operator expected
/usr/bin/install -c -D -m 644 quickcam.o         /lib/modules/2.4.33-0vl0.5/misc/quickcam.o
/usr/bin/install -c -D -m 755 qcset /usr/local/bin/qcset
/sbin/depmod -a
● モジュールを読み込ませます。
$ sudo /sbin/modprobe quickcam
● モジュールがロードされていることを確認します。
$ /sbin/lsmod | grep quickcam
quickcam               64868   0
videodev                8544   1 [quickcam]
● 起動時に自動で quickcam を読み込ませるようにします。
$ sudo vi /etc/modules.conf
alias camera quickcam  ← この1行を付け加えます
● 展開したディレクトリ、及び落としてきたファイルを削除しておきます。
$ cd ..
$ rm -rf qc-usb-0.6.5/
$ rm -f ../SOURCES/qc-usb-0.6.5.tar.gz
● ビデオデバイス /dev/video0、/dev/video が存在しない場合は作成する。
$ sudo mknod /dev/video0 c 81 0
$ sudo ln -s /dev/video0 /dev/video
$ sudo chmod a+wx /dev/video0
● とりあえず動かしてみる。
% xawtv
X Error of failed request:  XF86DGANoDirectVideoMode
  Major opcode of failed request:  136 (XFree86-DGA)
  Minor opcode of failed request:  1 (XF86DGAGetVideoLL)
のようなエラーが出るときは、
% xawtv -nodga
● 画像をキャプチャするための webcam の設定ファイルをユーザーのホームディレクトリに作成する。
$ cd
$ sudo vi .webcamrc
[grab]
device = /dev/video0     ← ビデオデバイスの指定
text = 20%y-%m-%d %H:%M:%S  ← 画像の左下にテキストを挿入する。この場合は日付。
width = 280          ← 画像の横サイズ
height = 250         ← 画像の縦サイズ
delay = 10          ← キャプチャする間隔
input = Camera
top = 0
left = 20
bottom = -1
right = -1
quality = 60         ← 画像の品質
#norm = ntsc
once =  1           ← キャプチャする回数 *1
#qcset debug=0
archive = /home/user/live/%Y-%m-%d_%H:%M:%S.jpg  ← 画像の名前と保存先

*1 once をコメントアウトすると、
webcam を起動している間 delay で指定した間隔で画像を撮りつづけます。
● ftp セクションを設定すると画像をWebサーバにアップロードして、外部からも見ることが出来るようになります。下記は参考までに載せておきます。
[ftp]
host = swing.jakou.com   ← ftp host 名
user = user         ← ユーザー名
pass = xxxxxxxxx      ← パスワード
dir = public_html/webcam
file = webcam.jpg
tmp = uploading.jpg
debug = 0
auto = 0
local = 0
passive = 0
qcset debug=0
● webcam を実行する。
$ webcam &
このままだと設定ファイル .webcam.rc の内容如何では動きつづけているので、終了させたいときは
$ killall webcam
● webcam のスクリプトを作っておく。
$ cd /usr/local/bin
$ sudo vi webcam.sh
#!/bin/bash

/usr/local/bin/webcam
● 自動で動かしたい場合は cron で指定しておく。
$ cd
$ crontab -e
0-59/5 7-18 * * * /usr/local/bin/webcam.sh > /dev/null 2>&1
          ↑
例) 7時から18時までの間、5分ごとに画像をキャプチャする


● 古くなった画像ファイルを整理する。
cron で動かしつづけていると、画像ファイルがどんどん溜ってきてしまいます。ある程度古くなったファイルを、これも cron に登録して自動で削除するようにします。
find とそのオプションの -mmin あるいは -mtime を使います。
$ find (画像ファイルディレクトリ) -mtime +30 -exec rm {} ¥;
     ← 30x24hr で30日以前に更新されたファイルを削除
$ find (画像ファイルディレクトリ) -mmin +1440 -exec rm {} ¥;
     ← 1440分(24hr) 以前に更新されたファイルを削除
あとはこれを crontab に登録しておきます。

コンソールでのキーボードの設定

最終更新日 2008.02.11
● X Window System を使わないコンソール上に於いて、英語キーボードを使っているのに、配列が日本語キーボードになってしまっている時の変更の仕方。
  $ sudo vi /etc/sysconfig/keyboard
  					KEYBOARDTYPE="pc"
  					KEYTABLE="jp106"  →    "us" に変更
  

多量のエラーメッセージを一発消去

最終更新日 2010.02.15
● あまりに多量のエラーメッセージがファイル中に書き込まれた場合、次のコマンドで一発消去出来ます。ここでは "hoge" で始まるエラーメッセージを想定しています。
  $ find . -type f -name "hoge*" | sudo xargs rm -f
  

/etc/sysconfig/network-scripts

● /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
DHCPCDARGS=-R
BROADCAST=192.168.1.255
IPADDR=192.168.1.1
NETMASK=255.255.255.0
NETWORK=192.168.1.0
ONBOOT=yes
● /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
ONBOOT=no

/etc/sysconfig/network

● /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=hoge.hostname

/etc/hosts

● /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1               hoge hoge.hostname  localhost localhost.localdomain
192.168.1.1             hoge hoge.hostname

/etc/hosts.allow

● /etc/hosts.allow
#
# hosts.allow   This file describes the names of the hosts which are
#               allowed to use the local INET services, as decided
#               by the '/usr/sbin/tcpd' server.
#
ALL: 192.168.1.

/etc/hosts.deny

● /etc/hosts.deny
#
# hosts.deny    This file describes the names of the hosts which are
#               *not* allowed to use the local INET services, as decided
#               by the '/usr/sbin/tcpd' server.
#
# The portmap line is redundant, but it is left to remind you that
# the new secure portmap uses hosts.deny and hosts.allow.  In particular
# you should know that NFS uses portmap!
ALL:ALL
  

/etc/exports

● /etc/exports
/home/user      192.168.1.0/255.255.255.0(rw)
/home/samba     192.168.1.0/255.255.255.0(rw)
/mnt/media      192.168.1.0/255.255.255.0(rw)
  

/etc/ntp.conf

● /etc/ntp.conf
#
# Undisciplined Local Clock. This is a fake driver intended for backup
# and when no outside source of synchronized time is available. The
# default stratum is usually 3, but in this case we elect to use stratum
# 0. Since the server line does not have the prefer keyword, this driver
# is never used for synchronization, unless no other other
# synchronization source is available. In case the local host is
# controlled by some external source, such as an external oscillator or
# another protocol, the prefer keyword would cause the local host to
# disregard all other synchronization sources, unless the kernel
# modifications are in use and declare an unsynchronized condition.
#
server  clock.nc.fukuoka-u.ac.jp
server  ntp1.jst.mfeed.ad.jp
server  ntp.t.ring.gr.jp
#server ntp.t.ring.gr.jp
#server ntp.t.ring.gr.jp
#server ntp.t.ring.gr.jp
#server ntp.t.ring.gr.jp
fudge   127.127.1.0 stratum 10

#
# Drift file.  Put this in a directory which the daemon can write to.
# No symbolic links allowed, either, since the daemon updates the file
# by creating a temporary in the same directory and then rename()'ing
# it to the file.
#
driftfile /etc/ntp/drift
multicastclient                 # listen on default 224.0.1.1
broadcastdelay  0.008

#
# Keys file.  If you want to diddle your server at run time, make a
# keys file (mode 600 for sure) and define the key number to be
# used for making requests.
#
# PLEASE DO NOT USE THE DEFAULT VALUES HERE. Pick your own, or remote
# systems might be able to reset your clock at will. Note also that
# ntpd is started with a -A flag, disabling authentication, that
# will have to be removed as well.
#
#keys           /etc/ntp/keys