ipsetを使って国別のFireWall設定
Web記事を探していたら、国別のFireWallでのブロックで ipset というものが使える との情報から、試してみた。 ipsetを使った理由は、iptables に、別物管理したい国別ルールを入れたくなかったため。
ちなみに、ipdeny から取得した CIDR なIPv4なアドレスブロック数は、以下のようになった。 ロシアが多いのは納得だけど、インターネットの普及のイメージとして中国≒インド≒韓国 ぐらいの感じを抱いていたけど、中国のアドレスブロックの数はインド・韓国の3倍。 人口の影響かな?後発出遅れで細切れアドレスになったのかな….
$ wc -l *.zone 2635 cn.zone 602 id.zone 706 in.zone 659 kr.zone 6520 ru.zone 388 tw.zone 11510 合計
また、mergecidr.pl によって、隣接CIDRをマージさせてみたけど、 元々の11510件が、併合で9255件に減らすことができた(20%減)。
mergecidr.pl
#!/usr/bin/perl my %net = () ; while( <> ) { if ( /^(\d+)\.(\d+)\.(\d+)\.(\d+)\/(\d+)$/ ) { my $ip,$bt; ($ip,$bt) = ( ($1 << 24) + ($2 << 16) + ($3 << 8) + $4 , $5 ) ; $net{$ip} = $bt ; # printf( "# %08x/%02d\n" , $ip , $bt ) ; } } my $count = 1 ; while( $count > 0 ) { my $lip = 0 ; my $lbt = 0 ; $count = 0 ; foreach my $ip ( sort { $a <=> $b } keys %net ) { my $bt = $net{$ip} ; if ( $bt > 0 ) { if ( $lbt == $bt && $bt > 1 ) { # printf( "%08x/%02d\n" , $ip , $bt ) ; my $dbt = $bt - 1 ; my $mask = (((1 << $dbt) - 1) << (32 - $dbt)) ; if ( ($ip & $mask) == ($lip & $mask) ) { $count++ ; undef $net{$lip} ; undef $net{$ip} ; $net{$ip & $mask} = $dbt ; #printf( "%08x/%08x/%02d\n" , # ($ip & $mask) , $mask , $dbt ) ; } } $lip = $ip ; $lbt = $bt ; } } } foreach my $ip ( sort {$a <=> $b } keys %net ) { my $bt = $net{$ip} ; if ( $bt > 0 ) { printf( "%d.%d.%d.%d/%d\n" , (($ip >> 24) & 0xff) , (($ip >> 16) & 0xff) , (($ip >> 8) & 0xff) , ( $ip & 0xff) , $bt ) ; } }
geoipdeny.sh
参考サイトのスクリプトをほぼ、そのまま借用。
DIR="/usr/local/etc/geoipdeny" ZONEURL="http://www.ipdeny.com/ipblocks/data/countries" # download zonefile for GEO in cn.zone kr.zone ru.zone tw.zone id.zone in.zone do /usr/bin/wget -q -O - "$ZONEURL/$GEO" \ | /bin/grep -v "^#|^$" > $DIR/$GEO done /usr/sbin/ipset destroy GEOIPDENY > /dev/null 2>&1 /usr/sbin/ipset create GEOIPDENY hash:net for IP in ` $DIR/mergecidr.pl $DIR/*.zone ` do /usr/sbin/ipset add GEOIPDENY $IP done /usr/sbin/ipset save GEOIPDENY > $DIR/geoipdeny.store /usr/sbin/ipset destroy GEOIPDENY
fermの設定に登録
自宅のFirewallの設定には、iptablesな設定を、ブロック的にまとめて記載できる、 ferm というのを使っているので、その設定の中に、上記でできた ipset を参照させる。
(( 設定ファイルの先頭に )) @hook post "/usr/sbin/ipset destroy GEOIPDENY" ; @hook pre "/bin/cat /usr/local/etc/geoipdeny/geoipdeny.store | /usr/sbin/ipset restore" ; @hook flush "/usr/sbin/ipset destroy GEOIPDENY" ; (( Firewallのブラックリストな設定部分に )) mod set set GEOIPDENY ( src dst ) REJECT ;
次は動作確認。
# geoiplookup www.baidu.cn GeoIP Country Edition: CN, China # ipset test GEOIPDENY www.baidu.cn 220.181.111.147 is in set GEOIPDENY. # w3m http://www.baidu.ch これがなぜか接続成功するんだよな....
ということで、まだなにかオカシイ?
# export http_proxy=http://中国のOpenProxy:xxxx # w3m http://tsaitoh.net/ Connection Refused...
おお、ちゃんと拒否られるな….
自宅からだと、間に透過PROXYでも入っているのかな…
DQ-Xの通信途絶対策に”高速アドレス変換”をoff
奥さんがDQ-Xを遊び始めたけれど、ネットワーク接続が不安定で 10〜15分程度でネットワーク接続が切れ、ゲームが中断してしまう。
自宅は丹南ケーブルの光契約なので、速度が遅いとかいう問題では ないはずだった。 一方、なぜか Pocket-WiFi でネットワーク接続すると、ゲームの 接続断が発生しない。
スクエアのネットワーク対策では、 http://support.jp.square-enix.com/faqarticle.php?id=2620&la=0&kid=63821 みたいな、訳の分からない対策が書いてある。
丹南さんに質問をしたら、このページのポートなどのチェックなどを アドバイスを受ける。ひとまず、原因究明のためにルータを介さず接続実験 をしてみた。すると、問題なく接続ができた。 ということで、ルータ(Buffalo)が原因。
んでさらに調べてみると、 Buffaloだと(処理の中身がよくわからない)"高速アドレス変換"が怪しそう。 ルータのインターネットの設定項目内の高速アドレス変換を切ると、 ゲームが30分以上継続できた。
ルータの更新(WZR-450HP)
今朝から、ルータのWiFiの調子がおかしい。 接続が繋がったり切れたりを繰り返す。 先週からDQ-Xを楽しんでいる子どもが、Wiiが繋がらないとごねている。 ただでさえもSquareのサーバ能力不足で接続が切れたりしているけど、 となりで使っているノートパソコンさえ、接続が切れる。 ルータ使用から3年目だし、壊れる可能性はあるけど、ちょっと短くないか….
ということで、新しくルータを後継機のWZR-450HPに交換する。 設定画面などもほぼ WZR-HP-G300NH と同じ。 munin で、パケット流量観察用のスクリプトも、 ルータの管理者名とパスワードを更新したら、あっさり認識。
WiFi機器のMACアドレスを、dhcp(MAC DHCPアドレス固定で運用中)の 設定ファイルから、コピーして制限を加えて完了。 あとは、VPN の設定などもあるけど、ボチボチ直そう。
DLNA サーバ機能や、プリンタサーバ機能なども増えているので、 設定はもう少し遊べるかな。
ちなみに、Wiiの接続も不安定なWiFiよりは…ということで、 Wii用USB-LANアダプタを購入する。 ただし、DQ-X により、USB-16GBメモリ、USB-キーボードを 追加しているため、USB×2ではポート不足で、パソコンの USB-HUBを付け替え。
さて、パソコンのUSB-HUBをどうするか…
USB充電用で購入している 8ポートHUBをつなぐか….
丹南CATVメンテ&復旧
朝起きたらネットが繋がらない。オリンピック速報みれんやん…
早朝にメンテ作業って聞いていたので、早々にケーブルモデム電源リセット。 ひとまず回復したけど、再び接続エラー。6:30頃まで切れてたぞ。 ちょいと復旧予定時間ずれこんでるな…
オフタイムスケジュールのメール送信…
私は、仕事の予定や自宅の家族の予定も含め、Google Calendar に頼りまくり。 ただ、うちの奥さんは、自宅のスケジュールは使っている割に、 私の予定の欄を見ていないのか、「え、今日は××の予定なの?」と驚かれる。 奥さん曰く「パパのスケジュール多すぎて全体を見ていない…」とのつれない言葉。
ということで、ちょいとプログラムを書いてみた。 9to5な仕事の時間帯以外の予定を Google Calendar からリストアップし、 花金な夕方に1週間分をメールで送信する。
でも、この手のスケジュールって、便利と感じるのは最初のうちだけ。 週ごとに送られてくるメールに慣れると、そのメール全部をざら読みしかしないんだよな。 んで、「え、今日は××なの?」を繰り返す….
メールアドレス変更、あぶね
SPAMが多くて捨てアカウント状態になっている丹南CATVの メールアドレスに久々にアクセスしてみた。 タイトルに”[[spam]]”とついた迷惑メールフォルダ落ちが500通、 普通の受信トレイに300通ほど。 ゴミ掃除したら、10通ほどが真面目なメール。
といっても、カード会社、自宅サーバDNSのMyDNS、任天堂のメール。 さすがに前2つは、定期的なメールだったとはいえ、見落とすと やばいので早々に gmail 宛てに変更。 そういえば、自宅ドメイン管理の sakura.ne.jp への登録も、 忘れるとヤバイと確認したら、しっかり丹南のアドレス。 これまた、早々に変更。
これでほぼ、重要なサービスのメール移行未完了なのは無いはずなんだが….