[CentOS7]sshポート変更によるブルートフォースアタック対策

概要

サーバ運用をしていると、何時何処で誰に狙われているかわかりません。
近年では、総当たり攻撃(ブルートフォースアタック)によって大量のアクセスや、実際にアカウントを奪われることもあります。
そこで、初期で使われているために狙われやすいsshのポートを22番から別のものに変更して、iptablesを使用して一定時間あたりの接続数を制限してしまいましょう。
これをすることで、サーバへの総当たり攻撃に対して制限を行い、攻撃をしにくくできます。

設定内容

sshd_config

・ポートを22番から2222番に変更する。
・sshで接続する際にrootユーザーで入れないようにする。

iptables

・特定ポートの許可、拒否設定
・hashlimitを使用して、接続数の制限をかける
・時間あたりの接続数を制限
・接続数の上限を設定
・制限対象を送信元IPアドレスと宛先のポートで識別
・hashlimitのテーブル名設定
・テーブル内のレコード保持の時間を設定

実作業

sshd_config

まずsshd_configの設定していきます。 実際にコマンドを打っていきます。
設定ファイルを弄るので、バックアップを作っておきましょう。
# cp -a /etc/ssh/sshd_config /etc/ssh/sshd_config.default

実際に設定を変えていきたいと思います。
# vi /etc/ssh/sshd_config

・ポートを22番から2222番に変更する。
17行目付近にあるPort 22を外してPort 2222に変更する。
#Port 22
Port 2222


・sshで接続する際にrootユーザーで入れないようにする。
40行目付近にあるPermitRootLoginをnoからyesに変更する。
#PermitRootLogin no
PermitRootLogin yes

iptables

次にiptablesの設定をしていきます.
設定ファイルを弄るので、バックアップを作っておきましょう。
# cp -a /etc/sysconfig/iptables /etc/sysconfig/iptables.default

実際に設定を変えていきたいと思います。
基本無い設定を追加していくので、設定ファイルに追記していきましょう。
# vi /etc/sysconfig/iptables

・特定ポートの許可( -A INPUT -p tcp -m tcp --dport 2222 --tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT )
拒否( -A ssh-brute -j DROP )設定
・hashlimitを使用して、接続数の制限をかける(hashlimit)
・時間あたりの接続数を制限(--hashlimit-upto 2/min)
・接続数の上限を設定(--hashlimit-burst 30)
・制限対象を送信元IPアドレスと宛先のポートで識別(--hashlimit-mode srcip)
・hashlimitのテーブル名設定(--hashlimit-name hashlimittable)
・テーブル内のレコード保持の時間を設定(--hashlimit-htable-expire 1800000)

# hashlimit
-A INPUT -p tcp -m tcp --dport 2222 --tcp-flags FIN,SYN,RST,ACK SYN -j ssh-brute

-A ssh-brute -m hashlimit --hashlimit-upto 1/min --hashlimit-burst 30 --hashlimit-mode srcip --hashlimit-name hashlimittable --hashlimit-htable-expire 1800000 -j RETURN
-A ssh-brute -j LOG --log-prefix "iptables hashlimittable: "
-A ssh-brute -j DROP
-A INPUT -p tcp -m tcp --dport 2222 --tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT


上記で設定完了です。
実際にどんな動きをするかというと、
30回をMAXとして接続を許可されるが、一回接続するごとに29、28と許可される回数が減っていき、0になると拒否される。
ただし30秒(2/min)経つと、29以下なら1回分許可される数が増える。
180秒でレコードが保持されなくなるので、180秒間接続が空くとリセットされる。
という設定です。
それぞれ各数値を変えて設定していただけると幸いです。

総括

iptablesの設定が難しく、理解するまで時間がかなりかかってしまった。それでもまだまだ理解できていない部分もあるけれど。
ブルートフォースアタックは海外から結構な量来るので、海外のIPを遮断してしまうのも一つの手かもしれません。
まだまだ知らない設定もあるので、もっと知識を付けていきたいです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です