iptablesでTorを遮断する CentOS5.7

最近Torを悪用した不正行為が目立つのでブラックリストに載っているTorからのパケットをiptablesを使って全て破棄する単純明快なスクリプトです。cronなどに登録して定期的に実行するようにします。

#!/usr/bin/bash
############################################
# Tor Blocking for iptables
############################################

URLS[0]=http://torstatus.blutmagie.de/ip_list_exit.php/Tor_ip_list_EXIT.csv
URLS[1]=http://tns.hermetix.org/ip_list_exit.php/Tor_ip_list_EXIT.csv

for URL in ${URLS[@]}
do
    wget $URL -O - |
    while read IP
    do
        [[ $IP =~ ^[0-9]+.[0-9]+.[0-9]+.[0-9]+$ ]] && iptables -I INPUT -s $IP -j DROP
    done
done

Raspberry Pi wiringpi WiringPi-Python インストール

GPIOを使うのに標準のライブラリよりも使い勝手のよさそうなライブラリを発見したためこちらを使うことにした。

$ sudo apt-get install git python-dev python-setuptools # 必要なパッケージをインストールする
$ cd /tmp # 当然だが/tmpは再起動すると中身が削除されるため注意する
$ git clone https://github.com/WiringPi/WiringPi-Python.git
$ cd WiringPi-Python
$ git submodule update –init
$ sudo cp WiringPi/wiringPi/*.h /usr/include/ # ヘッダーファイルが無いと怒られるためコピーしておく
$ sudo python setup.py install
$ cd

サンプルコード

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import wiringpi
import time

if __name__ == '__main__':
    io = wiringpi.GPIO(wiringpi.GPIO.WPI_MODE_GPIO)
    io.pinMode(23,io.OUTPUT)
    io.digitalWrite(23,io.HIGH)
    while True:
        io.digitalWrite(23,io.LOW)  # on
        time.sleep(1)
        io.digitalWrite(23,io.HIGH) # off
        time.sleep(1)

参考サイト
Raspberry Pi GPIO with Python (without root) – Sirmc.net
fatal error: wiringPi.h: No such file or directory · Issue #7 · WiringPi/WiringPi-Python · GitHub

フリー素材 Raspberry Pi GPIO 配置図 Revision 2.0 (512MB)

ブログやサイトで自由に使えるRaspberry Pi Revision 2.0のGPIOの配置図が欲しかったので作成してみました。
MicroSoft Office PowerPoint 2010形式で白黒版とカラー版を準備しました。自由にご利用ください。改変・再配布しても構いません。

サンプル カラー版のGPIO配置図
Raspberry_Pi_GPIO

ダウンロード(pptx形式)

※ ピンのピッチなどの縮尺は考慮致しておりません。ご了承ください。
※ サーバへ負荷がかかるためサンプル画像への直リンクはご遠慮ください。

低価格放射線測定器 ポケットガイガー Type5 Arduino Pro mini 接続 紹介と動作テスト

最近ガジェットネタが増えていますが今回は、ポケットガイガー Type5を購入しArduino Pro miniへ接続して動作検証を行なってみました。

そのまま3.5mmプラグを使うのも手であるが今回は基盤へピンプラグ(5P L字)を半田付けします。
IMG_1588[1]

Arduinoへメーカサイトで提供されているサンプルコードをアップロードしブレッドボードを使い双方を接続します。
接続にはデジタルピンを2本(信号パルスが2、ノイズパルスが5)使用します。
IMG_1592[1]

シリアル通信を行うとCSV形式で出力されます。

非常に低価格、6,450円で購入することができ、GM管を使用しないため非常に小型です。

LCD液晶などを接続するなど好みのガイガーカウンタを作成できるようです。

ニキシー管時計 ケース作成

だいぶ今更感がありますが、ニキシー管時計のケースを作成しました。
私には美的センスというものは無いためどういうデザインが良いか悩みましたが、結局加工しやすく比較的機能的であるべきということて画像のようになりました。

image

木材は紫檀を使用し、接着で固定しました。

image

ティッシュ箱みたいな仕組みで上から被せて固定します。

image

レトロ感を演出させるため木目オイルを塗り研磨してみました。

image

image

これで寝室にもリビングにも置けるようになったのかな?
ニキシー管特有の温かみのある光は幻想的で見ていて飽きないですね〜。

MySQL データベース 起動しない 全データベースのダンプ CentOS5.7

データベースへの書き込みが頻繁に行われないサーバである場合は良いがデータベースへの書き込みが頻繁に起こるサーバでは突然電源が切れた場合などに不整合を起こしてMySQLが起動しなくなる事がある。
今回その対応策を記録しておきたいと思う。

起動不能となった時に”/var/log/mysqld.log”へ吐かれるログ

13:22:06 UTC - mysqld got signal 6 ;
This could be because you hit a bug. It is also possible that this binary
or one of the libraries it was linked against is corrupt, improperly built,
or misconfigured. This error can also be caused by malfunctioning hardware.
We will try our best to scrape up some info that will hopefully help
diagnose the problem, but since we have already crashed,
something is definitely wrong and this may fail.

key_buffer_size=8388608
read_buffer_size=131072
max_used_connections=0
max_threads=151
thread_count=0
connection_count=0
It is possible that mysqld could use up to
key_buffer_size + (read_buffer_size + sort_buffer_size)*max_threads = 338528 K  bytes of memory
Hope that's ok; if not, decrease some variables in the equation.

Thread pointer: 0x0
Attempting backtrace. You can use the following information to find out
where mysqld died. If you see no messages after this, something went
terribly wrong...
stack_bottom = 0 thread_stack 0x40000
/usr/libexec/mysqld(my_print_stacktrace+0x2e)[0x7b4e5e]
/usr/libexec/mysqld(handle_fatal_signal+0x3e2)[0x6813c2]
/lib64/libpthread.so.0[0x311a80ebe0]
/lib64/libc.so.6(gsignal+0x35)[0x311a030285]
/lib64/libc.so.6(abort+0x110)[0x311a031d30]
/usr/libexec/mysqld[0x85b911]
/usr/libexec/mysqld[0x85ce80]
/usr/libexec/mysqld[0x920b32]
/usr/libexec/mysqld[0x917b6c]
/usr/libexec/mysqld[0x85a7e5]
/usr/libexec/mysqld[0x84e263]
/usr/libexec/mysqld[0x85141b]
/lib64/libpthread.so.0[0x311a80677d]
/lib64/libc.so.6(clone+0x6d)[0x311a0d325d]
The manual page at http://dev.mysql.com/doc/mysql/en/crashing.html contains
information that should help you find out what is causing the crash.

強制リカバリーモードの設定を行う
# vi /etc/my.cnf

[mysqld]
innodb_force_recovery = 3 # 項目の最後に追記

MySQLを再起動する
# service mysqld restart

データベースのダンプ

# 全データベースのダンプを行う
# mysqldump --events -u root -p -x --all-database > all-database.sql
# ユーザ情報のダンプ
# mysqldump --events -u root -p -x --allow-keywords mysql > allow-keywords.sql

MySQLを停止する
# service mysqld stop

データベースを格納しているディレクトリを移動(バックアップ)する
場所が不明な場合は設定ファイル内の”datadir”を参照する
# mv /var/lib/mysql /var/lib/mysql_bkup

再度データベースを格納するディレクトリを作成する
# mkdir /var/lib/mysql

所有者をmysqlユーザとする
# chown mysql:mysql /var/lib/mysql

強制リカバリーモードの設定を解除する
# vi /etc/my.cnf

[mysqld]
#innodb_force_recovery = 3 # エスケープする

MySQLを起動する
# service mysqld start

ダンプしたデータベースをインポートする

# mysql -u root < all-database.sql
# mysql -u root mysql < allow-keywords.sql

再発しない事を確認するため念のためにMySQLを再起動する
# service mysqld restart

参考サイト
またデータベースサーバがダウンしてました
似非管理者の寂しい夜:MySQLのバックアップではユーザー情報は含まれない – livedoor Blog(ブログ)

YAMAHA RTX1200を導入 L2TP PPTP NAT FW設定例の公開

我が家ではRT58iを長い間利用しておりましたが、いい加減Gigabit対応していこうと今回、RTX1200を購入しました。
NVR500と悩んだ結果、PCと違い長い間お世話になることを考えると少しでもいいものを購入しておいたほうが後で後悔しないだろうということでこちらを買いました。

過去、何処は言えませんがとあるメーカーの安いルータを使用したところ我が家の過酷な環境に耐えられなく数ヶ月で壊れるという事件も起きましたので・・・
RT58iは、そのような我が家の環境でも故障もトラブルも一度も発生させずに長いこと利用できていました。

そんな訳で、YAMAHAのルータは素晴らしいです。

あ、えーっと。この子のお値段は聞かないでください。気がついたらお財布の中が空になってしましました。。。

開封・・・
IMG_1549[1]

IMG_1550[1]

IMG_1552[1]

設定は色々前回のルータから引き継ぎなら下記のようにしてみました。
我が家では固定8IPで運用しております。そのため一般家庭の方は参考にできない部分もあるかもしれませんが・・・・
VPNやNATやFWの設定はもしかすると必要とする人がいるかもしれないと期待して公開してみます。

VPNに関しては下記の環境で正常に動作することを確認しました。
PTPPは、Windows7、OS X Mountain Lion、iOS6.1.2
L2TPは、OS X Mountain Lion、iOS5.0、Android4.0.4
※ L2TPに関してはiOS6.1.2で接続が解除される問題が発生しており現在調査中です。
※ VPNをつないだ状態でWOLを送る事も可能にしております。

リセットの仕方
全面に付いている全て(3箇所)のボタンを同時に押しで電源を入れ完全に起動後に離すことでハードリセットを行うことが可能です。

administrator password *
security class 1 on off off
ip route default gateway pp 1
ip lan1 address 192.168.100.1/24
ip lan1 proxyarp on
ip lan1 secure filter in 100000 100001 100002 100003 100004 100005 190099
ip lan1 wol relay broadcast
ip lan2 nat descriptor 1
pp select 1
 pp always-on on
 pppoe use lan2
 pppoe auto disconnect off
 pp auth accept chap
 pp auth myname USERID PASSWORD
 ppp lcp mru on 1454
 ppp ipcp msext on
 ip pp secure filter in 200000 200001 200002 200003 200008 200009 200010 200011 200012 200013 200014 200015 200016 210000 210001 210002 210003 210004 220000 220001 220002 220003 220004 220005 220006 220007 220008 220009 220010 220011 220012 220013 220014 230000
 ip pp secure filter out 200004 200005 200006 200007 200008 200009 200010 200011 200012 200013 290099 dynamic 230098 230099
 ip pp intrusion detection in on reject=on
 ip pp intrusion detection out on reject=on
 ip pp nat descriptor 1
 pp enable 1
pp select anonymous
 pp bind tunnel1-tunnel2
 pp auth request mschap-v2
 pp auth username USERID PASSWROD
 ppp ipcp ipaddress on
 ppp ipcp msext on
 ppp ccp type mppe-any
 ip pp remote address pool 192.168.100.90-192.168.100.99
 ip pp mtu 1258
 pp enable anonymous
tunnel select 1
 tunnel encapsulation l2tp
 ipsec tunnel 101
  ipsec sa policy 101 1 esp aes-cbc sha-hmac
  ipsec ike keepalive use 1 off
  ipsec ike local address 1 192.168.100.1
  ipsec ike nat-traversal 1 on
  ipsec ike payload type 1 3
  ipsec ike pre-shared-key 1 text PASSWROD
  ipsec ike remote address 1 any
 l2tp tunnel disconnect time off
 l2tp keepalive use on 10 3
 l2tp keepalive log on
 l2tp syslog on
 ip tunnel tcp mss limit auto
 tunnel enable 1
tunnel select 2
 tunnel encapsulation pptp
 pptp tunnel disconnect time off
 tunnel enable 2
ip filter 100000 reject * * udp,tcp 135 *
ip filter 100001 reject * * udp,tcp * 135
ip filter 100002 reject * * udp,tcp netbios_ns-netbios_dgm *
ip filter 100003 reject * * udp,tcp * netbios_ns-netbios_dgm
ip filter 100004 reject * * udp,tcp netbios_ssn *
ip filter 100005 reject * * udp,tcp * netbios_ssn
ip filter 100006 reject * * udp,tcp 445 *
ip filter 100007 reject * * udp,tcp * 445
ip filter 190099 pass * * * * *
ip filter 200000 reject * 192.168.100.200/29 icmp * *
ip filter 200001 reject 172.16.0.0/12 * * * *
ip filter 200002 reject 192.168.0.0/16 * * * *
ip filter 200003 reject 192.168.100.0/24 * * * *
ip filter 200004 reject * 10.0.0.0/8 * * *
ip filter 200005 reject * 172.16.0.0/12 * * *
ip filter 200006 reject * 192.168.0.0/16 * * *
ip filter 200007 reject * 192.168.100.0/24 * * *
ip filter 200008 reject * * udp,tcp 135 *
ip filter 200009 reject * * udp,tcp * 135
ip filter 200010 reject * * udp,tcp netbios_ns-netbios_ssn *
ip filter 200011 reject * * udp,tcp * netbios_ns-netbios_ssn
ip filter 200012 reject * * udp,tcp 445 *
ip filter 200013 reject * * udp,tcp * 445
ip filter 200014 pass * * icmp * *
ip filter 200015 pass * * established * *
ip filter 200016 pass * * tcp * ident
ip filter 210000 pass * 192.168.100.1 esp * *
ip filter 210001 pass * 192.168.100.1 gre * *
ip filter 210002 pass * 192.168.100.1 udp * 500
ip filter 210003 pass * 192.168.100.1 tcp * 1723
ip filter 210004 pass * 192.168.100.1 udp * 4500
ip filter 220000 pass * 192.168.100.100/29 tcp * ftpdata
ip filter 220001 pass * 192.168.100.100/29 tcp * ftpdata
ip filter 220002 pass * 192.168.100.100/29 tcp * 21
ip filter 220003 pass * 192.168.100.100/29 tcp * 22
ip filter 220004 pass * 192.168.100.100/29 tcp * telnet
ip filter 220005 pass * 192.168.100.100/29 tcp * smtp
ip filter 220006 pass * 192.168.100.100/29 tcp * domain
ip filter 220007 pass * 192.168.100.100/29 tcp * 57
ip filter 220008 pass * 192.168.100.100/29 tcp * 58
ip filter 220009 pass * 192.168.100.100/29 tcp * www
ip filter 220010 pass * 192.168.100.100/29 tcp * pop3
ip filter 220011 pass * 192.168.100.100/29 tcp * ntp
ip filter 220012 pass * 192.168.100.100/29 tcp * imap2
ip filter 220013 pass * 192.168.100.100/29 tcp * https
ip filter 220014 pass * 192.168.100.100/29 tcp * 587
ip filter 290099 pass * * * * *
ip filter dynamic 230098 * * tcp
ip filter dynamic 230099 * * udp
nat descriptor type 1 nat-masquerade
nat descriptor address outer 1 A.B.C.0-A.B.C.7
nat descriptor static 1 1 A.B.C.1=192.168.100.101 7
nat descriptor masquerade static 1 1 192.168.100.1 gre
nat descriptor masquerade static 1 2 192.168.100.1 tcp 1723
nat descriptor masquerade static 1 3 192.168.100.1 esp
nat descriptor masquerade static 1 4 192.168.100.1 udp 500
nat descriptor masquerade static 1 5 192.168.100.1 udp 4500
ipsec auto refresh on
ipsec transport 1 101 udp 1701
syslog notice on
syslog debug on
dhcp service server
dhcp server rfc2131 compliant except remain-silent
dhcp scope 1 192.168.100.2-192.168.100.90/24
dns server pp 1
schedule at 1 */* 00:00 * ntpdate ntp.nc.u-tokyo.ac.jp
pptp service on
l2tp service on

