DNSBLを使ってCOREBlog2スパム対策強化
スパム撃墜数増加を切に望む
- Category(s)
- Zope&Plone
本BlogにNGキーワードによるコメントSPAM、トラックバックSPAM対策を行って早一年。
コメントスパムのほうはいいとしても、問題はトラックバックスパム。NGキーワードを設定してもまた新たなワードでぽつぽつと入ってきてるのですよ。おまけに「これはNGだ!」って登録したキーワードではその後になると来ない。つまり、NGキーワード登録数がどんどん増えていくだけで効果はあまりないと言うわけで 。・゚・(つД`)・゚・。
そこで、思いついたのが DNSBL 。SPAMメール対策では既に qmail+rblsmtpd を使ってやっているんですけど、同じような感じで blog にも同等な機能を実装してみようと。
んで、いろいろ調べていくと、「クライアントIPを逆にした文字列+DNSBLのDNS名」でDNS問い合わせを行って、返答が返ってきたらそいつはBlackListに登録されている。ということが判明。
早速判定するソースを作って、Ploneへの実装は・・・取りあえず External Method として登録して、NGキーワードスパム対策を施してある tbping と validateComment にうだうだ判定文を追加してみました。(COREBlog2スパム対策(まとめ) のソースを既に入れ込んであると仮定してそれからの追加分を・・・)
◆ $[ZOPEINSTANCE]/Extensions/checkDNSBL.py (External Methodとして登録)
########################################################################
#
# isDNSBLResisterdIP( IP Address )
# True : Black IP
# False : White IP
#
#######################################################################
def isDNSBLRegisteredIP( ipaddr ) :
import socket
import re
debug = 0
# DNSBL List
dnslist = ['niku.2ch.net','all.rbl.jp','bsb.spamlookup.net','sbl-xbl.spamhaus.org','bl.spamcop.net']
# White List (Regex)
wlist = ['192\.168\.*','127\.0\.0\.1']
# check IP Addr String
ipaddr=str(ipaddr)
ipaddr=ipaddr.strip()
p = re.compile('^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$')
if p.match(ipaddr) == None:
if debug : print "Illigal IP Addr"
return False
# Check White List
for w in wlist :
p = re.compile( w )
if p.match( ipaddr ) :
return False
# Inquires DNSBLs
ips = ipaddr.split('.')
rtc = False
for dns in dnslist :
addr = ips[3] + '.' + ips[2] + '.' + ips[1] + '.' + ips[0] + '.' + dns
try :
tmp = socket.gethostbyname( addr )
if debug : print "ip=%s rtn = %s" % (tmp,addr)
rtc = True
break
except socket.gaierror :
continue
else :
return True
return rtc
◆ $[ZMI]/portal_skins/custom/validateComment (太文字のところが変えたとこ)
from Products.CMFPlone import transaction_note
REQUEST=context.REQUEST
client_ip=REQUEST.getClientAddr()
moderated = None
reqs = ['title','body']
#See setting and append required field list
if context.getComment_require_author():
reqs.append('author')
if context.getComment_require_email():
reqs.append('email')
if context.getComment_require_url():
reqs.append('url')
errors = []
for key in reqs:
if REQUEST.has_key(key) and not REQUEST[key]:
state.setError(key, 'Please enter a value', new_status='failure')
errors.append(key)
# check BlackList IP
if context.isDNSBLRegisteredIP( client_ip ) :
state.setError(client_ip, 'Your IP Address was resistered in BLACKLIST.', new_status='failure')
moderated = 'BlackList IP'
if moderated == None :
for key in ['title', 'body', 'author', 'email', 'url']:
if REQUEST.has_key(key):
m = context.validateBuzzWords(REQUEST[key], True)
if not m:
state.setError(key, 'Please remove NG words.', new_status='failure')
moderated = 'NG words'
#Try to send mail for Bad comment
if moderated != None:
context.addCommentMail(
author=REQUEST['author'],email=REQUEST['email'],
url=REQUEST['url'],title=REQUEST['title'],
body=REQUEST['body'], moderated=moderated,
remoteip=client_ip)
if state.getErrors():
if moderated == 'BlackList IP' :
state.set(portal_status_message='The comment addition is refused. Your IP is resistered in the blacklist.')
else :
state.set(portal_status_message='Please correct the errors shown.')
return state
◆ $[ZMI]/portal_skins/custom/tbping (太文字のところが変えたとこ)
from Products.CMFCore.utils import getToolByName
from Products.CMFPlone.utils import log
cbtool = getToolByName(context, 'coreblog2_tool')
REQUEST = context.REQUEST
form = REQUEST.form
RESPONSE = context.REQUEST.RESPONSE
entry = context
excerpt = ''
if form.has_key('excerpt'):
excerpt = form['excerpt']
title = cbtool.convert_charcode(form['title'])
blog_name = cbtool.convert_charcode(form['blog_name'])
excerpt = cbtool.convert_charcode(excerpt)
moderated = True
client_ip = REQUEST.getClientAddr()
#Try to add trackback
try:
# !!!STAART modify by shimizukawa!!!
moderated = True
# check BlackList IP
if context.isDNSBLRegisteredIP( client_ip ) :
moderated = False
for text in [title, blog_name, excerpt]:
m = context.validateBuzzWords(text, True)
if not m:
#state.setError(key, 'Please remove NG words.', new_status='failure')
moderated = False
#Try to send mail for Bad comment
if not moderated:
context.addTrackbackMail(
title=title, url='',
blog_name=blog_name,
excerpt=excerpt,
moderated=moderated,
remoteip=client_ip,
message='NEED MODERATE',)
raise 'NEED MODERATE'
# !!!END modify by shimizukawa!!!
#Send notify mail if need
if context.getSend_trackback_notification():
try:
to_addr = context.getNotify_to()
from_addr = context.getNotify_to()
msgbody = context.translate('trackback_notify_body')
elements = {}
for k in ('blog_name','title','excerpt','url','excerpt'):
if form.has_key(k):
elements[k] = REQUEST.form[k]
else:
elements[k] = ''
elements['post_ip'] = client_ip
elements['entry_url'] = context.absolute_url()
msgbody = msgbody % (elements)
msgsubject = context.translate('trackback_notify_title')
mgsheader = """To: %s
From: %s
Mime-Version: 1.0
Content-Type: text/plain; Charset=utf-8
""" % (to_addr,from_addr)
cbtool.send_mail(mgsheader+msgbody, to_addr, from_addr, msgsubject)
except Exception,e:
log( 'COREBlog2/tbping: '
'Some exception occured, %s' % e )
entry.addTrackback2Entry(title=title,url=form['url'],\
blog_name=blog_name,excerpt=excerpt)
return context.tbping_result(client=context,REQUEST=REQUEST,\
error_code=0,message='Thanks :-)')
except:
if moderated:
return context.tbping_result(client=context,REQUEST=REQUEST,\
error_code=1,message='Error occured!')
else:
return context.tbping_result(client=context,REQUEST=REQUEST,\
error_code=1,message='SPAMMER乙')
一番最後の tbping_result() はちょっとしたオチャメですwwww
これで一応設置は完了。はてさて、どれだけ撃墜数が増えるか(wktk。あと、DNSBLチェックメソッドも Plone Product として作り込みたいですねえ。Plone 上から DNSのリスト とか、ホワイトリスト とか変えたいですし。
参照させていただいたサイト
- COREBlog2スパム対策(まとめ) ※これから大元のNGキーワードによるスパム対策を施してます
- ィワタマ|SiDE-b :: RBL(DNSBL)でコメント・スパムをブロックする
- ぜろちゃんねる(0ch BBS Script)掲示板のスパム対策 : Under Construction, Baby
- Zope Tips ※External Methodの登録の仕方を参照しますた
- The URL to Trackback this entry is:
- http://www.maruz.net/blog/148/tbping
HDD\(^o^)/オワタ
ヽ(`Д´)ノウワァン
- Category(s)
- 雑記
なんでこうも立て続けに壊れていく・・・_| ̄|○
理論的にはシステムドライブとは別なのでまだマシですが、物理的には同じなので現在HDD換装作業準備中。換えのHDDはあるけど丸ごと容量空けないといかんので消したり他のdiskに分散させたりと四苦八苦。
・・・うーん。ハード的に壊れたのはこれで2回目(Linux鯖で1回あってこれで2回)。海門もあんまり信頼性ねぇなあ。
否、連続稼働しすぎなのか。(;´Д`)
- The URL to Trackback this entry is:
- http://www.maruz.net/blog/149/tbping
怒濤の出稼ぎ終了
一日インターバル置いてから今度はすきー場DA!
- Category(s)
- 雑記
- The URL to Trackback this entry is:
- http://www.maruz.net/blog/150/tbping
スキー場でのお仕事始動
だめじゃん・・・
本日よりスキー場でのパトなお仕事が始まりました。・・・が、
え~っと、まったくと言っていいほど雪がございません。
もうちょっとあっていいかと思ったのですがこの辺でせいぜい10cm程度。オープンは天然雪でってのは大雪でもこない限りムリくさいです。
んで、今日はというと辞令交付と打ち合わせぐらいで終わり、実質的なお仕事開始は12/13日前後(スキー場オープン2日前)・・・雪ないと仕事できないし。
とまぁそんなわけで、その日までヒマになっちゃいましたwwww
ってか、なんでウチんとこだけ雪少ないの?ヽ(`Д´)ノウワァン おっかしいなあ・・・妙高とか飯山とか結構積もってるっていうのに・・・_| ̄|○
- The URL to Trackback this entry is:
- http://www.maruz.net/blog/151/tbping
キャリア変更
呼び起こされる記憶
- Category(s)
- 雑記
諸事情により、携帯のキャリアを換えました。あれだけ No Thank You!と言ってたのに あう 使いになっちゃったw
機種は W53CA 。FOMAと違ってGPSがデフォであるので、どれでもよかったといえばそうなんですが、ワンセグ搭載機とかは市街地に行かないと見られないから使えねえし、音楽に特化してもしょうがないし、ネタ専用カメラ機能を重視してコレ。お値段は2年間この機種に縛られることになるが、約¥2,500也。
購入可能ラインナップ中、W52Sで電子コンパス内蔵ってのがかなり気になったけどうぉーくまん携帯とか言ってるならいらん罠。
で、いじってみるとなんか見覚えのある画面がゴロゴロと_| ̄|○ 機能設定の項目とかもそうだし、やっぱりこの辺はあうで取り決めてるんだなあ。
・・・うーん、なんか2年前の記憶が呼び起こされますわw さすがに ゴニョゴニョ が違うので ゴニョゴニョ はムリですがもうちょっと変ないじりかたをしてみうわなにをすrqあwせdrftgyふじこlp@:「」
・・・あ。FOMA&PDC機種どうしよう・・・。オクで売っぱらえるかなぅ。
- The URL to Trackback this entry is:
- http://www.maruz.net/blog/152/tbping
携帯いじり
まだまだ覚えてたww
- Category(s)
- 物欲
うーん。なぜだ・・・なぜこうもFOMAより操作で迷いが無いんだwww(←=昔と仕様があんまり変わってないから)
で、 ゴニョゴニョ ないじり方は置いといて取りあえずいじってみてるんですが、やっぱりEXILMと銘打ってるだけあって携帯の割には画像は結構いいですな。普通のコンデジっぽく扱えるのもいいNE☆ ・・・ただ画質とか撮影モードの切替とかはメンドクサイですけど。
表面のボタンについてはなんか押した気がしない。ちょっと小さめ。慣れるのに時間が掛かりそう。 音質云々はあんまりキニシナイのでパスなんですが、デフォルトの着信音のバリエーションがえらい少ない。
あと意外にウチのところではFOMAよりも電波が入りにくいのか受信レベルにバタツキがある。こうなったときは1Xに切り替わってるのかと思いきやヴァリヴァリEV-DO。・・・多分近くにある基地局は一つでEV-DOも入ってるからなんでしょう。
このへんはヴァリ3がデフォってのを期待してたのでちょっと残念です。
・・・で、ここからヲレカスタマイズへの道第一弾。「えせ着うたをぶち込む」
取りあえず携帯動画変換君でN903i用に作った*.3gpファイルをmicroSD経由でぶち込んでみましたけど、音は聞こえど着信音には設定出来ず。調べてみるとこういうことらしい(↓)。
つ 価格.com - au EXILIMケータイ W53CA クチコミ
うーん。いろいろ試してみないとダメなのね・・・(;´Д`)
- The URL to Trackback this entry is:
- http://www.maruz.net/blog/154/tbping
某さいどびじねす中
このネタはある人にしか分からないw
- Category(s)
- WORKS
現在、とあるさいどびじねすをやっています。これをやってるとやっぱりヲレはこっち側の人間だなーと思わずにはいられません。おもすれえおもすれえ。ここで声を大にして
再びジオンの理想を掲げるために・・・
星の屑成就のために・・・!
ソロモンよ!私は帰ってきた!!!!
・・・と言いいたい気分ですよww 内容はナナメ上行ってますがだいたいはそんな感じwww
しかし、こんなところで趣味の延長上だったスキルが役に立つとは思わなかったですよ。根底部分は仕事でやってたのでいいんですが、その他の部分は完全趣味でやってた範疇ですからねえ。プロジェクト管理もこれまた趣味の範疇で使っていた Trac + Subversion でやって、そのツールとして TortoiseSVN を導入してやってたり(もちろん情報漏れ防止の為BTS鯖はローカルの範囲で)。
この管理態勢もかなり気に入ってます。いやいや、これは(・∀・)イイ!システムだ。お仕事してたときもこれがあったらどんなにラクだったか・・・。
- The URL to Trackback this entry is:
- http://www.maruz.net/blog/155/tbping
Re:某さいどびじねす中
SubversionとCVSは今の仕事で使ってるけど、どちらかといえば、
CVSの方が使いやすいかなぁ~
セキュリティーホールがあるみたいで、CVSは使えなくなったみたいだけど・・・;;
Re:某さいどびじねす中
SVN+TracワンセットでってことでCVSは考えてなかったなあw
SVNも(ヲレLinux鯖環境のせいかもしれんが)ファイル単位でコミット出来ないから
不便な面はある。
CVSをベースにしたBTSがあるのかとぐぐってみたけどかなり便利そうなのがあるのね。
つ ttp://www.alles.or.jp/~sogabe/mantis/
セキュリティホール話が無ければかなり揺らいだところだったw
これ喰ったら他は喰えない
今の時期が食べ頃♪
- Category(s)
- 雑記
りんごキタ━━(゚∀゚)━━!!!!
毎年、豊野町にいるオフクロの友人であるリンゴ職人から買っているんですが、タイトル通りにこれ喰ったら他のりんごは喰えなくなるほどウマイ。味は酸味もほどほどで甘みも・・・とにかく「濃厚」なんですよ、ほんとに。
この職人さんはかなり完熟にコダワリを持っていて、只今収穫の真っ最中。種類はサンフジってやつみたいですが、収穫を遅らしてる分、このありえんくらいな蜜が詰まってる訳で。
ちょwwクレwww と思った方はヲレ宛にメールを飛ばして下さい。あんただれ?ってのは破棄しちゃいますが、知ってる使徒であれば詳しい注文方法を教えます。・・・個人で販売してるもので。でも、かなり安いと思いますょ?
- The URL to Trackback this entry is:
- http://www.maruz.net/blog/156/tbping
Re:これ喰ったら他は喰えない
さすが豊野産のりんごですね。
自分もファンです。
オフクロの実家がリンゴ屋でいつももらってきりだけど旨いですよね。
意外とまるさんのリンゴと同じだったりして(*^-^)ニコ
Re:これ喰ったら他は喰えない
おっっっっっ!!!
これはビックリ。全く同じです>オフクロの実家が豊野
まぁ豊野って言ったらまずはりんごですしね。市内とか平坦なところで作るよりも
山の斜面とかで作った方が水はけがよくておいしいとかってよく言いますし。
うーん。なんか同じところという可能性がかなりあるようなwあとでメッセ送りますね。
Re:これ喰ったら他は喰えない
むう、美味そうですな。
購入方法きぼんぬ
Re:これ喰ったら他は喰えない
あいよ~。ミクシメッセ飛ばすねん。
まるさんの携帯って実は自分もほしかったですが高くて手が出せなかったです(泣
デザインも画素数も最高www♪
なんていってもEXILMのブランドがいい
結局安いW52CA
今までボーダフォンだったら使い勝手がガラッと変わって今でも操作が出来切れてないかも
やっぱauっていいですね。電波が入るのが一番よかった
今までは家の中でさえ電波が入らなく。。。。
↑よかったぁ
ちゃんとコメントできてた(*^-^)ニコ
いやー教えていただきありがとうございました。>コメントできない
今はバグも直して完全復活です。
W53CAは今回0円ラインナップになってて南バイパスのヤマダで買ってきました。
(フルサポートコース(機種2年縛り)でですけど・・・)
>やっぱauっていいですね。電波が入るのが一番よかった
そう、auに換えた最大の理由はこれです。FOMAもデュアルでPDCも持ってないと僻地に行ったら
使い物にならないですしねえ・・・。
(↑06年に北海道へ行ったとき知り合った人がコレで泣いてましたw)