«前の日(10-27) 最新 次の日(10-29)» 追記

徒然日記


2004年10月28日(木)

[tdiary] Referer SPAMをiptablesでDROPするscript

yamkさんがTCPセッションを張らせた時点で敗北と言ってるのはもっともで

root権限を持ってるサーバーを運用してるならiptablesでDROPすべきだよねってことでscriptを書いてみました。

sh scriptでwgetで取ってきて〜って言うのでも良かったんだけど無駄にrubyで(笑

#!/usr/bin/env ruby

require 'net/http'
require 'timeout'

# リモートから取得するDeny List
# ['host','path','port'] で指定(portはoptional)
REMOTE_DENY_LIST=['kazuhiko.tdiary.net','/tmp/black_ip.txt']

# リモートからDeny Listを取得
host, path, port = REMOTE_DENY_LIST

if port
  port = port.to_i
else
  port = 80
end

limittime = 10 # 取得時のタイムアウト秒数
timeout( limittime ) do
  begin
    Net::HTTP.version_1_2
    Net::HTTP.start( host, port ) do |http|
      response = http.get( path )
      @spam = response.body
    end
  rescue Exception
  rescue
    $stderr.puts "#{$0}: #{$!.to_s}"
  end
end

# iptablesでIPをDROP
@spam.each do |line|
  system( "iptables -A INPUT -p tcp -s #{line.chomp} --dport 80 -j DROP" )
  puts "Deny access from \"#{line.chomp}\""
end

scriptの拒否IPリスト取得部分はえろぺおさんのtdiary filterを参考にさせてもらいました。

実行すると拒否IPリストをそのたびに取りに行って、iptablesを実行します

ちなみに、iptables -LするとDNSの逆引きをしてくれて時間がかかります。-nオプションを付けましょ〜

今後の野望は前田さんの、一定回数以上のRefererをSPAM認定するtdiary filterと拒否IPリストを組み合わせてiptablesで拒否することですかね。

[neta] ふじこ

記述方法 : [Q]に右手中指、[A]に右手人差し指を置き、左から右へスライドさせると表記できる。

(;・∀・)つ〃∩ ヘェーヘェーヘェーヘェーヘェー

そういうことだったんだー

[news] 国旗・国歌「強制でないのが望ましい」天皇陛下が園遊会で

東京都教育委員を務める棋士の米長邦雄さん(61)から「日本中の学校で国旗を掲げ、国歌を斉唱させることが私の仕事でございます」と話しかけられた際、「やはり、強制になるということではないことが望ましい」と述べた。

 米長さんは「もうもちろんそう、本当に素晴らしいお言葉をいただき、ありがとうございました」と答えた。

いや、いみわかんねーし(笑

[tdiary] Referer SPAMを(略)その2

やっぱり2回目以降の実行では重複して登録されていって、リストがドンドン肥大化するみたいなのでINPUT chainとは別のchainに設定して、それをクリアする、と言う風にしないとダメみたいだ

いろいろやってみたけど、iptables難しいよ…韓国 IP アドレスからのパケットを遮断するを大いに参考にさせてもらいましたやりたいことは同じだしね(苦笑

ついでにDROPしたパケットをsyslogで記録するように。あまりに鬱陶しいようだったらコメントアウトすればいいかな

"# iptablesでIPをロギングしてDROP"以降の行を下のように変えてください

# iptablesでIPをロギングしてDROP
system( "iptables -D INPUT -p tcp --dport 80 -j FILTER")
system( "iptables -F FILTER" )
system( "iptables -X FILTER" )
system( "iptables -F FILTERED" )
system( "iptables -X FILTERED" )
system( "iptables -N FILTER" )
system( "iptables -N FILTERED" )

@spam.each do |line|
  system( "iptables -A FILTER -p tcp -s #{line.chomp} -j FILTERED" )
  puts "Deny access from \"#{line.chomp}\""
end

system( "iptables -A FILTER -j ACCEPT")
system( "iptables -A FILTERED -j LOG --log-level warning --log-prefix '[Referer SPAM] '")
system( "iptables -A FILTERED -j DROP")

system( "iptables -A INPUT -p tcp --dport 80 -j FILTER" )

本体もおいておきますね

[security] QucikTimeにも穴

アップデートすべし

[security] PuTTY β 0.56 ごった煮版

蛭子屋さんによるputty日本語化+設定ファイルini化+色々のバイナリが0.56にアップデート。security updateなのでサクッとアップデート

本日のツッコミ(全1件) [ツッコミを入れる]

# yohgaki [2重登録されます。iptables -L -nの結果をIPアドレスでgrepしてから登録する方が良いかも。後ログが多..]

./20041028.html#c">ツッコミを入れる]



«前の日(10-27) 最新 次の日(10-29)»