YAMAHAルータの利用者が増えるといいですね。

Perl Nmap::Scanner インストール

Perlでnmapを利用したプログラムを書きたくなったので調度良さそうなライブラリを探していたところNmap::Scannerというものを見つけた。

# cpan install Nmap::Scanner
と実行したところエラーが発生した。原因はClass::Generateがインストールできないかららしい。

面倒なことにClass::Generateの現行バージョンはPerl 5.10以上でなければならないらしい。
そこでバージョンを探してみた結果、Class::Generate 1.09があったためこちらを指定してインストールした。

cpan> install S/SW/SWARTIK/Class-Generate-1.09.tar.gz

その後、Nmap::Scannerをもう一度インストールしてみたところ問題なくインストールできた。

まともなサンプルコードも少ないので載せておく。

#!/usr/bin/perl
use Nmap::Scanner;
my $scan = Nmap::Scanner->new();
$scan->add_target('localhost');

my $results = $scan->scan();

my $hosts = $results->get_host_list();

while (my $host = $hosts->get_next()) {
    my $hostname  = $host->hostname();
    my $addresses = join(',', map {$_->addr()} $host->addresses());
    print "Check Host " . $hostname . "\n";
    print "Check Adrr " . $addresses . "\n";

    my $ports = $host->get_port_list();

    while (my $port = $ports->get_next()) {
        my $service = $port->service();
        print join(' ',
            'Port',
            $port->protocol() . '/' . $port->portid(),
            'Service',
            $service->name(),
            'is in state',
            $port->state(),
            "\n"
        );
    }

}

