- 2006年6月 3日 04:41
- Linux
大学のサーバーを含め,インターネットに接しているサーバーには必ずと言ってよい程sshdへのブルートフォースアタックないし辞書攻撃を受ける.潔くパスワード方式での認証をオフにして,公開鍵認証方式のみにしぼってしまえれば良いが,多くの人が利用するsshdではそうもいかない.それでいて,毎朝送られてくるlogwatchのログをみて憂慮する訳だ.こんなんじゃいつか入られると・・・.
いったん入られれば権限の昇格は必至,ではどうするか.
- 利用者全員に公開鍵認証方式を強制する
# それが出来ていれば最初から苦労は無い - SELinuxで権限昇格に備える
# 進入される前提,後ろ向き過ぎて却下 - sshdを綺麗サッパリ停止する
# 論外
冗談は置いておいて,少し真面目に考えてみると.
- sshdの設定MaxStartupsを利用する
ブルートフォースを遅らせるだけで阻止にならない.攻撃を受けている間,正規のログインも強く制限される. - pam_tally.soによるアカウントロック+cronによる時間性解除
思いの外効果的.だが正規アカウントを攻撃者に知られた場合(大抵は知られる),正規アカウントを意図的にロックされる可能性が高い. - iptablesのlimit moduleで時間当たりの接続を制限
ブルートフォースを遅らせるだけで阻止にならない.かつ攻撃を受けている間,正規のログインも強く制限される. - sshdのログ解析+cron+iptablesの連携で防ぐ
理想的だがリアルタイム性に欠ける.負荷が上がると共に作業が多少複雑になる.
こんな状態で解決には至っていなかった.しかしながらネットを歩いていたら突如完全解にぶつかった,なんてこった(苦笑 それがiptablesのモジュールipt_recent
ちなみに完全解を極めて実用的な形で与えてくださったWebSiteは"B"-conというサイトのiptables の ipt_recent で ssh の brute force attack 対策 なんて直球なタイトルでしょ,感謝(苦笑
せっかくだからCCに従いipt_recentの説明を引用.
佐藤裕介著 iptables の ipt_recent で ssh の brute force attack 対策
http://www2s.biglobe.ne.jp/~nuts/labo/inti/ipt_recent.html
ipt_recent とはipt_recent モジュールは、パケットフィルタに次のような機能を提供します。
* 条件にマッチしたパケットの source IP アドレスをリストに記録する
* 「パケットの source IP アドレスがリストに記録されていたら」という条件を利用可能にする
IP アドレスを記録するリストは複数個作成できます。また「直近 n 秒の間に」とか「n 回以上記録があったら」とかいう条件も指定できます。このモジュールの機能を使って攻撃可能な回数や頻度を制限し、 brute force attack に対抗します。
ロジックを一言で言うと,iptablesの上でsyn flagをipごとにカウントして,一定時間に規定のカウントに達したら一定時間BANしちゃいましょ,というもの.あまりに理想的(^~^; こういったものが生まれてくるからLinuxってのは好きだよ(苦笑
これはsshdをはじめ多くのサービスに対し適応出来る非常に有効な手段だと思う.ブルートフォースの対策が施せないvsftpdにもバッチリ適用可能(ffftp等は複数セッションを張るので注意が必要だが) 注意が必要なのは複数の踏み台を利用した攻撃に対応出来ない事と,IP Spoofing+Source Routingが同時に行われた場合の攻撃には対応出来ない事かな.まぁそこまでやってくる相手に単一の手段で対抗しようってのが無理だけど(苦笑
最後にDebian GNU Linux 3.1(sarge)でipt_recentを適用した時の設定を,まぁリンク先そのままなんだけどね(完璧です
# iptablesは上位の設定から評価されるので,その辺りの設定は適当に見直してくださいな
iptables -N SSH
iptables -N SSH-evil
iptables -A INBOUND(普通はINPUTですここ) -p tcp -m tcp --dport 22 -j SSH
iptables -A SSH -p tcp ! --syn -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A SSH -p tcp --syn -m recent --name badSSH --rcheck --seconds 600 -j REJECT
iptables -A SSH -p tcp --syn -m recent --name sshconn --rcheck --seconds 60 --hitcount 5 -j SSH-evil
iptables -A SSH -p tcp --syn -m recent --name sshconn --set
iptables -A SSH -p tcp --syn -j ACCEPT
iptables -A SSH-evil -m recent --name badSSH --set -j LOG --log-level DEBUG --log-prefix "evil SSH user: "
iptables -A SSH-evil -j REJECT
RJECTよりDROPの方が効果的だろうか?(・_・?
- Newer: こうも技術ネタが続くと
- Older: Linux World Expo / the 2nd day
Comments:0
Trackbacks:0
- TrackBack URL for this entry
- http://distance.eclisse.info/cgi-bin/mt-tb.cgi/743
- Listed below are links to weblogs that reference
- Take measures to brute force attack from distance