sshサーバへの攻撃に対する色々な防御方法を、おすすめ度つきで紹介します。
(1)sshのrootログインを禁止する
rootは非常に大きい権限を持つので、rootのパスワードがばれると何でもされてしまいます。
辞書攻撃によって root のパスワードを割り出されるのを防ぐ為に、ssh では rootでログイン出来ないようにします。
設定は以下で行います。
/etc/ssh/sshd_config
PermitRootLogin no
メリット:
root でログイン出来ない為、辞書攻撃/総当たり攻撃で rootのパスワードが破られることが無くなる
デメリット:
root でログイン出来なくなる
おすすめ度:★★★★★
是非設定しましょう。
ただし、この設定はrootの辞書攻撃への対処をするだけです。
sshへの他の攻撃に対処するためにも、以降で説明している他の方法も組み合わせて下さい。
(2)公開鍵認証方式にする
公開鍵認証の設定は以下で行います。
公開鍵認証による接続方法(sshコマンドの場合)
公開鍵認証による接続方法(Tera Termの場合)
公開鍵認証による接続方法(PuTTYの場合)
また、通常のパスワード認証をOFFにするため、以下を設定します。
/etc/ssh/sshd_config
PasswordAuthentication no
メリット:
パスワードが破られることが無くなる。辞書攻撃/総当たり攻撃に対応できる
デメリット:
sshサーバへ接続する全てのPCそれぞれで設定が必要。
おすすめ度:★★★★(利用者が少数のサーバの場合) ★★★(利用者が多数のサーバの場合)
利用者が自分一人の個人サーバだったり、少数の場合は、是非設定しましょう。
利用者が多数のサーバの場合、各自のPCで設定を行う必要があり、手間がかかります。
辞書攻撃/総当たり攻撃への耐性からすると、おすすめ度は星5つなのですが、sshサーバとユーザのPCへの設定が必要なので、星を減らしています。
(3)一定時間内のsshへの接続回数を制限する
一定時間内にssh接続できる回数を制限することで、IDやパスワードを変えて何度もssh接続を試みてくる辞書攻撃/総当たり攻撃の接続回数を減らします。
制限は iptables で行います。設定は以下で行います。
下記設定では、ssh接続は 60秒間に5回までに制限します。
–seconds で秒数、–hitcount で回数を指定しています。
/etc/sysconfig/iptables
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 --update --seconds 60 --hitcount 5 -j DROP
メリット:
辞書攻撃/総当たり攻撃に対応できる
デメリット:
通常の接続も、一定時間内の接続回数の制限を受ける。
辞書攻撃/総当たり攻撃が一定時間内の回数を超えない場合、長期間にわたって攻撃されることがある。
また、通常の接続と、辞書攻撃/総当たり攻撃などの接続を区別出来ないので、攻撃を受けている間は通常の接続もできなくなる。
おすすめ度:★★★
比較的手軽に辞書攻撃/総当たり攻撃に対処できるのですが、通常の接続も制限を受けることと、攻撃が一定時間内の回数を超えない場合は長期間攻撃されることがあるので、星3つです。
(4)sshへの接続要求数を制限する
まだ認証が完了していない状態のssh接続要求数を制限します。
設定は以下で行います。
/etc/ssh/sshd_config
MaxStartups 開始時:確率:最大数
まだ認証が完了していないssh接続数が 開始時 を超えると、これ以後の接続要求を 確率(%) の割合で拒否し始めます。
ssh接続要求数が 最大数 になると、以降の接続を全て拒否するようになります。
例えば、下記のようにすると、まだ認証が完了していないssh接続数が3つまでは受け付け、4~6つは60%の確率で拒否し、7つ以降は全て拒否します。
MaxStartups 3:60:6
メリット:
多数の接続元からの辞書攻撃/総当たり攻撃に対応できる
デメリット:
開始時 の接続数を超えると、通常の接続も一定割合で拒否される。
また、通常の接続と、辞書攻撃/総当たり攻撃などの接続を区別出来ないので、攻撃を受けて接続数が 最大数 を超えると、通常の接続もできなくなる。
辞書攻撃/総当たり攻撃の同時接続数が少ない場合、長期間にわたって攻撃されることがある。
おすすめ度:★★
多数の接続元からの辞書攻撃/総当たり攻撃を受けることは少ない為メリットを受けにくく、通常の接続も制限を受けることと、攻撃の同時接続数が少ない場合は長期間にわたって攻撃されることがあるので、星2つです。
(5)同一接続元からの認証の失敗回数を制限する
ある接続元からのssh接続で、認証に失敗できる回数を制限します。
辞書攻撃/総当たり攻撃でアカウント/パスワードを試される回数を大幅に減らします。
制限は下記で紹介した SSHGuard で行います。
SSH総当たり攻撃(辞書攻撃/ブルートフォースアタック)の対策とその効果
メリット:
辞書攻撃/総当たり攻撃に対応できる。
通常の接続と、辞書攻撃などの接続を区別でき、攻撃だけを制限出来る。
デメリット:
設定に手間がかかる。
おすすめ度:★★★★★
設定に手間はかかりますが、攻撃だけを制限でき、また辞書攻撃/総当たり攻撃に対応できるので、星5つです。
(6)接続元を日本国内に限定する
sshへの接続元を日本国内に限定し、海外からの接続は拒否します。
接続を国内に制限すれば、攻撃を大幅に減らすことが出来ます。
設定は以下で行います。
iptables - 国内からの接続のみ許可して海外からの接続を遮断する
メリット:
海外からの攻撃をブロックできる。
デメリット:
日本国内からの攻撃には効果が無い。
おすすめ度:★★★★
海外からの攻撃をブロックするので、攻撃の全体数を大幅に減らせますが、日本国内からの攻撃には効果が無いので、星を減らしています。
参考
sshのrootログインを禁止する
iptables の ipt_recent で ssh の brute force attack 対策
sshへの総当り攻撃をiptablesの2行で防ぐ方法 (blog@browncat.org)
接続制限の設定
公開鍵認証による接続方法(sshコマンドの場合)
公開鍵認証による接続方法(Tera Termの場合)
公開鍵認証による接続方法(PuTTYの場合)
SSH総当たり攻撃(辞書攻撃/ブルートフォースアタック)の対策とその効果
iptables - 国内からの接続のみ許可して海外からの接続を遮断する
SSHD_CONFIG (5)
コメント