* 暑すぎ [#cfe10f54] 32度超。きょうは投了。 本でも読んで過ごします。。 最高気温は 33.8度 だったとか。明日は外出の予定があるんですが、 相変わらず暑そうです。 * 広告 [#z8a27167] 久しぶりに広告をいくつか張り直してみました。 収入にはほとんどなってないんですけど、 それでも年間で10,000円くらいにはなってます。 このレンタルサーバの会費が出るくらい。ありがたいものです。 * Gentoo [#vb2ad4b2] kernel を更新。やり方をすぐ忘れるのでメモ。 #pre{{ e8400 ~ # eselect kernel list Available kernel symlink targets: [1] linux-2.6.23-gentoo-r9 [2] linux-2.6.24-gentoo-r8 * [3] linux-2.6.25-gentoo-r6 e8400 ~ # eselect kernel set 3 e8400 ~ # eselect kernel list Available kernel symlink targets: [1] linux-2.6.23-gentoo-r9 [2] linux-2.6.24-gentoo-r8 [3] linux-2.6.25-gentoo-r6 * e8400 ~ # cd /usr/src/linux e8400 linux # make menuconfig ... e8400 linux # make ... e8400 linux # make modules_install install }} あとは /boot/grub/menu.lst を修正。 /boot/vmlinuz から常に上げるようにすれば修正も不要ですが、なんとなく。 #pre{{ ... title=Gentoo Linux (2.6.25-gentoo-r6) root (hd0,0) kernel /boot/vmlinuz-2.6.25-gentoo-r6 root=/dev/sda3 ... }} なぜか最近 splash.xpm.gz がなくなったので、コピー。 #pre{{ e8400 linux # cp /usr/share/grub/splash.xpm.gz /boot/grub/ }} モジュールの rebuild も忘れずに。 #pre{{ e8400 linux # module-rebuild rebuild }} 再起動して完了。 #pre{{ sugimura@e8400 ~ $ uname -srmp Linux 2.6.25-gentoo-r6 x86_64 Intel(R) Core(TM)2 Duo CPU E8400 @ 3.00GHz }} * 熱暴走 [#lb689c25] ビデオカードが熱暴走。 キーボードの "Caps Lock" と "Scroll Lock" の 両方が点滅するので中を開けてみると、 ビデオカードのヒートシンクが触れないほど熱くなってました。 これから夏を乗り切れるんだろうか。。 * iptables [#ve340165] sshd を上げているとブルートフォースアタックを食らうので、対策してみました。 #pre{{ Jul 10 00:28:26 e8400 sshd[13090]: Did not receive identification string from 211.169.249.241 Jul 10 00:33:44 e8400 sshd[13124]: Invalid user apple from 211.169.249.241 Jul 10 00:33:45 e8400 sshd[13132]: Invalid user brian from 211.169.249.241 Jul 10 00:33:46 e8400 sshd[13140]: Invalid user andrew from 211.169.249.241 ... }} 参考にしたのは下記のサイトです。 - http://d.hatena.ne.jp/hirose31/20050920/1127208718 (ひ)さん まずは iptables を emerge します。 #pre{{ e8400 ~ # emerge -av iptables }} iptables に対応するように kernel を作り直します。 これが kernel を更新しようというきっかけでした。 iptables のために必要なモジュールは次の箇所です。 - Networking ---> Networking options -- Network packet filtering framework (Netfilter) --- Core Netfilter Configuration ---> Netfilter Xtables support (required for ip_tables) --- IP: Netfilter Configuration "match support" や "target support" になっているところが重要です。 kernel を作り直して再起動したら、 iptables を実行するためのスクリプトを書きます。 #pre{{ e8400 ~ # less iptables.sh #!/bin/sh # 定義をクリア iptables -F # chain を削除 (初回はエラーになります) iptables -X ssh_block iptables -X ssh # chain を作成 iptables -N ssh_block iptables -N ssh # ssh は tcp/22 iptables -A INPUT -j ssh -p tcp --dport 22 # ログの定義 iptables -A ssh_block -m recent --name ssh_block --set -j LOG --log-level DEBUG --log-prefix "ssh_block: " # この chain に来たらブロック iptables -A ssh_block -j DROP # syn ではないときは ESTABLISHED か RELATED のときのみ許可 iptables -A ssh -p tcp ! --syn -m state --state ESTABLISHED,RELATED -j ACCEPT # 一度攻撃者とみなされると1日(86400秒)は拒絶 iptables -A ssh -p tcp --syn -m recent --name ssh_block --update --seconds 86400 -j REJECT # 60秒で5回接続してきたらブルートフォースアタックとみなす iptables -A ssh -p tcp --syn -m recent --name ssh_conn --rcheck --seconds 60 --hitcount 5 -j ssh_block # syn パケットを記録 iptables -A ssh -p tcp --syn -m recent --name ssh_conn --set iptables -A ssh -p tcp --syn -j ACCEPT }} 必要なカーネルモジュールがないときは #pre{{ iptables: No chain/target/match by that name }} このようなエラーになります。わかりにくいですが、地道にやり直します。 実行してエラーにならないことを確認します。 #pre{{ e8400 ~ # sh -x iptables.sh + iptables -F + iptables -X ssh_block + iptables -X ssh + iptables -N ssh_block + iptables -N ssh + iptables -A INPUT -j ssh -p tcp --dport 22 + iptables -A ssh_block -m recent --name ssh_block --set -j LOG --log-level DEBUG --log-prefix 'ssh_block: ' + iptables -A ssh_block -j DROP + iptables -A ssh -p tcp '!' --syn -m state --state ESTABLISHED,RELATED -j ACCEPT + iptables -A ssh -p tcp --syn -m recent --name ssh_block --update --seconds 86400 -j REJECT + iptables -A ssh -p tcp --syn -m recent --name ssh_conn --rcheck --seconds 60 --hitcount 5 -j ssh_block + iptables -A ssh -p tcp --syn -m recent --name ssh_conn --set + iptables -A ssh -p tcp --syn -j ACCEPT }} うまくできたら設定を保存します。 /var/lib/iptables/rules-save に書かれます。 #pre{{ e8400 ~ # /etc/init.d/iptables save * Saving iptables state ... [ ok ] }} 起動スクリプトの動作確認をします。 まず停止。 #pre{{ e8400 ~ # /etc/init.d/iptables stop * Saving iptables state ... [ ok ] * Stopping firewall ... [ ok ] }} 定義が空になってます。 #pre{{ e8400 ~ # iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination }} 起動。 #pre{{ e8400 ~ # /etc/init.d/iptables start * Loading iptables state and starting firewall ... [ ok ] }} 定義が入ってます。出力は改行しています。 #pre{{ e8400 ~ # iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination ssh tcp -- anywhere anywhere tcp dpt:ssh Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain ssh (1 references) target prot opt source destination ACCEPT tcp -- anywhere anywhere tcp flags:!FIN,SYN, RST,ACK/SYN state RELATED,ESTABLISHED REJECT tcp -- anywhere anywhere tcp flags:FIN,SYN,R ST,ACK/SYN recent: UPDATE seconds: 86400 name: ssh_block side: source REJECT tcp -- anywhere anywhere tcp flags:FIN,SYN, RST,ACK/SYN recent: UPDATE seconds: 86400 name: ssh_block side: source reject-with icmp-port-unreachable ssh_block tcp -- anywhere anywhere tcp flags:FIN,SYN,R ST,ACK/SYN recent: CHECK seconds: 60 hit_count: 5 name: ssh_conn side: source ssh_block tcp -- anywhere anywhere tcp flags:FIN,SYN, RST,ACK/SYN recent: CHECK seconds: 60 hit_count: 5 name: ssh_conn side: source tcp -- anywhere anywhere tcp flags:FIN,SYN, RST,ACK/SYN recent: SET name: ssh_conn side: source ACCEPT tcp -- anywhere anywhere tcp flags:FIN,SYN, RST,ACK/SYN Chain ssh_block (1 references) target prot opt source destination LOG all -- anywhere anywhere recent: SET name: ssh_block side: source LOG level debug prefix `ssh_block: ' DROP all -- anywhere anywhere }} ここまで問題なければ、自動起動の設定をしておきます。 #pre{{ e8400 ~ # rc-update add iptables default * iptables added to runlevel default }} ---- #comment