今朝、VPSにログオンして、root
ユーザーおよび存在しない他のユーザーの何百万ものログイン試行の失敗を見つけました。私は以下の対策を講じて、攻撃者の努力(数か月間続いている)を難読化しようとしました。
Centos7 vpsのシステム情報
uname -a
inux vm01 3.10.0-327.22.2.el7.x86_64 #1 SMP Thu Jun 23 17:05:11 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
安全なログからログインに失敗したすべてのIPアドレスを取得するスクリプトを作成しました。 (/var/log/secure
)
# get_ips.sh
grep "Failed password for" /var/log/secure \
| grep -Po "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" \
| sort \
| uniq -c
手順1のスクリプトから見つかったIPアドレスをブロックするファイアウォールルールを作成するスクリプトを記述します。このスクリプトはip_list_to_rules.sh
#!/bin/bash
# ip_list_to_rules.sh
# script to parse output of get_ips.sh and create firewall rules
# to block ssh requests
if [ -z $1 ]; then
echo "arg1 must be path to a list of the form <COUNT> <IP>\n"
exit
fi
LIST=$(readlink -f $1)
SSH_IP=$(echo $SSH_CLIENT | head -n1 | awk '{print $1;}')
echo "Reading IPs from ${LIST}"
echo "SSH Client IP will be ignored (${SSH_IP})"
while read COUNT IP; do
echo "Creating rule for ${IP}"
firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -m tcp --source $IP -p tcp --dport 22 -j REJECT
firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -m tcp --source $IP/24 -p tcp --dport 22 -j REJECT
done<<<"$(cat ${LIST} | grep -v ${SSH_IP})"
すべて実行してルールを保存します。
./get_ips.sh > attack_ips.list
./ip_list_to_rules.sh attack_ips.list
firewall-cmd --reload
以下は、私が回答から取った措置です。
普段は chrome secure Shell client を介して接続しているため、実際には4を実行しませんでした。また、公開鍵のサポートはありません。
はい、これは完全に合理的で一般的なアプローチです。しかし、あなたは fail2ban を再発明しました。スクリプトの問題をデバッグする必要がなく、ssh、Apache、およびその他の一般的なサービスの既存のフィルターを利用できるように、代わりにそれを使用するように切り替えたいと思うでしょう。
残念ながら、これらのIPでできることはそれほど多くありません。あなたは彼らのIPブロックのためにリストされた虐待の連絡先に活動を報告することを試みることができますが、彼らがより深刻な何かをしない限り、それはあなたの時間の価値はありません。
また、絶対に必要でない限り、パスワードベースのログインとrootログインを無効にするなど、標準のssh強化を行う必要があります。
SSHシステムを保護する最も効果的な方法は、ssh秘密鍵のみを使用してログインすることです。パスワード認証を無効にし、直接rootログインを禁止する必要があります。その後、認証に何度も失敗しますが、ブルートフォース攻撃が成功する可能性はありません。
この後もログをクリーンに保つには、SSHポートを別のポート番号に移動する必要があります。
100万回失敗したログイン試行を見るのは怖いかもしれませんが、これらの試行が使用している帯域幅と処理能力は正直なところ簡単です。
したがって、本当の問題は、システムが安全かどうかです。
これらの変更はすべて、/ etc/ssh/sshd_configファイルで行うことができます(変更を加えた後は、必ずsshdを再起動してください)。
Fail2banまたはいくつかのカスタムスクリプトを使用してファイアウォールでこれらのIPをブロックできますが、sshd認証自体はそれ自体で十分に安全です。 vpsのうち。
サーバー全体をロックダウンしないIPテーブルを設定できますが、ブルートフォース攻撃が遅くなり、効果がなくなります。
IPアドレスでSSHアクセスを制限するのが最も安全な方法です。 SSHポートを変更すると、ボットスキャンが無効になる可能性がありますが、標的型攻撃に対してはほとんど効果がありません。
ターミナルで、
/usr/sbin/iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --set
/usr/sbin/iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP
これにより、新しいIPアドレスがブロックされます1分あたり3回以上接続する場合。接続が確立されると、認証が成功します。ログルールを設定して、ここで行われていることをログに記録することもできます
/sbin/iptables -N LOGDROP
/sbin/iptables -A LOGDROP -j LOG
/sbin/iptables -A LOGDROP -j DROP
iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --set
iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j LOGDROP
他の人が述べたように。かなり厳しいルール(例:3つの間違ったパスワード、または存在しないユーザーでログインを試みる)を使用したFail2banは、非常に効果的です。
また、SSHを非標準ポートに移動することをお勧めします。もちろん、これはあらゆる種類のインテリジェントな攻撃に対してまったく役立ちませんが、かなりの数の最も基本的な自動化スキャナーを排除します。
これをポートスキャンを検出するものと組み合わせてfail2banに接続すると、スキャナー、ボットネット、その他のがらくたのかなりの部分を回避することもできます。
- パスワード認証を無効にし、公開鍵認証を有効にする
普段はchrome Secure Shell clientとAFAIKを介して接続しているため、実際には4を実行しませんでした。公開鍵のサポートはありません。
ChromebookでChrome Secure Shell Clientを使用しており、公開鍵認証をサポートしています。すべてのシステムでパスワード認証を無効にしており、Chromebookや私の電話はジュースを使用しています。
Fail2banのインストールを試すか、直接のrootログインを無効にするか、デフォルトのsshポートを変更することなどができます