Tsukiji Systems

RSS1.0


googleで
サイト内検索
このブログ
を検索!
  help

巻き戻し中。

2012年
9月
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30


2012-09-12(水) 効果 [長年日記] この日を編集

_ PC 中韓

ipfwのカウント見てると、結構な数をdropしてる。

アドレス帯域で見ると、中国は薄く広く。

韓国は特定のレンジからしつこく来てる。

一方、遮断はポートじゃなくてIP丸ごとなので、sshのブルートフォースを監視してるツールは日に1件以下しか検知しなくなった。

そりゃそうだ、大半の攻撃元はこの2国なんだし。

うざい百度のクローラーも当然バッサリw

_ PC 改良

先日のツール、exitの戻り値はAPNICの更新無しか、指定国の差分無しかが分かるのだけど、

cronのメールはもう少しメッセージがないと状況が分かりにくいので、標準出力にもうちょっと情報出すように改良。

【IP-country-BL.sh】

#!/bin/sh
WGET_CMD="/usr/local/bin/wget"
WGET_URL="http://ftp.apnic.net/pub/stats/apnic/delegated-apnic-latest"
TIME=`date +%Y%m%d%H%M%S`
LOG_DIR="/var/log/ipfwcount"
IFNAME="msk0"
IPFW_CMD="/sbin/ipfw"
C_DIR="/usr/local/etc/IP-country-list"
PERL_CMD="/usr/bin/perl"
# Parameter check
if [ "$1" = "" ];then
        echo 'Usage: IP-country-BL.sh [IPFW-number] [Country code(2byte)]'
        exit 1
fi
if [ "$2" = "" ];then
        echo 'Usage: IP-country-BL.sh [IPFW-number] [Country code(2byte)]'
        exit 1
fi
# Log dir check
if [ ! -d $LOG_DIR ];then
        mkdir $LOG_DIR
fi
# Set variable
IPFWNUM=`echo $1`
COUNTRY=`echo $2`
# File move
if [ -f $C_DIR/IP-country-BL_$COUNTRY.sh ];then
        mv $C_DIR/IP-country-BL_$COUNTRY.sh $C_DIR/IP-country-BL_$COUNTRY.sh.prev
else
        touch $C_DIR/IP-country-BL_$COUNTRY.sh
fi
# Get IP list from APNIC with checking diff
if [ -f $C_DIR/delegated-apnic-latest ];then
        $WGET_CMD -S $WGET_URL --spider -o $C_DIR/wgetlog.tmp
        TIME_STAMP=`grep "Last-Modified" $C_DIR/wgetlog.tmp|awk '{print $4$5$6$7}'`
        TIME_STAMP_LATEST=`grep "Last-Modified" $C_DIR/wgetlog.latest|awk '{print $4$5$6$7}'`
        echo "Current "$TIME_STAMP
        echo "Local "$TIME_STAMP_LATEST
        if [ $TIME_STAMP != $TIME_STAMP_LATEST ];then
                rm -f $C_DIR/delegated-apnic-latest
                $WGET_CMD -S $WGET_URL --spider -o $C_DIR/wgetlog.latest
                $WGET_CMD $WGET_URL -O $C_DIR/delegated-apnic-latest
        fi
else
        rm -f $C_DIR/delegated-apnic-latest
        $WGET_CMD -S $WGET_URL --spider -o $C_DIR/wgetlog.latest
        $WGET_CMD $WGET_URL -O $C_DIR/delegated-apnic-latest
