中国フィルターを作った
自社の問い合わせに中国からスパムが来る。 先月辺りからRailsアプリに
require 'ipaddr' class ApplicationController < ActionController::Base protect_from_forgery before_filter :china_filter private def china_filter begin if IPAddr.new("175.42.0.0/15").include?(request.remote_ip) || IPAddr.new("175.44.0.0/16").include?(request.remote_ip) || IPAddr.new("36.248.0.0/14").include?(request.remote_ip) || IPAddr.new("112.111.0.0/16").include?(request.remote_ip) render :text=>"" return end rescue => e logger.info e.message logger.info request.remote_ip.inspect end end end
とかやっていたのですが、敵もさるもので、どんどんIPを変更して スパムを送ってきます。イタチごっこも疲れてきたので、 iptablesで中国を丸ごとフィルタにかけることにしました。
まず、IPdeny IP country CIDR blocksからリストをとってきます。
wget http://www.ipdeny.com/ipblocks/data/countries/cn.zone
を実行すればOKです。 んで、
#!/usr/bin/env ruby open("cn.zone","r").readlines.each do |l| l.strip! system("iptables -A INPUT -i eth0 -s #{l} -j LOG --log-prefix '[CN FILTER]'") system("iptables -A INPUT -i eth0 -s #{l} -j DROP") end
でいいでしょう。1行目はロギングのためのものです。 iptables -L -n |lv とかで確認して下さい。 大丈夫そうなら、iptables-saveで保存して(ubuntuの場合)、再起動した時も読み込まれるようにします。 4600行ぐらいのボリュームなので、これをRailsでやったら酷いことになるとおもって iptablesでフィルタすることにしました。
結果はこれからです。どうなるやら。
追記
とりあえずはうまくはじけているようです。中国からのアクセスを拒否しているログが残っています。 プロキシ使われたらアウトなんですよね。それが問題ですが、とりあえずいいでしょう。