2012年12月31日月曜日

ipレベルで支那からのアクセスを遮断

packageのnginxの場合、GeoIPが入ってないので使用したい場合はリコンパイルが必要。
それが面倒な場合は、支那のipアドレスをチェックしてiptablesで弾く方法もある。

iptablesが入ってなければ入れる

# Debian系
sudo apt-get install iptables
# RedHat系
sudo yum install iptables

怪しいアクセスのipアドレスから情報を取得

whois 124.237.121.117
...
inetnum:        124.236.0.0 - 124.239.255.255
netname:        CHINANET-HE
descr:          CHINANET hebei province network
descr:          China Telecom
descr:          No.31,jingrong street
descr:          Beijing 100032
country:        CN
...

遮断

sudo iptables -I INPUT -s 124.236.0.0/14 -j DROP

確認

sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       all  --  0.0.236.124.broad.sj.he.dynamic.163data.com.cn/14  anywhere            

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

sudo iptables-save 
# Generated by iptables-save v1.4.12 on Wed Dec 19 16:12:42 2012
*filter
:INPUT ACCEPT [225:28595]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [156:236264]
-A INPUT -s 124.236.0.0/14 -j DROP
COMMIT
# Completed on Wed Dec 19 16:12:42 2012


2012年12月17日月曜日

aws-sdk for ruby

rubyでaws simpledbにアクセスする


require 'rubygems'
require 'aws-sdk'

sdb = AWS::SimpleDB.new(                                                                                                                                      
                   :access_key_id => 'XXX',
                   :secret_access_key => 'XXX'
                   )
domain = sdb.domains['domain']
items = AWS::SimpleDB::ItemCollection.new(domain)

items.each do |item|
  p item.attributes.to_h
end

2012年12月13日木曜日

朝鮮猿のアクセスを遮断

Yetiっていうbotがうざいくらいに徘徊してくる。
これNHNのbot。朝鮮botにアクセスされるのは気色悪さこの上ないのでブロックする。

whoisで朝鮮botのipアドレスから情報を調べる

whois 119.235.237.85
...
inetnum:        119.235.237.0 - 119.235.237.255
...

レンジは 119.235.237.0/24 であることが判明。

nginxのdenyに設定

http {
...
# fuck off NHN
deny 119.235.237.0/24;
...
}
コメント重要。どこをdenyにしたか一目瞭然。

2012年12月12日水曜日

geoipで支那朝鮮からのアクセスを遮断

nginxでgeoipを設定する

支那や朝鮮からのアクセスを遮断したい場合、ipアドレスを都度確認してdenyしてまわるのは面倒。
国単位である程度絞れるgeoip便利。
debianの場合。
nginxにgeoip_moduleが組み込まれてなければ、--with_geoip_moduleを付けて再構築する必要あり。

geoipツールインストール

sudo apt-get install libgeoip1 geoip-bin geoip-database 

最新のDBをダウンロード

cd /usr/share/GeoIP
sudo mv -i GeoIP.dat{,.orig}
sudo sh -c 'curl http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz | gzip -cd > GeoIP.dat'

nginx.conf修正

http {
...
    geoip_country /usr/share/GeoIP/GeoIP.dat;
    map $geoip_country_code $allowed_country {
        default  yes;
        CN no; 
        KR no;
        TW no;
    }
...

反映

sudo /etc/init.d/nginx configtest && sudo /etc/init.d/reload

2012年12月8日土曜日

ubuntu 12.04 に nginx をインストールする

ubuntu 12.04に最新のnginxをインストールする

環境

cat /etc/issue.net 
Ubuntu 12.04.1 LTS

uname -m 
x86_64

source.listにnginx repository追加

cat /etc/apt/sources.list.d/nginx.list 
deb http://nginx.org/packages/ubuntu/ quantal nginx
deb-src http://nginx.org/packages/ubuntu/ quantal nginx 

gpg keyインストール

curl http://nginx.org/keys/nginx_signing.key | sudo apt-key add -

nginxインストール

sudo apt-get update
apt-cache show nginx
Package: nginx
Version: 1.2.5-1~quantal
Architecture: amd64
Maintainer: Sergey Budnevitch <sb nginx.com="nginx.com">
Installed-Size: 903
Depends: libc6 (>= 2.14), libpcre3 (>= 8.10), libssl1.0.0 (>= 1.0.0), zlib1g (>= 1:1.1.4), lsb-base, adduser
Provides: httpd
Homepage: http://nginx.org
Priority: optional
Section: httpd
Filename: pool/nginx/n/nginx/nginx_1.2.5-1~quantal_amd64.deb
Size: 414310
SHA256: 2324bef695695d3f95effe0856bfa7634fa57146bac396b2c6132032ce10a1b2
SHA1: 3862cf4cde4a8712bce39c66d0b347e36559b803
MD5sum: 6b68b8d2aad83c024fc67083e20e95bf
Description: HTTP and reverse proxy server, as well as a mail proxy server
 written by Igor Sysoev
...
sudo apt-get install nginx


2012年12月4日火曜日

ruby update file

rubyでファイルを更新する場合

少し悩んだのでメモ。
テンポラリファイルを作って上書きをする手法

require 'tempfile'

orignal_file = '/var/tmp/original'
# オリジナルファイルのstatを取得
orignal_file_stat = File::stat(orignal_file)

basename = "sample"
# tempファイル作成
temp_file = Tempfile.new(basename, "/dev/shm")
# tempファイルのmode変更(デフォルト 0600)
File::chmod(orignal_file_stat.mode, temp_file.path)
# コンテンツ書き込み
temp_file.puts "contents"
# bufferを吐き出す
temp_file.flush
# diskへ書き込む
temp_file.fsync
# 移動(closeの前に移動する)
FileUtils.mv(temp_file.path, orignal_file)
# 閉じる(移動前に閉じるとGCで消される可能性有)
temp_file.close

ruby File.rename

rubyでファイルを移動する場合File.renameを使いますが、これデバイスを跨ぐと使えません。
/dev/shm にファイルを作って /usr/local/var/tmp に移動する場合エラーになる。
その場合は、File.moveを使用と書いてあったけど、ruby1.8以降では非推奨でFileUtils.mvを使用とのこと。