|
|
| |||||||
| |||||||||
巻き戻し中。
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2012-09-14(金)
大門最後の日 [長年日記]
_
サイナラ!
大門で最後の夜。
お世話になったお店で飲んだ後、カラオケに巻き込まれるの巻。
当然ながら終電終了、朝までコース(´-ω-`)
ま、普段滅多に行かない人達と朝までやからしたのは結構楽しかったので良しとしましょう(・∀・)
2012-09-12(水)
効果 [長年日記]
_
中韓
ipfwのカウント見てると、結構な数をdropしてる。
アドレス帯域で見ると、中国は薄く広く。
韓国は特定のレンジからしつこく来てる。
一方、遮断はポートじゃなくてIP丸ごとなので、sshのブルートフォースを監視してるツールは日に1件以下しか検知しなくなった。
そりゃそうだ、大半の攻撃元はこの2国なんだし。
うざい百度のクローラーも当然バッサリw
_
改良
先日のツール、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(日)
国別 [長年日記]
_
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
_
でもって
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
_
念のため
再起動時も既存のリストを反映するように、下記を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
2012-09-08(土)
\(^o^)/オワタ [長年日記]
_ 寄り道
銀座線で隣なので、末広町で降りてアキバ散策。
ジャンク屋で懐かしいの見つけた。
「BL-3000」というシリーズ名が懐かしいw
分かる人は間違いなく電話屋系のオサーン。
名前の意味とか分かったら、完全に法人系。
_ 縁日?
某小物屋さんの店頭に、ガイ・フォークスマスクが。
昨今のanonymousの話題もあってか、アキバにも置くようになったんだねぇ。
でもね、縁日じゃないんだから、そうやって吊り下げると怖いでしょwww
2012-09-05(水)
名刺 [長年日記]
_
トラップ?
ある人からもらった名刺にバーコードが印刷してあった。
まさかと思ってスマホのリーダーで読んでみた。
pdfファイルへの直リンクだた。
絶 対 ふ ま ね ー ぞ w
でも、wgetしてみちゃうんだろうな、おれ。
トラップは冗談としても、「ほぅら、直接こういうファイル開いちゃ危ないでしょ。てへぺろ(・ω<)」
ぐらいの事は書いてありそうだしw
2012-09-04(火)
ブラックリスト [長年日記]
_
( ゜ω゜ ) お断りします
基本的に、中国とか韓国は用がないしメールの必要もないし、webページを見てもらう必要もない。
時々いろんなログを見てうざい所はwhoisしてCIDR単位でぶっちぎってるけど面倒。
APNICのリストから、国コードでipfwルールを生成するツールを作成中。
これを改造すると.htaccessで中国なら「魚釣島は日本の領土」、韓国なら「竹島は日本の領土(σ'д`)アッカンベー」とか表示させることも出来るなw
_
やっぱり
とあるボット検出システムの話。
サービス始めたら「何で親の敵みたいに韓国のサイトが引っ掛かるんですかねぇ?」と。。。
いや、そりゃ客観的にネットの治安状況見回したら分かるでしょ。
なまじインフラが発達して回線速度も速いところに、全体のリテラシーが低いんだから。
ましてや日本のIPからのアクセス狙い撃ちでマルウェア喰らわすとかやりかねん国民性。
つか、オタクの組織は仕事中にそっち系のサイト見てるヤツが多いんじゃないのかね?
2012-09-02(日)
SPF [長年日記]
_
ついでに
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の詳細な説明は、インターネット協会のここ。
とても分かりやすい。
_
詐称
本当のドメイン名での詐称はSPFである程度防止できるけど、
「uekusa_com.com」とか「ueknsa-com.com」とか紛らわしいドメイン取って、
そこの正当なFromとSPFレコードなら防ぎようがないのが、この仕組みの限界。
いわゆる標的型とか呼ばれる攻撃なら、こういった手段もありそうですな。
_
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
少なくとも本文中のリンクには無いはずなんだが。
あえてリンクは貼らんけど。。。
| Tweets by RC31E | |||||||||
| |||||||||
| |||||||||


