〜2009年11月中旬〜
port 22を開けるとやはり攻撃されるのでちょっと対策を。
/etc/hosts.denyで管理するDenyHostsが簡単そうだったので入れてみた。
% sudo yum install denyhosts % sudo chkconfig denyhosts on % sudo service denyhosts start
設定はdefaultのままでok。
/var/log/secureを見張っていて何度も攻撃してくるサイトを/etc/hosts.denyに登録する。
その関係上常にちょっと遅れた対応になるが、
/var/log/secureを見るとrefused connectというログを残して終了しているのが
ちらほら見つかったので効果はありそう。
とりあえずはこれで様子見。
sshへの総当り攻撃をiptablesの2行で防ぐ方法
という記事があったので早速試したが、
今のFedora 11とはちょっと違うようで修正が必要だった。
-A RH-Firewall-1-INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH -A RH-Firewall-1-INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 8 --rttl --name SSH -j DROP
のRH-Firewall-1-INPUTの部分をINPUTに変更。
-A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 8 --rttl --name SSH -j DROP
これを
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
の前に挿入する。あとはsudo service iptables restartでok。
8回目以降はタイムアウトするような感じになる。
でもここに書いてしまうと[システム]-[管理]-[ファイアーウォール]で設定を変えると
上書きされるのでipt_recentの設定は無効になってしまう。さてどうしたもんか。
昨日のつづき。
ファイアーウォールの設定には「カスタムルール」というのあって、
ここにiptablesの文法で書けば追加されるようになっている。
別ファイルで昨日の設定を書けばよさそうだが追加なので順番がまずい。
というわけで、ポート22じゃなくて10022あたりを開けることにした。
-A INPUT -p tcp --dport 10022 -m state --state NEW -m recent --set --name SSH -A INPUT -p tcp --dport 10022 -m state --state NEW -m recent --update --seconds 60 --hitcount 8 --rttl --name SSH -j DROP -A INPUT -m state --state NEW -m tcp -p tcp --dport 10022 -j ACCEPT
全部別ファイルに追い出せば確実に順番は保たれる。
しかもポート22をやめれば攻撃される確率も減る。一石二鳥だ。
この設定で1日放置してみたらお客さんが一人も来なかった。
ポートを変える効果のほうが絶大だった。というオチ。最初からそうすればよかったな。
一昨日まで存在すら知らなかったが、近所のGEOにあったので買ってしまった。
なんか気づくと午前2時だったりで結構はまってるようだ。
たいまつとかアイテムの数の制限とかなんか初期のドラクエのよう。
逆に新鮮だなあ。
deferが面白いね。
The expression must be a function or method call. Each time the "defer" statement executes, the parameters to the function call are evaluated and saved anew but the function is not invoked. Deferred function calls are executed in LIFO order immediately before the surrounding function returns, but after the return values, if any, have been evaluated.
すぐに実行しないで関数がreturnする直前にLIFOで呼ばれる。
// prints 3 2 1 0 before surrounding function returns for i := 0; i <= 3; i++ { defer fmt.Print(i); }
やっぱギリシャ語かな。iに通ずるってことで。
呼ばれるごとに順に0から1ずつincrementされる。constは
Omitting the list of expressions is therefore equivalent to repeating the previous list.
って感じで省略すると繰り返しを意味する。
ここの例
にあるように、KB, MB, ...が簡単に表現できる。
package main const ( _ = iota; KB = 1 << (10 * iota); MB; GB; ) func main() { println(KB); println(MB); println(GB); }
実行すると
1024 1048576 1073741824
となる。
gccgoにはまだ手を出さないほうがいい。svn coするだけで2GBもディスクを食うし、
makeの途中2時間ほどで失敗する割りには作業用にさらに2GBも食うしで、
がっかり感が倍増する。おつかれさまです。
いつものように進めると依存関係もすんなり通ってこりゃ楽だと思ったら、
Transaction Check Error: installing package kernel-PAE-2.6.31.5-127.fc12.i686 needs 15MB on the /boot filesystem installing package cyrus-sasl-plain-2.1.23-4.fc12.i686 needs 15MB on the /boot filesystem ... installing package boost-graph-1.39.0-8.fc12.i686 needs 8MB on the /boot filesystem installing package libthai-0.1.12-2.fc12.i686 needs 8MB on the /boot filesystem Error Summary ------------- Disk Requirements: At least 15MB needed on the /boot filesystem.
と言われて終了。なんだよそれ?
まさか/bootに全部インストールしようってんじゃないよね?
/bootパーティションの存在とかほぼ同じなんだけどなあ。
気になるのは失敗したマシンはFC6の頃から順に上げてるってことだけど、
なんかゴミみたいなもんがあるのか?
いずれにせよ家のPCはext4にするつもりでいたので避けられるんだよね。放置。
GRUBのイメージをそのままUSBフラッシュに書き込むと、
フロッピー分しか使えないのでもったいない。
というわけでVFATにGRUBをインストールしてみた。
F12への布石でもある。
% fdisk /dev/sdd # 下記のようなパーティション作成 % fdisk -l /dev/sdd ディスク /dev/sdd: 261 MB, 261881856 バイト ヘッド 9, セクタ 56, シリンダ 1014 Units = シリンダ数 of 504 * 512 = 258048 バイト Disk identifier: 0x6f20736b デバイス ブート 始点 終点 ブロック Id システム /dev/sdd1 * 1 1014 255500 b W95 FAT32 % mkfs -t vfat -v -n 256MB /dev/sdd1 ここで一度USBフラッシュを外して改めてつなぐと自動でマウントされる % grub-install --root-directory=/media/256MB --no-floppy /dev/sdd
これで再起動するとGRUBプロンプトが表示される。
でもUSBフラッシュがhd0になってしまって非常に面倒な自体に。
BIOSの設定かdevice.mapでなんとかなるもんかな。