このスレッドは解決済です(未解決に戻す場合はこちら)
<<戻る

SWATCHの監視について このメッセージに返信する
日時: 2011/12/03 00:20
名前: YUTO
URL:
swatchについて

いつもサイトを参考にさせてもらっています。

現在CentOS 5.7を使用しているのですが、Swatchについて
質問があります。

http://centossrv.com/swatch.shtml
を参考にSWATCHアクションスクリプトも
同じものを使わせて頂いています。

/etc/swatch以下は以下のように作成しています。

# vi /etc/swatch/messages.conf
---------------------------------------------------
# logfile /var/log/messages

watchfor /named.*client.*query.*denied/
pipe "/usr/local/bin/swatch_action.sh 7 lock"
---------------------------------------------------

# vi /etc/swatch/vsftpd.conf
---------------------------------------------------
# logfile /var/log/vsftpd.log

watchfor /FAIL LOGIN/
pipe "/usr/local/bin/swatch_action.sh 12"
throttle=00:00:10
---------------------------------------------------

swatchも起動し、問題なく動作をしています。ありがとうございます。

ここで、1つ目の質問なのですが不正アクセスを検知すると/var/log/swatch
以下にIPアドレスのログが吐き出されます。

ここのIPアドレスのログはみなさんずっと残されていますか?
というのが正規のユーザで外出先からFTPアクセス時にパスワードの入力ミス
をした場合に、3回検知で24時間アクセスできなくなりますが、IPアドレスが
ログディレクトリに残っているので、以降は1回検知でアクセス制限がかかります。
それにメールが来るごとに過去の記録もあわせて送信されます。
過去の記録が見れるのでそれはそれでよいのですが・・・

正規のユーザからのパスワード入力ミスで記録されたログは都度削除するという
運用にした方が良いのでしょうか?


2つ目の質問は1つ目の質問と重複する部分がありますが、dovecotの不正アクセス
の対策を行いたいと思います。
正規のユーザでもメーラを開く度に、パスワードを入力されておりパスワードを
間違える可能性があります。

これを正規ユーザ名でパスワードを間違えた場合は、ログに記録しないという
事は可能でしょうか?
出先からなので、IPアドレスでの除外は無理です。

以上、よろしくお願いします。

記事編集 編集
Re: SWATCHの監視について このメッセージに返信する
日時: 2011/12/06 10:11
名前: ペングイン
URL: http://blog.trippyboy.com/
YUTO様

>1つ目の質問なのですが不正アクセスを検知すると/var/log/swatch
>以下にIPアドレスのログが吐き出されます。
>
>ここのIPアドレスのログはみなさんずっと残されていますか?

残しています。というか今まで残ることを気にもしていませんでした。

>というのが正規のユーザで外出先からFTPアクセス時にパスワードの入力ミス
>をした場合に、3回検知で24時間アクセスできなくなりますが、IPアドレスが
>ログディレクトリに残っているので、以降は1回検知でアクセス制限がかかります。
>それにメールが来るごとに過去の記録もあわせて送信されます。
>過去の記録が見れるのでそれはそれでよいのですが・・・

24時間も制限しなくてもいいのでは?と思います。15分でも制限出来れば不正なアクセスを防ぐには十分かと私は思います。

at now+15minutes ・・・・・・


