概要
サーバ運用をしていると、何時何処で誰に狙われているかわかりません。近年では、総当たり攻撃(ブルートフォースアタック)によって大量のアクセスや、実際にアカウントを奪われることもあります。
そこで、初期で使われているために狙われやすい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を遮断してしまうのも一つの手かもしれません。
まだまだ知らない設定もあるので、もっと知識を付けていきたいです。