Help us understand the problem. What is going on with this article?

iptablesを利用したsshのブルートフォースアタック対策

More than 5 years have passed since last update.

環境

CentOS 6.4

概要

iptablesを設定し、
同一IPから30秒間に5回ログインリクエストがあった場合、300秒間ロックする。
というロジックを組んでいます。
ログインに成功してもカウントされるため、
ログイン/ログアウトを繰り返しても制限に引っかかりますが、
通常そのような利用はしないでしょう。。
※limit-burstだと思い通りのことが出来ず、チェインを利用したルールを採用。
※可能であればパスワード認証は使用しないのが望ましいです。

iptables の設定

# ssh アクセス制限
# 制御用のチェインを3つ追加。
# sshポートに新規リクエストがあった場合のルール
-N ssh_check
# アタックリストに存在する場合のルール
-N ssh_reject
# アタックと見なした場合のルール
-N ssh_attack

# 22番ポートに新規リクエストがあった場合、ssh_checkチェインに入ります。
-A INPUT -p tcp -m state --state NEW,INVALID --dport 22 -j ssh_check

# ssh_check ルールの処理
# アタックリストに入ってから300秒以内の場合はssh_rejectルールを適用します。
-A ssh_check -m recent --rcheck --seconds 300 --name attack_reject -j ssh_reject
# アタック候補リストに30秒以内に5回カウントされている場合は、
# アタックと見なしてssh_attackルールを適用します。
-A ssh_check -m recent --rcheck --seconds 30 --hitcount 5 --name attack_count -j ssh_attack
# アタック候補リストに1カウント分として追加します。
-A ssh_check -m recent --set --name attack_count
# ログ出力
-A ssh_check -j LOG --log-level info --log-prefix "COUNT: "

# ssh_reject ルールの処理(reject時)
# ログ出力
-A ssh_reject -j LOG --log-level info --log-prefix "REJECT: "
# アタック候補リストに1カウント分として追加し、rejectします。
-A ssh_reject -m recent --set --name attack_count -j REJECT

# ssh_attack ルールの処理(アタックと見なした場合)
# ログ出力
-A ssh_attack -j LOG --log-level info --log-prefix "ATTACK: "
# アタックリストに記録して、ssh_rejectルールを適用します。
-A ssh_attack -m recent --set --name attack_reject -j ssh_reject

# ssh_rejectルールが適用されなかった場合、acceptされます。
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
# ssh アクセス制限ここまで

適用後、iptables restartが必要です。
ログは/var/log/messages に出力されます。

あわせてsshのポートを22から変更しておくと、
攻撃される頻度がぐっと減るためリスクをかなり低減できます。

参考サイト

http://www2s.biglobe.ne.jp/~nuts/labo/inti/ipt_recent.html
http://www.turbolinux.co.jp/products/server/11s/user_guide/iptablescmd.html
http://linuxjm.sourceforge.jp/html/iptables/man8/iptables.8.html

dkkoma
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away