dovecot 落ちる dovecotが必死に自殺(終了)するのを全力で阻止してみる 

以前から気になっていたのですが、時間がズレるとDovecotが自分の仕事を放棄して勝手に自滅する問題についてまじめに対策しようかと思います。

Nagiosから夜中に大量にアラートが届くのでもう、管理しているこっちが死にそうです。

どうも、時間が進んでいるところNTPサーバとの同期でいきなり時間が戻るのが原因のようです。

対策としては
ntpdで-xオプションを使用するか、ntp.confに”tinker step 0″を設定する。
Dovecotを諦めてCourier-IMAPを利用する。

Courier-IMAPはVineLinuxでサーバを構築していた時に利用していて良いソフトだったのですが、今回は、うつ気味なDovecotをなんとかなだめて対応したいと思います。

起動オプションを操作する方法はサーバを再構築した際に、設定し忘れる可能性が高いため今回は設定ファイルに記述する方法にしてみました。

ということで、”/etc/ntp.conf”の先頭に下記の設定を追記してみた。
# vi /etc/ntp.conf

# The configuration directive tinker panic 0 instructs NTP not to
# give up if it sees a large jump in time.
tinker panic 0
tinker step 0

※ これらの設定は先頭であるほうが良いようです。

設定の内容
panic 0は時間が大幅にずれた時にNTPDが勝手に終了しないようにする設定
step 0は大きく時間がズレてた場合、一気に時間を修正しないようにする設定