fi
# Exec convert
$PERL_CMD $C_DIR/convert_cidr.pl < $C_DIR/delegated-apnic-latest > $C_DIR/CIDR.txt
/usr/bin/grep $COUNTRY $C_DIR/CIDR.txt|\
awk -v IPFWCMD=`echo $IPFW_CMD` -v IPFWNUM=`echo $IPFWNUM` -v IFNAME=`echo $IFNAME` '{
print IPFWCMD" add "IPFWNUM" deny ip from "$2" to any via "IFNAME
}' > $C_DIR/IP-country-BL_$COUNTRY.sh
# Check diff for each countries
/usr/bin/diff $C_DIR/IP-country-BL_$COUNTRY.sh $C_DIR/IP-country-BL_$COUNTRY.sh.prev
DIFF=`echo $?`
if [ $DIFF != "0" ];then
        echo "Updating IPFW with "IP-country-BL_$COUNTRY.sh
        $IPFW_CMD -a list |grep 00$IPFWNUM > $LOG_DIR/ipfwcount_$COUNTRY.log.$TIME
        $IPFW_CMD delete $IPFWNUM
        /bin/sh $C_DIR/IP-country-BL_$COUNTRY.sh
        exit 2
else
        echo "There is no difference for "$COUNTRY
fi
exit 0

2012-09-09(日) 国別 [長年日記] この日を編集

_ PC IPリスト

自動でipfwに突っ込むツール作成完了。 引数にipfwのルール番号と2文字の国コード入れればおk。 APNICのリストは、wgetのspiderモードで"Last-Modified"が変わったときだけ落とすようにした。 IP+個数をCIDRに変換するperlはこちらのスクリプトを流用。*1 これね 【convert_cidr.pl】
# convert_cidr.pl
#!/usr/bin/perl
#
# 各RIRのIPアドレスデータベース・ファイルより各レコードの開始IPとホスト数をCIDR表記に変換
#
# ARIN:     ftp://ftp.arin.net/pub/stats/arin/delegated-arin-latest
# RIPE NCC: ftp://ftp.ripe.net/pub/stats/ripencc/delegated-ripencc-latest
# APNIC:    ftp://ftp.apnic.net/pub/stats/apnic/delegated-apnic-latest
# LACNIC:   ftp://ftp.lacnic.net/pub/stats/lacnic/delegated-lacnic-latest
# AfriNIC:  ftp://ftp.afrinic.net/pub/stats/afrinic/delegated-afrinic-latest
#
# 使い方
# /usr/bin/perl convert_cidr.pl < delegated-arin-latest > output.txt
#
# 一行出力
sub printrule {
  my $Country=$_[0];
  my $Address=$_[1];
  my $AddressCount=$_[2];
#
  my $SubnetMaskBinCnt = sprintf "%b", scalar($AddressCount);
  $SubnetMaskBinCnt =~ s/1//g;
  my $SubnetBit = (32 - length($SubnetMaskBinCnt));
#
  # calc subnet mask
  my $SubnetMaskBit=(1 << 31);
  my $SubnetMaskVal=0;
  for($j=0; $j<$SubnetBit; $j++) {
    $SubnetMaskVal|=$SubnetMaskBit;
    $SubnetMaskBit>>=1;
  }
  my $SubnetMaskVal1=($SubnetMaskVal >> 24)&255;
  my $SubnetMaskVal2=($SubnetMaskVal >> 16)&255;
  my $SubnetMaskVal3=($SubnetMaskVal >> 8)&255;
  my $SubnetMaskVal4=$SubnetMaskVal&255;
#
  print "$Country\t$Address/$SubnetBit\n";
}
#
while(){
  @TextArray = split(/\|/, $_);
#
# IPv4のみパース実行
  if (lc(@TextArray[2]) eq "ipv4") {
#
# ホスト数を10進数から2進数に変換
    $SubnetMaskBin = sprintf "%b", scalar(@TextArray[4]);
    $SubnetMaskBinCnt = $SubnetMaskBin;
    $SubnetMaskBinCnt =~ s/0//g;
#
# ドットアドレスをドットで分割
    @AddressArray = split(/\./, @TextArray[3]);
    if($#AddressArray < 3){
      next;
    }
#
# 要素数を判定し代入
    $AddressValue  = scalar(@AddressArray[0]) << 24;
    $AddressValue |= scalar(@AddressArray[1]) << 16;
    $AddressValue |= scalar(@AddressArray[2]) << 8;
    $AddressValue |= scalar(@AddressArray[3]);
#
# 2進数に変換のホスト数の長さ(バイト数)繰り返す
              for($i=0; $i 0){
        $AddressStr  = sprintf "%d.", ($AddressValue >> 24) & 255;
          $AddressStr .= sprintf "%d.", ($AddressValue >> 16) & 255;
          $AddressStr .= sprintf "%d.", ($AddressValue >> 8) & 255;
          $AddressStr .= sprintf "%d", $AddressValue & 255;
#
          while($AddressCount > 0){
            $AddressCountSub = $AddressCount;
#
            while(($AddressValue & ($AddressCountSub - 1)) > 0){
              $AddressCountSub /= 2;
            }
#
            $AddressStr  = sprintf "%d.", ($AddressValue >> 24) & 255;
            $AddressStr .= sprintf "%d.", ($AddressValue >> 16) & 255;
            $AddressStr .= sprintf "%d.", ($AddressValue >> 8) & 255;
            $AddressStr .= sprintf "%d", $AddressValue & 255;
#
            printrule(@TextArray[1], $AddressStr, $AddressCountSub);
#
            $AddressValue += $AddressCountSub;
            $AddressCount -= $AddressCountSub;
          }
        }else{
          $AddressStr  = sprintf "%d.", ($AddressValue >> 24) & 255;
          $AddressStr .= sprintf "%d.", ($AddressValue >> 16) & 255;
          $AddressStr .= sprintf "%d.", ($AddressValue >> 8) & 255;
          $AddressStr .= sprintf "%d", $AddressValue & 255;
          $AddressCount = 2 ** (length($SubnetMaskBin) - $i - 1);
#
          printrule(@TextArray[1], $AddressStr, $AddressCount);
#
          $AddressValue += $AddressCount;
        }
      }
    }
  }
}
で、同じディレクトリに下記のshellを置いてcronで叩く。
【IP-country-BL.sh】

