ブルートフォースアタックが来るので対策。
理屈はともかく。実際にやってみる。
60 秒間に 5 回ログインを試行すると それ以降はしばらくログイン試行が失敗するようになり、最初のアクセスから 60 秒経過すると 6 回目のログイン試行ができるようになります。
iptables の ipt_recent で ssh の brute force attack 対策
1. n 秒間に可能な試行を m 回までにする
iptables -A INPUT -p tcp --syn --dport 22 -m recent --name sshattack --set iptables -A INPUT -p tcp --syn --dport 22 -m recent --name sshattack --rcheck \ --seconds 60 --hitcount 5 -j LOG --log-prefix 'SSH attack: ' iptables -A INPUT -p tcp --syn --dport 22 -m recent --name sshattack --rcheck \ --seconds 60 --hitcount 5 -j DROP
行けそう。なので、/etc/init.d/iptables saveをしようとしたら、コマンドがない!!
2. lenny の場合 /etc/init.d/iptables が有りません。
/etc/init.d/ だと実行順序の関係で一時的に無防備になることがあり、iptables は nic の起動時に起動するようになった。つまり /etc/network/if-pre-up.dにiptables以下に作る
/etc/network/if-pre-up.d/iptables.sh に以下のシェルスクリプトを記述
シェルスクリプト iptables.sh
#!/usr/bin/env bash export PATH=$PATH:/sbin sudo iptables -A INPUT -p tcp --syn --dport 22 -m recent --name sshattack --set sudo iptables -A INPUT -p tcp --syn --dport 22 -m recent --name sshattack --rcheck \ --seconds 60 --hitcount 5 -j LOG --log-prefix 'SSH attack: ' sudo iptables -A INPUT -p tcp --syn --dport 22 -m recent --name sshattack --rcheck \ --seconds 60 --hitcount 5 -j DROP
ただし、nic 起動時に実行されるのでlo,eth0,eth1 ,,,で実行されて同じ設定があふれ爆発する。
3. iptables を起動するNICを指定する。
if-pre-up.d/iptablesにシェルスクリプトをネットワークに起動毎に実行されて面倒なことになりました。かといって、既に実行されていたら追記せず通過するシェルスクリプトに変えるのも面倒です。そこで、必要な外向きNICだけが実行するように設定しました。
sudo mv /etc/network/if-pre-up.d/iptables /etc/network/iptables # 起動時の実行から外す
まず、何度も実行されて嫌だったiptable を ip-pre-upからハズした。その上で、適当なディレクトリに設置。そして、実行させたいnicに書き込む
/etc/network/interfaces
Debianでルータ構築 - 空落科技(復興)空落科技(復興)を参考にした。
auto eth0 iface eth0 inet dhcp pre-up /etc/network/iptables #起動時に実行 auto lo iface lo inet loopback #lo は何もしもしない
Debian lenny 以降 ( squeezeも?)だと、iptables をinterfaces に書くことになりそう。だけどメンテナンス性が良くないので、何とかしてほしいところ。
iptables の DROP / REJECT は使い分け
なお,「-j DROP」の代わりに「-j REJECT」とすると,パケットを破棄するかわりに接続を拒否するICMPパケットを返送します。DROPで破棄してしまうと,接続元はタイムアウトするまで待つことになりますから,攻撃をブロックする目的ではなく,ただ接続を拒否したい場合はREJECTを指定した方が相手に優しいと言えます。
とのこと、DROPとREJECTの違いはそういうことなんだ。 アタック防止だったら容赦なくDROPでいい気がする。
以前にも同じ事をやっている・・・
http://d.hatena.ne.jp/takuya_1st/20090801/1249148254
http://d.hatena.ne.jp/takuya_1st/20100318/1268878754
なんかい同じ事を調べれば気が済むんだ。。脳みそとうふ