または、ログを拒否する処理を行なう前に、「if [ $# -eq 2 -a "$2" = "del" ]; then」から始まるような
条件を挟んであげて、swatchの設定ファイルで「del」を指定したらログを削除するような処理を含んでもいいと思います。

if [ $# -eq 2 -a "$2" = "del" ]; then
__[ "$mail" != "" ] && rm /var/log/swatch/$IPADDR && \
__mail -s "$IPADDR deleted" $mail
__echo "`date` $IPADDR deleted"
# 該当IPアドレスからの累積不正アクセス数が3以上の場合または
# 引数でlockと指定された場合アクセス規制
elif [ $cnt -ge 3 ] || [ $# -eq 2 -a "$2" = "lock" ]; then


>
>正規のユーザからのパスワード入力ミスで記録されたログは都度削除するという
>運用にした方が良いのでしょうか?

同じIPアドレスからログインを記録したらそのIPアドレスの名前がついたファイルを
/var/log/swatchから削除するためのスクリプトをswatch_action.shを真似て作って
みてもいいと思います。

・認証に成功したログを取り出し
・そのログに記録されている接続場所を正しくしてい
・rm /var/log/swatch/$IPADDR

上記が出来れば、可能ですね。

>2つ目の質問は1つ目の質問と重複する部分がありますが、dovecotの不正アクセス
>の対策を行いたいと思います。
>正規のユーザでもメーラを開く度に、パスワードを入力されておりパスワードを
>間違える可能性があります。
>
>これを正規ユーザ名でパスワードを間違えた場合は、ログに記録しないという
>事は可能でしょうか?

やるとしたら、こちらのサイトで提供されているスクリプトでは限界を感じます。
今は接続元情報がどこに記載されているか、またはlockするかのオプションを加えています。
これに、接続に利用したユーザー名を取得できるようにオプションをつけ、
取得したユーザが存在するかを確認し、
存在する場合は、処理を行なわない
ということが出来れば可能です。

もし、ユーザー名にプレフィックスがあれば、user_などの接頭語などがあれば、
ソレを含むログは除外することで可能になると思います。全ユーザー名を使って
フィルタすることも出来ると思いますが、処理が大変になると思います。

>出先からなので、IPアドレスでの除外は無理です。
>
>以上、よろしくお願いします。
>
>
記事編集 編集
Re: SWATCHの監視について このメッセージに返信する
日時: 2011/12/07 20:09
名前: YUTO
URL:
ペングイン様
回答ありがとうございます。

>>というのが正規のユーザで外出先からFTPアクセス時にパスワードの入力ミス
>>をした場合に、3回検知で24時間アクセスできなくなりますが、IPアドレスが
>>ログディレクトリに残っているので、以降は1回検知でアクセス制限がかかります。
>>それにメールが来るごとに過去の記録もあわせて送信されます。
>>過去の記録が見れるのでそれはそれでよいのですが・・・

>24時間も制限しなくてもいいのでは?と思います。15分でも制限出来れば不正な
アクセスを防ぐには十分かと私は思います。

私も正規ユーザをブロックしてしまってはマズイと思ったので24時間でなく、1時間
規制に設定しています。

>または、ログを拒否する処理を行なう前に、「if [ $# -eq 2 -a "$2" = "del" ];
then」から始まるような
>条件を挟んであげて、swatchの設定ファイルで「del」を指定したらログを削除する
ような処理を含んでもいいと思います。

>if [ $# -eq 2 -a "$2" = "del" ]; then
>__[ "$mail" != "" ] && rm /var/log/swatch/$IPADDR && \
>__mail -s "$IPADDR deleted" $mail
>__echo "`date` $IPADDR deleted"
># 該当IPアドレスからの累積不正アクセス数が3以上の場合または
># 引数でlockと指定された場合アクセス規制
>elif [ $cnt -ge 3 ] || [ $# -eq 2 -a "$2" = "lock" ]; then
>〜

こちらの処理も参考にさせて頂きます。


>>正規のユーザからのパスワード入力ミスで記録されたログは都度削除するという
>>運用にした方が良いのでしょうか?

>同じIPアドレスからログインを記録したらそのIPアドレスの名前がついたファイルを
>/var/log/swatchから削除するためのスクリプトをswatch_action.shを真似て作って
>みてもいいと思います。

>・認証に成功したログを取り出し
>・そのログに記録されている接続場所を正しくしてい
>・rm /var/log/swatch/$IPADDR

>上記が出来れば、可能ですね。

ログインの記録から正規ユーザの判断をするという方法がありましたね。
参考にさせて頂きます。


>>2つ目の質問は1つ目の質問と重複する部分がありますが、dovecotの不正アクセス
>>の対策を行いたいと思います。
>>正規のユーザでもメーラを開く度に、パスワードを入力されておりパスワードを
>>間違える可能性があります。
>>
>>これを正規ユーザ名でパスワードを間違えた場合は、ログに記録しないという
>>事は可能でしょうか?

>やるとしたら、こちらのサイトで提供されているスクリプトでは限界を感じます。
>今は接続元情報がどこに記載されているか、またはlockするかのオプションを加えています。
>これに、接続に利用したユーザー名を取得できるようにオプションをつけ、
>取得したユーザが存在するかを確認し、
>存在する場合は、処理を行なわない
>ということが出来れば可能です。

>もし、ユーザー名にプレフィックスがあれば、user_などの接頭語などがあれば、
>ソレを含むログは除外することで可能になると思います。全ユーザー名を使って
>フィルタすることも出来ると思いますが、処理が大変になると思います。

dovecotの不正アクセスに関しては簡易的ではありますが、正規ユーザを判断するためにログ
からユーザ名部分を取り出し、/home以下のユーザ名と比較をして一致すれば正規ユーザとい
う条件を付け加えました。

メール監視用だけ別アクションスクリプトを作成しました。
※swatch_ation.shの中に埋め込んでみたのですが、処理の分岐がうまくできませんでした。
functionを使ってシェル関数化すれば良かったのかもしれませんが、うまくできませんでした。
1つのスクリプトにまとめることができるのであればまとめたいのでヒントがあれば下さい。

# cat /usr/local/bin/swatch_action-m.sh
-----------------------------------------------------------
PATH=/bin:/sbin:/usr/bin
LANG=C

# 規制IPアドレス情報メール通知先設定
# ※メール通知しない場合は下記をコメントアウト
mail=root

# ログを標準入力から取得
read LOG

# 以下作成部分
USERLIST1=`echo $LOG|cut -d "<" -f 2 -s |cut -d ">" -f 1 -s`
if [ -z $USERLIST1 ]; then
echo $LOG >> /var/log/swatch/swatch.log
exit
fi

for USERLIST2 in `ls /home`; do
if [ $USERLIST1 = $USERLIST2 ]; then
echo $LOG >> /var/log/swatch/swatch.log
exit
fi
done

以下swatch_action.shと同じ
-----------------------------------------------------------

swatch設定ファイルは以下のように作成しました。
# cat /etc/swatch/maillog.conf
-----------------------------------------------------------
# logfile /var/log/maillog

watchfor /pop3-login: Disconnected/
pipe "/usr/local/bin/swatch_action-mail.sh 10"
throttle=00:00:10
-----------------------------------------------------------

ちなみに/var/log/maillogの認証失敗ログ?は以下のようなパターンでした
Dec 6 17:35:36 host dovecot: pop3-login: Disconnected: user=<user>, method=PLAIN, rip=::ffff:x.x.x.x, lip=::ffff:x.x.x.x
Dec 6 17:41:22 host dovecot: pop3-login: Disconnected: rip=::ffff:x.x.x.x, lip=::ffff:x.x.x.x, TLS handshake

でも、よく考えたらこんな処理をしなくてもペングイン様の回答にあった、認証に成功した
ログを取り出してそのIPアドレスを削除するようにすれば良いですね。
各ユーザには「パスワードを連続して3回間違えたら1時間アクセス規制がかかります」とい
う通知をして。
記事編集 編集
Re: SWATCHの監視について このメッセージに返信する
日時: 2011/12/07 22:10
名前: ペングイン
URL: http://blog.trippyboy.com
認証失敗が正しいユーザーで行われた場合に、swatchの処理をスキップさせる方法を考えてみました。

@LOGを読む
Aログにdovecot-authが含まれているか確認
B含まれていたらユーザー抽出
C抽出したユーザーを/etc/passwdと比較
D存在する場合は/var/log/swatch.logにログを吐いてswatch処理終了

という風にしてみます。

【対象のログフォーマット】/var/log/secureに出力される以下を用いることにしました。

Dec 7 20:50:50 vps1 dovecot-auth: pam_unix(dovecot:auth): authentication failure; logname= uid=0 euid=0 tty=dovecot ruser= rhost=::ffff:127.0.0.1 user=hello

○理由○

/var/log/maillogのDisconnectedだけでは、認証失敗は判断できないこと。
/var/log/secureのユーザー情報の方が取り出しやすいから。

--- 以下スクリプト ---
〜省略〜

# ログを標準入力から取得
read LOG

># ログにdovecot-authをふくむか確認
echo $LOG | grep -sq dovecot-auth ; dovecotlog=$?

># デバッグ用
># echo $dovecotlog ; exit

># もし、$LOGにdovecot-authを含む場合
if [ $dovecotlog -eq 0 ]; then 

># LOGINUSERにユーザー情報を入れる
LOGINUSER=`echo "$LOG"|cut -d "=" -f 8 -s`

># LOGINUSERがrootでない場合に限り
if [ $LOGINUSER != "root"]; then

># /etc/passwdに「^$LOGINUSER:」があるか確認
grep -sq "^$LOGINUSER:" /etc/passwd ; exist=$?

># ユーザーが存在する場合、ログを吐いて処理を終了
if [ $exist -eq 0 ] ; then
echo "$LOGINUSER failed to login" >> /var/log/swatch.log
exit
fi
fi
fi

# ログからIPアドレスを抽出
〜省略〜
------------------------

上記で存在するユーザー名での認証失敗はswatchの処理を免れ、かつ/var/log/swatch.logに認証に失敗したユーザーが記録されます。もし、認証ユーザーがrootの場合、そのままswatchはexitすることなく、指定された番目にある情報からIPアドレスを取り出し制限に走ります。

この記述をswatch_action.shに書いて、

# logfile /var/log/secure
watchfor /dovecot-auth.*authentication failure/
pipe "/usr/local/bin/swatch_action.sh 14"
throttle=00:00:10

とすれば、完成です!
で、いかがでしょうか(^_^)
記事編集 編集
Re: SWATCHの監視について このメッセージに返信する
日時: 2011/12/10 09:51
名前: YUTO
URL:
ペングインさん

ありがとうございます。参考にさせていただきます!
教えていただいた方法で解決できそうなので解決済みとします。

>認証失敗が正しいユーザーで行われた場合に、swatchの処理をスキップさせる方法を考えてみました。
>
>@LOGを読む
>Aログにdovecot-authが含まれているか確認
>B含まれていたらユーザー抽出
>C抽出したユーザーを/etc/passwdと比較
>D存在する場合は/var/log/swatch.logにログを吐いてswatch処理終了
>
>という風にしてみます。
>
>【対象のログフォーマット】/var/log/secureに出力される以下を用いることにしました。
>
>Dec 7 20:50:50 vps1 dovecot-auth: pam_unix(dovecot:auth): authentication failure; logname= uid=0 euid=0 tty=dovecot ruser= rhost=::ffff:127.0.0.1 user=hello
>
>○理由○
>
>/var/log/maillogのDisconnectedだけでは、認証失敗は判断できないこと。
>/var/log/secureのユーザー情報の方が取り出しやすいから。
>
>--- 以下スクリプト ---
>〜省略〜
>
># ログを標準入力から取得
>read LOG
>
>># ログにdovecot-authをふくむか確認
>echo $LOG | grep -sq dovecot-auth ; dovecotlog=$?
>
>># デバッグ用
>># echo $dovecotlog ; exit
>
>># もし、$LOGにdovecot-authを含む場合
>if [ $dovecotlog -eq 0 ]; then 
>
>># LOGINUSERにユーザー情報を入れる
> LOGINUSER=`echo "$LOG"|cut -d "=" -f 8 -s`
>
>># LOGINUSERがrootでない場合に限り
>if [ $LOGINUSER != "root"]; then
>
> ># /etc/passwdに「^$LOGINUSER:」があるか確認
> grep -sq "^$LOGINUSER:" /etc/passwd ; exist=$?
>
> ># ユーザーが存在する場合、ログを吐いて処理を終了
> if [ $exist -eq 0 ] ; then
> echo "$LOGINUSER failed to login" >> /var/log/swatch.log
> exit
> fi
>fi
>fi
>
># ログからIPアドレスを抽出
>〜省略〜
>------------------------
>
>上記で存在するユーザー名での認証失敗はswatchの処理を免れ、かつ/var/log/swatch.logに認証に失敗したユーザーが記録されます。もし、認証ユーザーがrootの場合、そのままswatchはexitすることなく、指定された番目にある情報からIPアドレスを取り出し制限に走ります。
>
>この記述をswatch_action.shに書いて、
>
># logfile /var/log/secure
>watchfor /dovecot-auth.*authentication failure/
> pipe "/usr/local/bin/swatch_action.sh 14"
> throttle=00:00:10
>
>とすれば、完成です!
>で、いかがでしょうか(^_^)
記事編集 編集
件名※必須
名前※必須
URL
任意のパスワード (投稿後のコメント修正・削除時に使用)
画像認証※必須 投稿キー(画像で表示されている数字を入力)
コメント※必須

※質問を投稿後に自己解決された場合は、原因と行った対処を具体的に書き込み下さるよう、よろしくお願いします。

- WEB PATIO -