*1 あのページ、そのまま表示をコピーしてもエスケープされてる文字列があるので動きません。ソース見てコピーしないとね(;´Д`)

#!/bin/sh
#
WGET_CMD="/usr/local/bin/wget"
WGET_URL="http://ftp.apnic.net/pub/stats/apnic/delegated-apnic-latest"
TIME=`date +%Y%m%d%H%M%S`
LOG_DIR="/var/log/ipfwcount"
IFNAME="msk0"
IPFW_CMD="/sbin/ipfw"
C_DIR="/usr/local/etc/IP-country-list"
PERL_CMD="/usr/bin/perl"
#
# Parameter check
if [ "$1" = "" ];then
        echo 'Usage: IP-country-BL.sh [IPFW-number] [Country code(2byte)]'
        exit 1
fi
if [ "$2" = "" ];then
        echo 'Usage: IP-country-BL.sh [IPFW-number] [Country code(2byte)]'
        exit 1
fi
# Log dir check
if [ ! -d $LOG_DIR ];then
        mkdir $LOG_DIR
fi
# Set variable
IPFWNUM=`echo $1`
COUNTRY=`echo $2`
# File move
if [ -f $C_DIR/IP-country-BL_$COUNTRY.sh ];then
        mv $C_DIR/IP-country-BL_$COUNTRY.sh $C_DIR/IP-country-BL_$COUNTRY.sh.prev
else
        touch $C_DIR/IP-country-BL_$COUNTRY.sh
fi
# Get IP list from APNIC with checking diff
if [ -f $C_DIR/delegated-apnic-latest ];then
        $WGET_CMD -S $WGET_URL --spider -o $C_DIR/wgetlog.tmp
        TIME_STAMP=`grep "Last-Modified" $C_DIR/wgetlog.tmp|awk '{print $4$5$6$7}'`
        TIME_STAMP_LATEST=`grep "Last-Modified" $C_DIR/wgetlog.latest|awk '{print $4$5$6$7}'`
        echo $TIME_STAMP
        echo $TIME_STAMP_LATEST
        if [ $TIME_STAMP != $TIME_STAMP_LATEST ];then
                rm -f $C_DIR/delegated-apnic-latest
                $WGET_CMD -S $WGET_URL --spider -o $C_DIR/wgetlog.latest
                $WGET_CMD $WGET_URL -O $C_DIR/delegated-apnic-latest
        fi
else
        rm -f $C_DIR/delegated-apnic-latest
        $WGET_CMD -S $WGET_URL --spider -o $C_DIR/wgetlog.latest
        $WGET_CMD $WGET_URL -O $C_DIR/delegated-apnic-latest
fi
# Exec convert
$PERL_CMD $C_DIR/convert_cidr.pl < $C_DIR/delegated-apnic-latest > $C_DIR/CIDR.txt
/usr/bin/grep $COUNTRY $C_DIR/CIDR.txt|\
awk -v IPFWCMD=`echo $IPFW_CMD` -v IPFWNUM=`echo $IPFWNUM` -v IFNAME=`echo $IFNAME` '{
print IPFWCMD" add "IPFWNUM" deny ip from "$2" to any via "IFNAME
}' > $C_DIR/IP-country-BL_$COUNTRY.sh
# Check diff for each countries
/usr/bin/diff $C_DIR/IP-country-BL_$COUNTRY.sh $C_DIR/IP-country-BL_$COUNTRY.sh.prev
DIFF=`echo $?`
if [ $DIFF != "0" ];then
        $IPFW_CMD -a list |grep 00$IPFWNUM > $LOG_DIR/ipfwcount_$COUNTRY.log.$TIME
        $IPFW_CMD delete $IPFWNUM
        /bin/sh $C_DIR/IP-country-BL_$COUNTRY.sh
        exit 2
fi
exit 0

_ PC でもって

crontabにはこんな感じで突っ込むと、中韓さよなら(´ー`)/~~

