![]() |
![]() |
| |||||||
|
巻き戻し中。
|
|
2008-07-20(日)
修正 [長年日記]
_
ssh防御ツール
改良完了。
cron止めて、手動で実験しながら。
会社のVPN経由でアタックを掛けて、状況をモニタ。
入り口が2ヶ所無いと、実験した途端にアクセス不能で終了になってしまうwww
どうやら、1時間あたりの閾値を越えるリストがおかしい。
空行を含んじゃうのね。
で、253行目をちょっと変更。
早速会社のマシンにも移植。
以下source
#!/bin/sh # # ssh_chk.sh By H.Uekusa 2007 # Ver 2.02 2008.7.20 # Automated defending tool for ssh attack. # This command must be set on the cron with every minutes ############################################################################### # # You should set # $SHPATH [$TMP]/total_min_ipfw_add_cmd.txt # $SHPATH [$TMP]/total_hour_ipfw_add_cmd.txt # in /etc/rc.local # ############################################################################### ############################################################################### # Set variable for location of commands, Path of files... ############################################################################### CATPATH="/bin/cat" AWKPATH="/usr/bin/awk" GREPPATH="nice -n 10 /usr/bin/grep --mmap" DIFFPATH="/usr/bin/diff" SORTPATH="/usr/bin/sort" MAILPATH="/usr/bin/mail" DATEPATH="/bin/date" SHPATH="/bin/sh" LOOKUP="/usr/sbin/nslookup" AUTHLOG="/var/log/auth.log" TMP="/var/tmp" LOCKFILE="ssh_chk.lock" PREV_MIN_RECORD="prev_min" # Should be BSD-Firewall IPFWPATH="/sbin/ipfw" # Select to check "attempt" CHK_IP_RESOLV="yes" CHK_IP_MAP="yes" # Set threshold OK_PER_MIN="6" OK_PER_HOUR="20" # Set IPFW parameters IPFW_NUM="00022" PORT="22" IF_NAME="fxp0" # Set valid e-mail! MAILTO="hogehoge@hoge.jp,hogehoge@docomo.ne.jp" ############################################################################### ############################################################################### #check the lock file ############################################################################### if [ -f "$TMP/$LOCKFILE" ];then echo "$0 is executing already" echo "Please wait for a while or remove lock file $LOCKFILE!" exit fi ### put a lock file ### touch $TMP/$LOCKFILE ############################################################################### # #Get date values # ############################################################################### NOW=`$DATEPATH +%Y%m%d%H%M` PREV=`cat $TMP/$PREV_MIN_RECORD` NOW_HOUR=`$DATEPATH +%Y%m%d%H` PREV_HOUR=`$DATEPATH -v -1H +%Y%m%d%H` touch $TMP/ipfw_added.txt $SORTPATH -u $TMP/ipfw_added.txt >$TMP/ipfw_added.txt.sort cp -p $TMP/ipfw_added.txt.sort $TMP/ipfw_added.txt rm -f $TMP/ipfw_added.txt.sort ############################################################################### # #Get failed lines from auth log # ############################################################################### # Find a string for invalid user for FreeBSD 6.x and later $GREPPATH Invalid $AUTHLOG > $TMP/"$NOW"_fail.txt # It's old version of above for FreeBSD 4.x/5.x # $GREPPATH Illegal $AUTHLOG > $TMP/"$NOW"_fail.txt ### Touch the previous file for safe ### touch $TMP/"$PREV"_fail.txt echo "$NOW" > $TMP/$PREV_MIN_RECORD ############################################################################### # #Compare with before one minutes # ############################################################################### $DIFFPATH $TMP/"$NOW"_fail.txt $TMP/"$PREV"_fail.txt |$GREPPATH '^<' > $TMP/diff_raw.txt NONE_STATUS=`$GREPPATH -c ssh $TMP/diff_raw.txt` ############################################################################### # #Detect a probing of ssh from attacker (Selective) #As same as above procedure for normal check # ############################################################################### if [ "$CHK_IP_RESOLV" = "yes" ];then $GREPPATH "POSSIBLE BREAK-IN ATTEMPT" $AUTHLOG |$GREPPATH "getaddrinfo"\ > $TMP/"$NOW"_fail-attack.txt touch $TMP/"$PREV"_fail-attack.txt $DIFFPATH $TMP/"$NOW"_fail-attack.txt $TMP/"$PREV"_fail-attack.txt \ |$GREPPATH '^<' > $TMP/diff_raw-attack.txt NONE_STATUS_ATTACK=`$GREPPATH -c ssh $TMP/diff_raw-attack.txt` else NONE_STATUS_ATTACK="0" fi if [ "$CHK_IP_MAP" = "yes" ];then $GREPPATH "POSSIBLE BREAK-IN ATTEMPT" $AUTHLOG |$GREPPATH "not map back to the address"\ > $TMP/"$NOW"_fail-attack2.txt touch $TMP/"$PREV"_fail-attack2.txt $DIFFPATH $TMP/"$NOW"_fail-attack2.txt $TMP/"$PREV"_fail-attack2.txt\ |$GREPPATH '^<' > $TMP/diff_raw-attack2.txt NONE_STATUS_ATTACK2=`$GREPPATH -c ssh $TMP/diff_raw-attack2.txt` else NONE_STATUS_ATTACK2="0" fi ############################################################################### # # if diff is null, skip all process and exit # ############################################################################### if [ "$NONE_STATUS" = "0" ];then if [ "$NONE_STATUS_ATTACK" = "0" ];then if [ "$NONE_STATUS_ATTACK2" = "0" ];then touch $TMP/"$NOW_HOUR"-summary-hour_count_list.txt touch $TMP/count_list.txt touch $TMP/count_cmd.sh touch $TMP/min_ipfw_add_cmd.txt touch $TMP/min_ipfw_add_cmd_prev.txt touch $TMP/ipfw_added.txt touch $TMP/hour_ipfw_add_cmd.txt touch $TMP/hour_ipfw_add_cmd_prev.txt touch $TMP/"$NOW_HOUR"-hour_count_list.txt rm -f $TMP/"$PREV_HOUR"* rm -f $TMP/$LOCKFILE exit fi fi fi ############################################################################### # #Exec for attack suddenly # ############################################################################### ############################################################################### # For IP resolv ############################################################################### if [ "$NONE_STATUS_ATTACK" != "0" ];then touch $TMP/min_ipfw_add_cmd-attack.txt cp -p $TMP/min_ipfw_add_cmd-attack.txt $TMP/min_ipfw_add_cmd_prev-attack.txt $CATPATH $TMP/"$NOW"_fail-attack.txt|$AWKPATH '{print $12}' | $AWKPATH -F"\]" '{print $1}' \ | $AWKPATH -F'\[' '{print $2}' > $TMP/count_list-attack.txt $SORTPATH -u $TMP/count_list-attack.txt >$TMP/count_list-attack.sort.txt cp -p $TMP/count_list-attack.sort.txt $TMP/count_list-attack.txt rm -f $TMP/count_list-attack.sort.txt $GREPPATH -F -v -f $TMP/ipfw_added.txt $TMP/count_list-attack.txt\ | $AWKPATH -v IPFW_NUM=`echo $IPFW_NUM` -v IF_NAME=`echo $IF_NAME` -v PORT=`echo $PORT` -v IPFWPATH=`echo $IPFWPATH` \ '{ print IPFWPATH" add "IPFW_NUM" deny tcp from "$1"/24 to any "PORT" via "IF_NAME}' > $TMP/min_ipfw_add_cmd-attack.txt $DIFFPATH $TMP/min_ipfw_add_cmd_prev-attack.txt $TMP/min_ipfw_add_cmd-attack.txt|$GREPPATH '^>' if [ "$?" = "0" ]; then $DATEPATH >> $TMP/defend-log $DATEPATH >> $TMP/defend-log.time $SHPATH $TMP/min_ipfw_add_cmd-attack.txt >> $TMP/defend-log $AWKPATH '{print $7}' $TMP/min_ipfw_add_cmd-attack.txt | $AWKPATH -v LOOKUP=`echo $LOOKUP` -F/ \ '{print LOOKUP" "$1}' > $TMP/defend-name-log-attack.cmd $CATPATH $TMP/min_ipfw_add_cmd-attack.txt > $TMP/min_mailbody-attack.txt $SHPATH $TMP/defend-name-log-attack.cmd >> $TMP/min_mailbody-attack.txt echo "by POSSIBLE BREAK-IN ATTEMPT ip-resolv" >> $TMP/min_mailbody-attack.txt $MAILPATH -s "SSH attack detected by minutes" $MAILTO < $TMP/min_mailbody-attack.txt ### to keep when reboot ### $CATPATH $TMP/min_ipfw_add_cmd-attack.txt >> $TMP/total_min_ipfw_add_cmd.txt ### check for double ### $GREPPATH -F -v -f $TMP/ipfw_added.txt $TMP/count_list-attack.txt >> $TMP/ipfw_added.txt fi fi ############################################################################### # For IP reverse map ############################################################################### if [ "$NONE_STATUS_ATTACK2" != "0" ];then touch $TMP/min_ipfw_add_cmd-attack2.txt cp -p $TMP/min_ipfw_add_cmd-attack2.txt $TMP/min_ipfw_add_cmd_prev-attack2.txt $CATPATH $TMP/"$NOW"_fail-attack2.txt|$AWKPATH '{print $7}' > $TMP/count_list-attack2.txt $SORTPATH -u $TMP/count_list-attack2.txt >$TMP/count_list-attack.sort2.txt cp -p $TMP/count_list-attack.sort2.txt $TMP/count_list-attack2.txt rm -f $TMP/count_list-attack.sort2.txt $GREPPATH -F -v -f $TMP/ipfw_added.txt $TMP/count_list-attack2.txt\ | $AWKPATH -v IPFW_NUM=`echo $IPFW_NUM` -v IF_NAME=`echo $IF_NAME` -v PORT=`echo $PORT` -v IPFWPATH=`echo $IPFWPATH` \ '{ print IPFWPATH" add "IPFW_NUM" deny tcp from "$1"/24 to any "PORT" via "IF_NAME}' \ > $TMP/min_ipfw_add_cmd-attack2.txt $DIFFPATH $TMP/min_ipfw_add_cmd_prev-attack2.txt $TMP/min_ipfw_add_cmd-attack2.txt|$GREPPATH '^>' if [ "$?" = "0" ]; then $DATEPATH >> $TMP/defend-log $DATEPATH >> $TMP/defend-log.time $SHPATH $TMP/min_ipfw_add_cmd-attack2.txt >> $TMP/defend-log $AWKPATH '{print $7}' $TMP/min_ipfw_add_cmd-attack2.txt \ | $AWKPATH -v LOOKUP=`echo $LOOKUP` -F/ '{print LOOKUP" "$1}' > $TMP/defend-name-log-attack2.cmd $CATPATH $TMP/min_ipfw_add_cmd-attack2.txt > $TMP/min_mailbody-attack2.txt $SHPATH $TMP/defend-name-log-attack2.cmd >> $TMP/min_mailbody-attack2.txt echo "by POSSIBLE BREAK-IN ATTEMPT ip-reverse-map" >> $TMP/min_mailbody-attack2.txt $MAILPATH -s "SSH attack detected by minutes" $MAILTO < $TMP/min_mailbody-attack2.txt ### to keep when reboot ### $CATPATH $TMP/min_ipfw_add_cmd-attack2.txt >> $TMP/total_min_ipfw_add_cmd.txt ### check for double ### $GREPPATH -F -v -f $TMP/ipfw_added.txt $TMP/count_list-attack2.txt >> $TMP/ipfw_added.txt fi fi ############################################################################### # #Count per min # ############################################################################### $SORTPATH -u +10 $TMP/diff_raw.txt \ |$AWKPATH -v TMP=`echo $TMP` '{print "echo -n \""$11" \"; grep -c "$11" "TMP"/diff_raw.txt"}' > $TMP/count_cmd.sh $SHPATH $TMP/count_cmd.sh > $TMP/count_list.txt ############################################################################### # #Count per hour # ############################################################################### $CATPATH $TMP/count_list.txt >>$TMP/"$NOW_HOUR"-hour_count_list.txt $SORTPATH +1 $TMP/"$NOW_HOUR"-hour_count_list.txt \ |$AWKPATH '{if ( $1 == PREV ) { ADDR = $1; COUNT = COUNT + $2; PREV = ADDR;}\ else { ADDR = $1; print PREV" "COUNT; COUNT = $2 ; PREV = ADDR;} next} END {print $1" "COUNT}'\ |$AWKPATH '{if ($1 != NULL) {print $1}}' >$TMP/"$NOW_HOUR"-summary-hour_count_list.txt ############################################################################### # #Process with threthold # ############################################################################### touch $TMP/ipfw_added.txt ### minutes ### touch $TMP/min_ipfw_add_cmd.txt cp -p $TMP/min_ipfw_add_cmd.txt $TMP/min_ipfw_add_cmd_prev.txt $CATPATH $TMP/count_list.txt | $AWKPATH '{print $1}' \ > $TMP/count_list-addr.txt $GREPPATH -F -v -f $TMP/ipfw_added.txt $TMP/count_list-addr.txt \ > $TMP/count_list-new.txt $GREPPATH -f $TMP/count_list-new.txt $TMP/count_list.txt \ | $AWKPATH -v OK_PER_MIN=`echo $OK_PER_MIN` -v IPFW_NUM=`echo $IPFW_NUM` -v IF_NAME=`echo $IF_NAME`\ -v PORT=`echo $PORT` -v IPFWPATH=`echo $IPFWPATH` \ '{ if ( $2 > OK_PER_MIN ) {print IPFWPATH" add "IPFW_NUM" deny tcp from "$1"/24 to any "PORT" via "IF_NAME}}' \ > $TMP/min_ipfw_add_cmd.txt ### to keep when reboot ### $CATPATH $TMP/min_ipfw_add_cmd.txt >> $TMP/total_min_ipfw_add_cmd.txt ### check for double ### $GREPPATH -f $TMP/count_list-new.txt $TMP/count_list.txt \ | $AWKPATH -v OK_PER_MIN=`echo $OK_PER_MIN` '{ if ( $2 > OK_PER_MIN ) {print $1}}'\ >> $TMP/ipfw_added.txt ### hour ### touch $TMP/hour_ipfw_add_cmd.txt cp -p $TMP/hour_ipfw_add_cmd.txt $TMP/hour_ipfw_add_cmd_prev.txt $CATPATH $TMP/"$NOW_HOUR"-summary-hour_count_list.txt | $AWKPATH '{print $1}' \ > $TMP/"$NOW_HOUR"-summary-hour_count_list-addr.txt $GREPPATH -F -v -f $TMP/ipfw_added.txt $TMP/"$NOW_HOUR"-summary-hour_count_list-addr.txt \ > $TMP/"$NOW_HOUR"-summary-hour_count_list-new.txt $GREPPATH -f $TMP/"$NOW_HOUR"-summary-hour_count_list-new.txt $TMP/"$NOW_HOUR"-summary-hour_count_list.txt \ | $AWKPATH -v OK_PER_HOUR=`echo $OK_PER_HOUR` -v IPFW_NUM=`echo $IPFW_NUM` -v IF_NAME=`echo $IF_NAME` \ -v PORT=`echo $PORT` -v IPFWPATH=`echo $IPFWPATH` \ '{ if ( $2 > OK_PER_HOUR ) {print IPFWPATH" add "IPFW_NUM" deny tcp from "$1"/24 to any "PORT" via "IF_NAME}}' \ > $TMP/hour_ipfw_add_cmd.txt ### to keep when reboot ### $CATPATH $TMP/hour_ipfw_add_cmd.txt >> $TMP/total_hour_ipfw_add_cmd.txt ### check for double ### $GREPPATH -f $TMP/"$NOW_HOUR"-summary-hour_count_list-new.txt $TMP/"$NOW_HOUR"-summary-hour_count_list.txt \ | $AWKPATH -v OK_PER_HOUR=`echo $OK_PER_HOUR` '{ if ( $2 > OK_PER_HOUR ) {print $1}}' >> $TMP/ipfw_added.txt ############################################################################### # # Execute IPFW # ############################################################################### $DIFFPATH $TMP/min_ipfw_add_cmd_prev.txt $TMP/min_ipfw_add_cmd.txt|$GREPPATH '^>' if [ "$?" = "0" ]; then $DATEPATH >> $TMP/defend-log $DATEPATH >> $TMP/defend-log.time $SHPATH $TMP/min_ipfw_add_cmd.txt >> $TMP/defend-log $AWKPATH '{print $7}' $TMP/min_ipfw_add_cmd.txt | $AWKPATH -v LOOKUP=`echo $LOOKUP` -F/ '{print LOOKUP" "$1}'\ > $TMP/defend-name-log.cmd $CATPATH $TMP/min_ipfw_add_cmd.txt > $TMP/min_mailbody.txt $SHPATH $TMP/defend-name-log.cmd >> $TMP/min_mailbody.txt $MAILPATH -s "SSH attack detected by minutes" $MAILTO < $TMP/min_mailbody.txt fi $DIFFPATH $TMP/hour_ipfw_add_cmd_prev.txt $TMP/hour_ipfw_add_cmd.txt|$GREPPATH '^>' if [ "$?" = "0" ]; then $DATEPATH >> $TMP/defend-log $DATEPATH >> $TMP/defend-log.time $SHPATH $TMP/hour_ipfw_add_cmd.txt >> $TMP/defend-log $MAILPATH -s "SSH attack detected by hour" $MAILTO < $TMP/hour_ipfw_add_cmd.txt fi ############################################################################### # #Delete previous files # ############################################################################### rm -f $TMP/"$PREV_HOUR"* rm -f $TMP/$LOCKFILE exit
_
フェンダーレス
SWIFTってショップのこれね。。付けてみた。
両方の差は写真の通り。
うーん、「気は心」程度かなぁ。。。。
重さは、、、ハッキリ言ってアルミだがフェンダーレスキットの方が重い。
_|‾|○ ガクガク
取り付けはボルトオンのはずなのだが、脇のステーが溶接の盛り上がりに当たって微妙にネジが入らない。
仕方がないので、キット側の角をヤスリで削った。*1
それにしても、ナンバーがかなり上向き。
いやいや、警察さんに印象悪そうだwww
見た目はまぁまぁ(*´Д`)スキーリ。
*1 溶接側は鉄、キットはアルミだからなぁ。。
_
お魚クーラー
水の量を見たら、やっぱり減りがちょっと早い。
冷却の風が水面に流れて蒸発させているようだ。
やはり吹きつけで放熱の暖かい風が水面に流れるよりは、吸い出しにしてやった方がマシだろう。
リテールは見ての通り、ホルダも一体なので物理的に裏返しには出来ない。
でもって、ファンの極性ひっくり返して逆転させようとしたけどダメ。
手持ちのCoolerMasterのファンに交換してひっくり返した。
ついでにヒートシンクの水面に大きく開口する側をクリアファイル切って塞いだ。
今度はバッチリだろう。。
2008-07-19(土)
快調 [長年日記]
_
水槽
ちゃんと(?)アルミの園芸用針金で金具を作って、蓋のアクリルも合わせて切り取った。*1
水温は昼間でも27度。
たまーにサーモが点灯するぐらいだから、バランスしている。
グッピーちゃんは涼しいのかヒートシンクの下に良く出てくるようになった。
市販品調べたら、テトラのクーラーがペルチェ式で7.000円ぐらい。
でも、ポンプ必要。
正直、小さな水槽にはオーバースペックも甚だしいな。
電力も70Wも喰う。
これなら、ペルチェが1,000円ぐらいとACアダプタ1,600円ぐらいにジャンクのヒートシンクは随分安上がり。
本当は、排熱側をもうちょっと上にしないと水槽内にファンの風が行ってしまうのだが、今のところ平気みたい。
これ以上気温が上がって問題があれば、現在は吹きつけになっているファンの極性をひっくり返して吸い出しにすればおk。
*1 何故かあるアクリルカッター便利ww
2008-07-18(金)
冷却! [長年日記]
_ とある
会社の装置を冷却したいわけだ。
出来たら液体窒素温度ぐらいまで。
まぁ、そんなに贅沢は言わん。
取り敢えずデカ目のペルチェを引っ張り出して実験。
そう、お魚の冷却もコレを考えているときに出てきた話。
でもって、手持ちの1U用ヒートシンクを組み合わせて、60Wぐらい電力を突っ込んだら。。。
あらら、断熱不足とヒートシンクの容量不足だねぇ。
-10℃ぐらいまでしか行かない。
実験室の室温は25℃。ペルチェが定格85Wまで働けば-30℃は余裕なはずだが。。。*1
そう言えば1U用のヒートシンクだって、普通のはCPUの定格がせいぜい70Wぐらいだもんなぁ。
大きなヒートシンク探すのと、ヒートパイプで筐体にも逃がすことを考えるか。
それとも水冷??
当然、断熱容器も梱包材の発泡スチロールの簡易型じゃなくて真面目にケースとかウレタン加工して作らなきゃ。
*1 最大温度差は60〜70度だ
_
お魚
冷え冷えクーラーできあがり。
市販のファン式じゃないので水も蒸発しない。
ペルチェを挑戦した先人も結構居るみたいだが、大きな水槽には不向き。
ウチぐらいの小型ならベストかも。*1
40mm角のペルチェ*2に6Vで2.5Aぐらい流す。
放熱と吸熱はそれぞれPentium3の純正ヒートシンク。
放熱側はリテールのファンそのままだ。
吸熱側は水に浸ける。
中心に適当に断熱したペルチェ。
ACアダプタは手頃なのが見つからなかったので、秋月の6V/1.8Aを2個並列。*3
実験していたら、ACアダプタもそれなりに熱くなるので、余っていた1U用ヒートシンクを熱伝導テープを介して取り付けた。
固定はビニテで適当スマソ。
25℃の部屋で実験すると、吸熱側は4度ぐらいまで下がる。
でもって、仮にワイヤーハンガーを曲げて取り付け。
32度近くあった水温は、2時間で27度まで下がった。
サーモは26度だから丁度良さそう。
グッピーちゃんも、涼しいのかヒートシンクの下に来ている。
ドジョウちゃんもあと3日待てば涼しい水槽で暴れずに済んだかもしれないなぁ。(´・ω・`)ガッカリ・・・
それにしても見た目がサイバーな水槽だな。
「Intel入ってる」よ。一応www
_
ボンネット
オクで取ったアグメントのダンパー取り付け。
いや、コレ一人でやるのはアルミボンネットだから良いけど、普通の鉄だと無理だ。
元のヒンジとダンパーの金具が共締めだから、一度ボルトを外して片側は自分で支えなきゃならない。
1本目は寝ぼけて左右間違えて付けちゃった。
2本目付ける前に気付いて良かった。
両方付けて閉めたらエライ事になるところだ。*1
感触は。。。うーん素敵!
軽く開け閉めできるし、開く角度もちょっと増えた。
アルミボンネットで軽くても、風で煽られて支えが外れる心配もない。
*1 中古で買ったから説明書無し。
2008-07-17(木)
自決!?(‾▽‾;) [長年日記]
_
どぜう
昨晩から見かけないなぁと思って長男に聞いたら、
「昨日の朝、パパが出掛けた後に水槽から飛び出して干からびてた」だと。
入水じゃなくて、出水自殺だぁ(>_<)
せっかく水槽も新しくしたのに。。
蓋の僅かな隙間を狙って飛び出したらしい。
オイラの顔を見るといつもエサクレって暴れてたから、その勢いかなあ。
2008-07-15(火)
(☆∀☆) [長年日記]
2008-07-14(月)
ばぐぅ [長年日記]
_
ツール
どうやら1分間の閾値と1時間の閾値を超過すると、両方でfirewallを設定してしまう。
うーん、ファイルからgrepして重複を外してるはずなんだが。。。
取り敢えずcronから外して動作検証だな。
(´-ω-`)
_ お誘い
急遽明日の午後から某学会に出席のお誘い。
確かに専門ではあるのだが、狭い業界なので首を突っ込むといろんな役が回ってきそうで怖い。
仕事が研究開発に没頭なら業務の一部になるんだけど、おいらのような何でも屋にとってはちょっとね。。。
研究/開発/製品化/営業/工事に保守と何でもござれだ。
おまけにシステム管理者と来た。
後は経理と経営だけだよ。
2008-07-13(日)
買収 [長年日記]
_
BOINC/WCG
そろそろ国内50位が見えてきた。
鯖更改&作業用PC流用完了で、コンスタントに4,000ポイントぐらいを出せそうだ。
上位は既に1年以上前からやっているので、相当のことがなければ追いつかないな。
20位以内に入るには、この勢いでも1年ぐらい掛かるwww
2008-07-12(土)
ふぅ・・・ [長年日記]
_
ssh攻撃
ツール改良が一応まとまった。
grep -F/fgrepは、単純に使うとちょっと困る。
一行で1分間/1時間のカウントの数字も入っているので、行単位の比較だと含まれちゃう。
ちょっと無駄だが2段階で比較。
反転の-vはfgrep、ファイル同士だが普通の比較はgrepでどうだろうか。。。
いやいや、それにしても1行が長すぎだな。
「\」で折り返すこと多数。。。
これだけコメント書いて、ファイル吐き出ししてれば動作は分かりやすいと思う。
誰かperl辺りに移植してサクッと動くようにしてけれ。
以下source
【相変わらず/bin/shです(^^ゞ】
#!/bin/sh # # ssh_chk.sh By H.Uekusa 2007 # Ver 2.01 2008.7.13 # Automated defending tool for ssh attack. # This command must be set on the cron with every minutes ############################################################################### # # You should set # $SHPATH [$TMP]/total_min_ipfw_add_cmd.txt # $SHPATH [$TMP]/total_hour_ipfw_add_cmd.txt # in /etc/rc.local # ############################################################################### ############################################################################### # Set variable for location of commands, Path of files... ############################################################################### CATPATH="/bin/cat" AWKPATH="/usr/bin/awk" GREPPATH="nice -n 10 /usr/bin/grep --mmap " DIFFPATH="/usr/bin/diff" SORTPATH="/usr/bin/sort" MAILPATH="/usr/bin/mail" DATEPATH="/bin/date" SHPATH="/bin/sh" LOOKUP="/usr/sbin/nslookup" AUTHLOG="/var/log/auth.log" TMP="/var/tmp" LOCKFILE="ssh_chk.lock" PREV_MIN_RECORD="prev_min" # Should be BSD-Firewall IPFWPATH="/sbin/ipfw" # Select to check "attempt" CHK_IP_RESOLV="yes" CHK_IP_MAP="yes" # Set threshold OK_PER_MIN="4" OK_PER_HOUR="10" # Set IPFW parameters IPFW_NUM="999" PORT="22" IF_NAME="fxp0" # Set valid e-mail! MAILTO="hoge@hoge" ############################################################################### # #check lock file # if [ -f "$TMP/$LOCKFILE" ];then echo "$0 is executing already" echo "Please wait for a while or remove lock file $LOCKFILE!" exit fi # #put a lock file # touch $TMP/$LOCKFILE ############################################################################### # #Get date values # ############################################################################### NOW=`$DATEPATH +%Y%m%d%H%M` PREV=`cat $TMP/$PREV_MIN_RECORD` # PREV=`$DATEPATH -v -1M +%Y%m%d%H%M` NOW_HOUR=`$DATEPATH +%Y%m%d%H` PREV_HOUR=`$DATEPATH -v -1H +%Y%m%d%H` touch $TMP/ipfw_added.txt $SORTPATH -u $TMP/ipfw_added.txt >$TMP/ipfw_added.txt.sort cp -p $TMP/ipfw_added.txt.sort $TMP/ipfw_added.txt rm -f $TMP/ipfw_added.txt.sort ############################################################################### # #Get failed lines from auth log # ############################################################################### # Find a tring for invalid user for FreeBSD 6.x and later $GREPPATH Invalid $AUTHLOG > $TMP/"$NOW"_fail.txt # It's old version of above for FreeBSD 4.x/5.x # $GREPPATH Illegal $AUTHLOG > $TMP/"$NOW"_fail.txt # #Touch the previous file for safe # touch $TMP/"$PREV"_fail.txt echo "$NOW" > $TMP/$PREV_MIN_RECORD ############################################################################### # #Compare with before one minutes # ############################################################################### $DIFFPATH $TMP/"$NOW"_fail.txt $TMP/"$PREV"_fail.txt |$GREPPATH '^<' > $TMP/diff_raw.txt NONE_STATUS=`$GREPPATH -c ssh $TMP/diff_raw.txt` ############################################################################### # #Detect a probing of ssh from attacker (Selective) #As same as above procedure for normal check # ############################################################################### if [ "$CHK_IP_RESOLV" = "yes" ];then $GREPPATH "POSSIBLE BREAK-IN ATTEMPT" $AUTHLOG |$GREPPATH "getaddrinfo"\ > $TMP/"$NOW"_fail-attack.txt touch $TMP/"$PREV"_fail-attack.txt $DIFFPATH $TMP/"$NOW"_fail-attack.txt $TMP/"$PREV"_fail-attack.txt \ |$GREPPATH '^<' > $TMP/diff_raw-attack.txt NONE_STATUS_ATTACK=`$GREPPATH -c ssh $TMP/diff_raw-attack.txt` else NONE_STATUS_ATTACK="0" fi if [ "$CHK_IP_MAP" = "yes" ];then $GREPPATH "POSSIBLE BREAK-IN ATTEMPT" $AUTHLOG |$GREPPATH "not map back to the address"\ > $TMP/"$NOW"_fail-attack2.txt touch $TMP/"$PREV"_fail-attack2.txt $DIFFPATH $TMP/"$NOW"_fail-attack2.txt $TMP/"$PREV"_fail-attack2.txt\ |$GREPPATH '^<' > $TMP/diff_raw-attack2.txt NONE_STATUS_ATTACK2=`$GREPPATH -c ssh $TMP/diff_raw-attack2.txt` else NONE_STATUS_ATTACK2="0" fi ############################################################################### # # if diff is null, skip all process and exit # ############################################################################### if [ "$NONE_STATUS" = "0" ];then if [ "$NONE_STATUS_ATTACK" = "0" ];then if [ "$NONE_STATUS_ATTACK2" = "0" ];then touch $TMP/"$NOW_HOUR"-summary-hour_count_list.txt touch $TMP/count_list.txt touch $TMP/count_cmd.sh touch $TMP/min_ipfw_add_cmd.txt touch $TMP/min_ipfw_add_cmd_prev.txt touch $TMP/ipfw_added.txt touch $TMP/hour_ipfw_add_cmd.txt touch $TMP/hour_ipfw_add_cmd_prev.txt touch $TMP/"$NOW_HOUR"-hour_count_list.txt rm -f $TMP/"$PREV_HOUR"* rm -f $TMP/$LOCKFILE exit fi fi fi ############################################################################### # #Exec for attack suddenly # ############################################################################### ############################################################################### # For IP resolv ############################################################################### if [ "$NONE_STATUS_ATTACK" != "0" ];then touch $TMP/min_ipfw_add_cmd-attack.txt cp -p $TMP/min_ipfw_add_cmd-attack.txt $TMP/min_ipfw_add_cmd_prev-attack.txt $CATPATH $TMP/"$NOW"_fail-attack.txt|$AWKPATH '{print $12}' | $AWKPATH -F"\]" '{print $1}' \ | $AWKPATH -F'\[' '{print $2}' > $TMP/count_list-attack.txt $SORTPATH -u $TMP/count_list-attack.txt >$TMP/count_list-attack.sort.txt cp -p $TMP/count_list-attack.sort.txt $TMP/count_list-attack.txt rm -f $TMP/count_list-attack.sort.txt $GREPPATH -F -v -f $TMP/ipfw_added.txt $TMP/count_list-attack.txt\ | $AWKPATH -v IPFW_NUM=`echo $IPFW_NUM` -v IF_NAME=`echo $IF_NAME` \ -v PORT=`echo $PORT` -v IPFWPATH=`echo $IPFWPATH` \ '{ print IPFWPATH" add "IPFW_NUM" deny tcp from "$1"/24 to any "PORT" via "IF_NAME}' \ > $TMP/min_ipfw_add_cmd-attack.txt $DIFFPATH $TMP/min_ipfw_add_cmd_prev-attack.txt $TMP/min_ipfw_add_cmd-attack.txt|$GREPPATH '^>' if [ "$?" = "0" ]; then $DATEPATH >> $TMP/defend-log $DATEPATH >> $TMP/defend-log.time $SHPATH $TMP/min_ipfw_add_cmd-attack.txt >> $TMP/defend-log $AWKPATH '{print $7}' $TMP/min_ipfw_add_cmd-attack.txt | $AWKPATH -v LOOKUP=`echo $LOOKUP` -F/ \ '{print LOOKUP" "$1}' > $TMP/defend-name-log-attack.cmd $CATPATH $TMP/min_ipfw_add_cmd-attack.txt > $TMP/min_mailbody-attack.txt $SHPATH $TMP/defend-name-log-attack.cmd >> $TMP/min_mailbody-attack.txt echo "by POSSIBLE BREAK-IN ATTEMPT ip-resolv" >> $TMP/min_mailbody-attack.txt $MAILPATH -s "SSH attack detected by minutes" $MAILTO < $TMP/min_mailbody-attack.txt ### to keep when reboot ### $CATPATH $TMP/min_ipfw_add_cmd-attack.txt >> $TMP/total_min_ipfw_add_cmd.txt ### check for double ### $GREPPATH -F -v -f $TMP/ipfw_added.txt $TMP/count_list-attack.txt >> $TMP/ipfw_added.txt fi fi ############################################################################### # For IP reverse map ############################################################################### if [ "$NONE_STATUS_ATTACK2" != "0" ];then touch $TMP/min_ipfw_add_cmd-attack2.txt cp -p $TMP/min_ipfw_add_cmd-attack2.txt $TMP/min_ipfw_add_cmd_prev-attack2.txt $CATPATH $TMP/"$NOW"_fail-attack2.txt|$AWKPATH '{print $7}' > $TMP/count_list-attack2.txt $SORTPATH -u $TMP/count_list-attack2.txt >$TMP/count_list-attack.sort2.txt cp -p $TMP/count_list-attack.sort2.txt $TMP/count_list-attack2.txt rm -f $TMP/count_list-attack.sort2.txt $GREPPATH -F -v -f $TMP/ipfw_added.txt $TMP/count_list-attack2.txt\ | $AWKPATH -v IPFW_NUM=`echo $IPFW_NUM` -v IF_NAME=`echo $IF_NAME` \ -v PORT=`echo $PORT` -v IPFWPATH=`echo $IPFWPATH` \ '{ print IPFWPATH" add "IPFW_NUM" deny tcp from "$1"/24 to any "PORT" via "IF_NAME}' \ > $TMP/min_ipfw_add_cmd-attack2.txt $DIFFPATH $TMP/min_ipfw_add_cmd_prev-attack2.txt $TMP/min_ipfw_add_cmd-attack2.txt|$GREPPATH '^>' if [ "$?" = "0" ]; then $DATEPATH >> $TMP/defend-log $DATEPATH >> $TMP/defend-log.time $SHPATH $TMP/min_ipfw_add_cmd-attack2.txt >> $TMP/defend-log $AWKPATH '{print $7}' $TMP/min_ipfw_add_cmd-attack2.txt \ | $AWKPATH -v LOOKUP=`echo $LOOKUP` -F/ '{print LOOKUP" "$1}' \ > $TMP/defend-name-log-attack2.cmd $CATPATH $TMP/min_ipfw_add_cmd-attack2.txt > $TMP/min_mailbody-attack2.txt $SHPATH $TMP/defend-name-log-attack2.cmd >> $TMP/min_mailbody-attack2.txt echo "by POSSIBLE BREAK-IN ATTEMPT ip-reverse-map" >> $TMP/min_mailbody-attack2.txt $MAILPATH -s "SSH attack detected by minutes" $MAILTO < $TMP/min_mailbody-attack2.txt ### to keep when reboot ### $CATPATH $TMP/min_ipfw_add_cmd-attack2.txt >> $TMP/total_min_ipfw_add_cmd.txt ### check for double ### $GREPPATH -F -v -f $TMP/ipfw_added.txt $TMP/count_list-attack2.txt >> $TMP/ipfw_added.txt fi fi ############################################################################### # #Count per min # ############################################################################### $SORTPATH -u +10 $TMP/diff_raw.txt \ |$AWKPATH -v TMP=`echo $TMP` '{print "echo -n \""$11" \"; grep -c "$11" "TMP"/diff_raw.txt"}' \ > $TMP/count_cmd.sh $SHPATH $TMP/count_cmd.sh > $TMP/count_list.txt ############################################################################### # #Count per hour # ############################################################################### $CATPATH $TMP/count_list.txt >>$TMP/"$NOW_HOUR"-hour_count_list.txt $SORTPATH +1 $TMP/"$NOW_HOUR"-hour_count_list.txt \ |$AWKPATH '{if ( $1 == PREV ) { ADDR = $1; COUNT = COUNT + $2; PREV = ADDR;}\ else { ADDR = $1; print PREV" "COUNT; COUNT = $2 ; PREV = ADDR;} next} END {print $1" "COUNT}'\ >$TMP/"$NOW_HOUR"-summary-hour_count_list.txt ############################################################################### # #Process with threthold # ############################################################################### touch $TMP/ipfw_added.txt ### minutes ### touch $TMP/min_ipfw_add_cmd.txt cp -p $TMP/min_ipfw_add_cmd.txt $TMP/min_ipfw_add_cmd_prev.txt $CATPATH $TMP/count_list.txt | $AWKPATH '{print $1}' > $TMP/count_list-addr.txt $GREPPATH -F -v -f $TMP/ipfw_added.txt $TMP/count_list-addr.txt > $TMP/count_list-new.txt $GREPPATH -f $TMP/count_list-new.txt $TMP/count_list.txt \ | $AWKPATH -v OK_PER_MIN=`echo $OK_PER_MIN` -v IPFW_NUM=`echo $IPFW_NUM` -v IF_NAME=`echo $IF_NAME`\ -v PORT=`echo $PORT` -v IPFWPATH=`echo $IPFWPATH` \ '{ if ( $2 > OK_PER_MIN ) {print IPFWPATH" add "IPFW_NUM" deny tcp from "$1"/24 to any "PORT" via "IF_NAME}}' \ > $TMP/min_ipfw_add_cmd.txt ### to keep when reboot ### $CATPATH $TMP/min_ipfw_add_cmd.txt >> $TMP/total_min_ipfw_add_cmd.txt ### check for double ### $GREPPATH -F -v -f $TMP/ipfw_added.txt $TMP/count_list.txt \ | $AWKPATH -v OK_PER_MIN=`echo $OK_PER_MIN` '{ if ( $2 > OK_PER_MIN ) {print $1}}'\ >> $TMP/ipfw_added.txt ### hour ### touch $TMP/hour_ipfw_add_cmd.txt cp -p $TMP/hour_ipfw_add_cmd.txt $TMP/hour_ipfw_add_cmd_prev.txt $CATPATH $TMP/"$NOW_HOUR"-summary-hour_count_list.txt \ | $AWKPATH '{print $1}' > $TMP/"$NOW_HOUR"-summary-hour_count_list-addr.txt $GREPPATH -F -v -f $TMP/ipfw_added.txt $TMP/"$NOW_HOUR"-summary-hour_count_list-addr.txt \ > $TMP/"$NOW_HOUR"-summary-hour_count_list-new.txt $GREPPATH -f $TMP/"$NOW_HOUR"-summary-hour_count_list-new.txt $TMP/"$NOW_HOUR"-summary-hour_count_list.txt \ | $AWKPATH -v OK_PER_HOUR=`echo $OK_PER_HOUR` -v IPFW_NUM=`echo $IPFW_NUM` -v IF_NAME=`echo $IF_NAME` \ -v PORT=`echo $PORT` -v IPFWPATH=`echo $IPFWPATH` \ '{ if ( $2 > OK_PER_HOUR ) {print IPFWPATH" add "IPFW_NUM" deny tcp from "$1"/24 to any "PORT" via "IF_NAME}}' \ > $TMP/hour_ipfw_add_cmd.txt ### to keep when reboot ### $CATPATH $TMP/hour_ipfw_add_cmd.txt >> $TMP/total_hour_ipfw_add_cmd.txt ### check for double ### $GREPPATH -F -v -f $TMP/ipfw_added.txt $TMP/"$NOW_HOUR"-summary-hour_count_list.txt \ | $AWKPATH -v OK_PER_HOUR=`echo $OK_PER_HOUR` '{ if ( $2 > OK_PER_HOUR ) {print $1}}' \ >> $TMP/ipfw_added.txt ############################################################################### # # Execute IPFW # ############################################################################### $DIFFPATH $TMP/min_ipfw_add_cmd_prev.txt $TMP/min_ipfw_add_cmd.txt|$GREPPATH '^>' if [ "$?" = "0" ]; then $DATEPATH >> $TMP/defend-log $DATEPATH >> $TMP/defend-log.time $SHPATH $TMP/min_ipfw_add_cmd.txt >> $TMP/defend-log $AWKPATH '{print $7}' $TMP/min_ipfw_add_cmd.txt \ | $AWKPATH -v LOOKUP=`echo $LOOKUP` -F/ '{print LOOKUP" "$1}'\ > $TMP/defend-name-log.cmd $CATPATH $TMP/min_ipfw_add_cmd.txt > $TMP/min_mailbody.txt $SHPATH $TMP/defend-name-log.cmd >> $TMP/min_mailbody.txt $MAILPATH -s "SSH attack detected by minutes" $MAILTO < $TMP/min_mailbody.txt fi $DIFFPATH $TMP/hour_ipfw_add_cmd_prev.txt $TMP/hour_ipfw_add_cmd.txt|$GREPPATH '^>' if [ "$?" = "0" ]; then $DATEPATH >> $TMP/defend-log $DATEPATH >> $TMP/defend-log.time $SHPATH $TMP/hour_ipfw_add_cmd.txt >> $TMP/defend-log $MAILPATH -s "SSH attack detected by hour" $MAILTO < $TMP/hour_ipfw_add_cmd.txt fi ############################################################################### # #Delete previous files # ############################################################################### rm -f $TMP/"$PREV_HOUR"* rm -f $TMP/$LOCKFILE exit
****************************************************** 237 名前: 古代都市ワクテカ(埼玉県)[sage] 投稿日:2008/07/11(金) 10:15:24.73 ID:fSgBiVlt0 俺等って決して高望みなんてしてないよな? 女共が挙げる男の条件って全部無理じゃん。クリア出来るワケが無い。 俺等が求めてるのは常識の範囲内だぜ? 亭主をゴミのように扱わないとか、貯金を横領しないとか、それを「男のわがまま」 と言いますか? ******************************************************泣ける。。。。・゜・(ノД`)・゜・。
2008-07-11(金)
徹夜作業 [長年日記]
_
予定通り
夕方6時から鯖の入れ替え。
RAIDのデータをコピーしている間に軽く一杯*1と思っていたのだが、戻ってきたらコピー失敗。
バックアップの実験の際に出来た.snapを削除するの忘れてた。
コピー元よりコピー先が盛大に大きなサイズになってる。。。orz
やり直して何だかんだと作業が終わったのは午前1時前。
眠いのぉ。
*1 計算では約2時間。丁度良すぎるwww
_
意外な伏兵
降ろした鯖と予備ボードを使って作業用のPCも組み替え。
おいら号は石が1個から2個に増えるだけだからすんなり動いたが、S君作業端末は厄介この上なし。
チップセット変わるしマザボのBOIS設定も違っていて、HDDは見えてもブート出来ず。
結局HDDアクセス方法の「DOS/Other」の違いで見えるまで小一時間、明け方だ。
当然デバイスががらっと変わるので修復インストールだが、何故かHDDが全てPIOモードで檄遅。
ドライバ組み替えてサービスパックやら何やら結局今は朝の10時。
そろそろくたばるか。。。
ネ、ネムイ‥ゴシゴシ(-_\)ゴシゴシ(/_-)
Tweets by RC31E | |||||||||
| |||||||||
| |||||||||
|
_ 池田 [水槽の温度を12℃位にしたいと思うんですが、可能でしょうか?]
_ わし@管理者 [回答は2008/11/11の日記に書いてみました。]