通常の人はここまでで設定完了です。NTPDを再起動しましょう。
# service ntpd restart

VMwareなどを利用してサーバを運営している場合はVMware toolにてホストサーバから時間の同期がなされないことを確認しておく必要が有るようです。

ホストサーバから時間の同期が無効になっていることを確認し
# vmware-toolbox-cmd timesync status
もしも有効になっている場合は無効化しておきます
# vmware-toolbox-cmd timesync disable

参考サイト一覧
dovecotが自殺する(落ちる)件。: ネットワーキングすきま情報
VMware KB: Linux ゲストの時刻管理のベスト プラクティス
【Linux】dovecotが落ちる

今更ながらニキシー管時計キットを購入

ずっと欲しいと思いながらも買う機会がなく過ごしていましたが、本日偶然、秋葉原駅横のラジオセンター2Fにある山本無線e-BOX店でニキシー管時計キットを限定販売しているのを発見し思わず購入してしまいました。

小さめのダンボールに入っています。中身はTubeHobby製のNCV2.1-14かと思います。
IMG_1512[1]

ニキシー管もセットになっておりますが店内にIN-14をバラ売りしているようです。
IMG_1513[1]

組み立ててみました。
IMG_1522

先人の方々に習い丸ピンICソケットを利用し、ニキシー管を交換できるようにしてみました。
IMG_1523