############ IP blacklist by Country #############
5 2 * * * /usr/local/etc/IP-country-list/IP-country-BL.sh 170 CN
7 2 * * * /usr/local/etc/IP-country-list/IP-country-BL.sh 171 KR

_ PC 念のため

再起動時も既存のリストを反映するように、下記をrc.localに]追記。

/bin/sh /usr/local/etc/IP-country-list/IP-country-BL_CN.sh
/bin/sh /usr/local/etc/IP-country-list/IP-country-BL_KR.sh

_ PC 掲載

このリスト、cgiで取れるようにするか定時更新で置くようにしたいな。

仕事上も結構重宝する。

国別に拒否するだけじゃなくて、whitelistで「JPだけ」とかにも使えるわけだし。


2012-09-08(土) \(^o^)/オワタ [長年日記] この日を編集

_ 飲み 合宿

昼過ぎに完了。

そのまま、事業部の連中と軽く昼飯&ビール。

そして懲りずに、昼から開いてるお店でもう少し話し込みながら飲む。

小一時間で撤退。

_ 寄り道

銀座線で隣なので、末広町で降りてアキバ散策。

ジャンク屋で懐かしいの見つけた。BL-3000

「BL-3000」というシリーズ名が懐かしいw

分かる人は間違いなく電話屋系のオサーン。

名前の意味とか分かったら、完全に法人系。

_ 縁日?

某小物屋さんの店頭に、ガイ・フォークスマスクが。ガイ・フォークスマスク

昨今のanonymousの話題もあってか、アキバにも置くようになったんだねぇ。

でもね、縁日じゃないんだから、そうやって吊り下げると怖いでしょwww


2012-09-07(金) 合宿 [長年日記] この日を編集

_ 1泊で

都内に幹部合宿と称して缶詰。

神田で9時開始。

まぁ、普段顔を合わせない他の事業部とか人を知るには良いかもしれん。

_ 飲み 懇親会

当然セット。

