内の監視するログと設定ファイルのパスを、自分の環境に合わせてフルパスで設定する。CHECK_LOG="/var/log/messages"SWATCH_CONF="/etc/swatch/swatchrc"起動スクリプトを自動実行できるようにする。ランレベル2/3/4/5で起動できるようになる。6:offSwatchが動作するための環境を整備する。1,2行目は、Swatchが起動時に一時的に作成するスクリプトの格納場所に関する作業。起動スクリプト中の「SWATCH_SCRIPT="/var/run/swatch"」で指定されるパス。3,4行目は、Swatchが「echo」で出力した内容を記録するファイルに関する作業。起動スクリプト中の「SWATCH_LOG="/var/log/swatch"」で指定されるファイル。/var/log/swatch設定が完了したら、Swatchを起動・停止して問題ないかチェックする。stop◆複数ファイル監視時の自動起動Swatchで複数のログファイルを監視する場合は、それぞれのログファイルに対してSwatchを起動しなければなりません。ProFTPDのログを別途監視するという前提で修正したCentOSを含むRedHat系用とSuSE用の起動スクリプトです。見てもらえばすぐに分かる思いますが、赤字が追加したところで、追加監視するログファイルとルールファイルのパスを追加し、それらを監視する部分を追記しただけです。監視対象ログ毎に同じように追記していけば対応できます。■FTPサーバへの不正アクセス防止Swatchの使い方として、パターン検出時に一般的にメールを投げる例が多くありますが、今回はコマンド実行機能(exec)を使用して、もっと積極的な対応をしてみました。実際に導入したのは、FTPで指定回数以上ログインに失敗したら当該アドレスからのFTPアクセスをiptablesを使用してロックするようにしてみました。このような方法はいろいろな応用ができ、例えばシステムがパニックしたらシャットダウンしてしまうとか、ネットワークを停止する等のアクションも可能です。(このような設定を動かすには勇気がいりますが・・・。)設定ファイルに追加パターンの作成まずは、実際にFTPでログインして認証に失敗し、/var/log/messagesに出力されたエラーメッセージを調査する。そこからそのメッセージ固有のパターンと宛先アドレスを抽出できるよう、正規表現を考える。failure」だけでがよいが、別途作成する管理スクリプトでアクセス元をベースにiptablesで遮断したいので、全般でアクセス元のIPアドレスを抽出している。(本来は、検出メッセージを引数としてコマンドに渡せるはずなので、後半の文字列だけでよいはずであるが、どうしてもうまく渡せないので予めSwatch側で検出してパラメータ指定で渡すことにした。元のメッセージは上記の「Swatchの動作テスト」のところにある3行目のメッセージで、[192.168.1.xx]のところでアドレス検出をする例である。failure」はログイン失敗を識別する文字列そのままである。今回のアクションは、上記パターンを検出したらおやじ宛てにメールを送信し同時に(\d+.\d+.\d+.\d+)にマッチしたアクセス元アドレスを引数として、/usr/local/bin/hack/hacker.cgiが起動する。hacker.cgiでは、ip毎の起動カウンタを持ち一定回数以上エラーしたらiptablesでロックするようにした。Swatchのログファイルに書き出すための設定。いうタイトルでメール送信。$1":$1はパターンマッチでマッチした最初の変数(\d+\.\d+\.\d+\.\d+)で、これを引数として/usr/local/bin/hack/hacker.cgiを起動。管理スクリプト(hacker.cgi)今回作成したものはかなり手抜きで、こちらのような簡単なもの。上記で指定したパスにhacker.cgiという名前(/usr/local/bin/hack/hacker.cgi)で設置する。スクリプトを置いたディレクトリ。この配下に不正アクセスIPアドレスのログ(IPアドレス.cnt)が置かれる。同一アドレスからのエラー許容回数。iptablesのパス。iptablesでダイナミックに制御するチェーンの名称。・一旦ロックすると、ログを捨ててiptablesを初期化するか個別解除するまでアクセスできないので動的IPで被害者が出るかもしれない。解除は、設定と全く同じでパラメータが「-A」から「-D」になるだけ。DROP・システムを再起動するとiptablesの設定は消えてしまうが、ログカウンタがあるため次回アクセスで失敗すれば再度ロックされる。iptables用スクリプトの修正おやじは、こちらにあるようなスクリプトでiptablesを動かしているので、これに上記のhacker.cgiで制御するダイナミックなHACKERとういチェーンを追加し、管理を容易にした。追加したのは下記の2行だけで、HACKERというチェーンを新規に定義し、入力されるTCPパケットに関して、まずはこのチェーンで評価するようにしただけです。従って、このチェーンに特定のソースアドレスからのFTPポート(21番)へのアクセスを遮断するようにhacker.cgiで書いてあげれば、二度とFTPサーバにはアクセスできなくなる。強行にするなら、プロトコルやポート指定なしでソースアドレスだけで遮断するようにすれば、全くアクセスできなくすることもできる。