本日の飲みグループは無茶しなかったので助かった(;´Д`)


2012-09-05(水) 名刺 [長年日記] この日を編集

_ PC トラップ?

ある人からもらった名刺にバーコードが印刷してあった。

まさかと思ってスマホのリーダーで読んでみた。

pdfファイルへの直リンクだた。

絶 対 ふ ま ね ー ぞ w

でも、wgetしてみちゃうんだろうな、おれ。

トラップは冗談としても、「ほぅら、直接こういうファイル開いちゃ危ないでしょ。てへぺろ(・ω<)」

ぐらいの事は書いてありそうだしw


2012-09-04(火) ブラックリスト [長年日記] この日を編集

_ PC ( ゜ω゜ ) お断りします

基本的に、中国とか韓国は用がないしメールの必要もないし、webページを見てもらう必要もない。

時々いろんなログを見てうざい所はwhoisしてCIDR単位でぶっちぎってるけど面倒。

APNICのリストから、国コードでipfwルールを生成するツールを作成中。

これを改造すると.htaccessで中国なら「魚釣島は日本の領土」、韓国なら「竹島は日本の領土(σ'д`)アッカンベー」とか表示させることも出来るなw

_ PC やっぱり

とあるボット検出システムの話。

サービス始めたら「何で親の敵みたいに韓国のサイトが引っ掛かるんですかねぇ?」と。。。

いや、そりゃ客観的にネットの治安状況見回したら分かるでしょ。

なまじインフラが発達して回線速度も速いところに、全体のリテラシーが低いんだから。

ましてや日本のIPからのアクセス狙い撃ちでマルウェア喰らわすとかやりかねん国民性。

つか、オタクの組織は仕事中にそっち系のサイト見てるヤツが多いんじゃないのかね?


2012-09-02(日) SPF [長年日記] この日を編集

_ PC ついでに

SPFレコードのチェックと書式間違いの修正。

sendmail社のSPFチェッカー便利。

「"v=spf1 a mx ptr a:daemon5.uekusa-com.com include:hogehoge.ne.jp a:61.206.119.196 -all"」

とか書いてあったけど、エラー。

SPFの出始めの頃に、どっかのページを参照して書いたんだけど、ダメダメですね(;´Д`)

いつ頃か忘れたけど、wikiによるとRFCになったのは2006年頃か。

要するに各要素に「+」とか「-」の定義がない。

includeしていた携帯用の外部送信サービスも使っていないし、シンプルに修正。

逆引きの一致(ptr)とか処理の重くなる処理は後ろに移動。

「"v=spf1 +a:daemon5.uekusa-com.com +ip4:61.206.119.196 +a +mx +ptr -all"」

これで、ウチの鯖のFQDNかつ逆引きも出る名前のみが許可されるようになった。

メール送受信に使わない「uekusa.com」は「"v=spf1 -all"」で詐称防止。

SPFの詳細な説明は、インターネット協会のここ

とても分かりやすい。

_ PC 詐称

本当のドメイン名での詐称はSPFである程度防止できるけど、

「uekusa_com.com」とか「ueknsa-com.com」とか紛らわしいドメイン取って、

そこの正当なFromとSPFレコードなら防ぎようがないのが、この仕組みの限界。

いわゆる標的型とか呼ばれる攻撃なら、こういった手段もありそうですな。

_ PC STARTTLS

sendmailの証明書の件、このテストサイトやら、

LogLevelを9から14に上げてみるとかで調査。

証明書が繋がって見えていない感じ。

あ、「O CACERTFile」ってルートの証明書か。

中間証明書と勘違いしてた。

portsのsecurity/ca_root_nssをインストールして、

「O CACERTFile=/usr/local/share/certs/ca-root-nss.crt」

でちゃんと「verify=OK」が出るようになった。

┐(´д`)┌ヤレヤレ

_ 歯医者

7月から、ほぼ毎週通っていたのも今日でファイナル。

先週点検中に見つかった、上の前歯の小さな虫歯を削ってお終いなのだが、

いくら麻酔が効かないからって、相変わらずの麻酔増量で困るw

1時間経っても、上唇が痺れてメシ食えないwww


2012-09-01(土) アフィ [長年日記] この日を編集

_ リンク

一応、ブログの内容に関連するamazonのアイテムを文中に貼ったり、

左上にランダムリンクが出るわけですが。。。。。

3年やっても紹介料は500円に満たないので一度ももらえてませんが、

ネタのつもりで貼ってるわけですよ。

で、思い出したようにamazonの売上レポート見てワロタ。

今年の頭に、ここのリンクからオナホ買ったヤツ誰だよwwwww

少なくとも本文中のリンクには無いはずなんだが。

あえてリンクは貼らんけど。。。


2012-08-31(金) 終電 [長年日記] この日を編集

_ 今週は

結局月曜から木曜まで終電だた。

_ 飲み なので

今日はさすがに逝ったわけですよ。

(;´Д`)


2012-08-28(火) SSL [長年日記] この日を編集

_ PC 証明書

夜中に申し込むと、4時間ぐらいで発行される。

4年で1,000円弱/年はお安いわ。

csr作成時に2,048ビットにしてみた。

早速Apacheとsendmailに設定。

Apacheの場合、

SSLCertificateFile /home/www/conf/cert/ほげほげ.crt(入手した証明書)
SSLCertificateKeyFile /home/www/conf/cert/ほげほげ.key(パスを取っ払った鍵)
SSLCertificateChainFile /home/www/conf/cert/ほげほげ_CA.crt
(証明書発行時に供給された中間証明書)

_ という感じ。

_ PC 忘れずに

「ln -s ほげほげ_CA.crt `openssl x509 -noout -hash -inform pem -in ほげほげ_CA.crt`.0」

で、リンク作成しておかないと中間証明書は読んでくれない。

オレオレ証明書の時は、自己署名だったので中間証明書の意味が無かったけど、今回は設定することでGeoTrustまでつながる。

あとは、httpsで来たらCNとリクエストが一致するように「daemon5.uekusa-.com.com」にrewiteするようにhttpd.confと.htaccessを変更。

RewriteEngine On
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} !daemon5.uekusa-com.com
RewriteRule (.*)?$ https://daemon5.uekusa-com.com%{REQUEST_URI} [R=301,L]

_ 強制的にhttpsにしたいページはこんな感じ。

RewriteCond %{HTTPS} off
RewriteRule (.*)?$ https://daemon5.uekusa-com.com%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} !daemon5.uekusa-com.com
RewriteRule (.*)?$ https://daemon5.uekusa-com.com%{REQUEST_URI} [R=301,L]

_ PC sendmail

こっちは、ベリサインとか、このへん参考に。

Apache同様に中間証明のリンクも作成しておく。

だけど、中間証明は「openssl s_client -connect 鯖のアドレス:465 -CAfile GeoTrustの証明」では検証が失敗する。

どうやら、RapidSSLからメールで送られてきた中間証明じゃなくてRapidSSLとGeoTrustの関係を証明する部分も含んでいる必要があった。

RapidSSLのこのへんの「RapidSSL CA Bundle」を入手。

一応検証おk。

但し、今のところ「verify=OK」になる相手もおらず寂しい感じ。

まだ何か設定が足りないのかも。

sendmail.cfは↓

# CA directory
O CACertPath=/etc/mail/cert
# CA file
O CACertFile=/etc/mail/cert/ほげほげ_CA-RapidSSL.crt
# Server Cert
O ServerCertFile=/etc/mail/cert/ほげほげ.crt
# Server private key
O ServerKeyFile=/etc/mail/cert/ほげほげ.key
# Client Cert
O ClientCertFile=/etc/mail/cert/ほげほげ.crt
# Client private key
O ClientKeyFile=/etc/mail/cert/ほげほげ.key

_ ( ゜Д゜)ネムヒー

そんなこんなで、寝るの忘れていじくり回してた。

眠いわ!w



過去の写真!
After:まぁまぁ綺麗に Before:ばっちぃw さぁ、やるで! 草原w
アクセスカウンター!
累計:
本日:
昨日:
最近のツッコミ

(´・ω・`)ショボーン