私はネットワーク管理に非常に慣れていないので、まだ経験はありません。
Pleskパネルを備えたUbuntuルートサーバーがあります。
昨日、友人と私は、TS3の音声の質が非常に悪くなっていることに気付きました。サーバーにいくつかのpingを送信しましたが、非常に高いパケット損失がありました。その後、私は少しググって、auth.log
。私はそれをダウンロードして少しスクロールしたところ、これを見つけました:
May 13 10:01:27 rs204941 sshd[9351]: input_userauth_request: invalid user student [preauth]
May 13 10:01:27 rs204941 sshd[9351]: pam_unix(sshd:auth): check pass; user unknown
May 13 10:01:27 rs204941 sshd[9351]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=112.220.198.102
May 13 10:01:29 rs204941 sshd[9351]: Failed password for invalid user student from 112.220.198.102 port 39806 ssh2
May 13 10:01:29 rs204941 sshd[9351]: Received disconnect from 112.220.198.102: 11: Bye Bye [preauth]
May 13 10:01:31 rs204941 sshd[9353]: Invalid user student from 112.220.198.102
誰かがSSH経由で何度もログインを試みたようです。私は少しスクロールして、この誰かが多くの異なるユーザー名を使用しようとしているのを見ました:student, tech, psi, news,...
これらの何百ものログインがファイルに表示されました。
データセンターのウェブサイトでトラフィック統計を調べました。 1時間あたりわずか17MBでした。 100Mbitのバックボーンを持っているので、データ転送自体は問題ないようです。
現時点では、サーバーにアクセスできません。
私の質問は、どのようにしてアクセスを再度取得できるか、この攻撃を抑制して後続の攻撃を防ぐにはどうすればよいですか?
アクセス方法は?
アカウントにアクセスできない理由は明らかではありません。
マシンが攻撃または高負荷になっている場合は、アクセスの制限(IP制限)またはサーバーのオフライン(インターネットから切断)についてプロバイダーに相談する必要があります。
プロバイダーが支援できる帯域外アクセスも必要になる場合があります。
誰かがサーバーに危害を加えた場合、バックアップから復元するか、リカバリイメージを使用する必要があります。
サーバー、特にSSHへの攻撃を防ぐ方法
そもそも彼らがあなたのマシンに到達しないようにしてください!ホストに到達する前に、またはSSHレベルでさえ、総当たり攻撃を阻止する方法はたくさんあります。
そうは言っても、fail2banのようなものでオペレーティングシステムを保護することは素晴らしいアイデアです。 http://en.wikipedia.org/wiki/Fail2ban
Fail2banはDenyHostsに似ていますが、SSHに焦点を当てたDenyHostsとは異なり、fail2banは、ログファイルにログイン試行を書き込むサービスを監視するように構成でき、/ etc/hosts.denyを使用してIPアドレス/ホストのみをブロックする代わりに、fail2banはNetfilter/iptablesとTCP Wrappers /etc/hosts.deny。
ブルートフォースログインを防止するために検討する必要のある重要なセキュリティ技術がいくつかあります。
SSH:
応用:
この攻撃を抑制して次の攻撃を防ぐ方法
通常、デフォルトのsshポートを22から1122のような別のポートに変更します。これにより、ボットからの多くの自動攻撃を防ぐことができますが、単純なポートスキャンで検出できます。とにかく:
vi /etc/ssh/sshd_config
ポート22をポート1122に編集しますが、これでは不十分です。
log2iptableshttps://github.com/theMiddleBlue/log2iptables の代わりにFail2banを使用します。これは、解析する単純なBashスクリプトなので正規表現を含むログファイルとiptablesを実行します。たとえば、5つの一致が発生すると、log2iptablesは特定のIPアドレスをドロップします。 Telegram APIを使用していて、問題が見つかったときに私の電話にメッセージを送信できるので、すばらしいです:)
これが役立つことを願っています!
私はこれをまとめて、cronjobなどとして15分ごとに実行します:
for z in `grep Invalid /var/log/auth.log | awk '{ print $NF }' | sort | uniq`
do
count1=`grep $z /etc/hosts.deny | wc -l`
count2=`grep Invalid /var/log/auth.log | grep $z | wc -l`
if [ $count1 -eq 0 -a $count2 -gt 10 ] ; then
current=`egrep "^ssh" /etc/hosts.deny | sed 's/sshd[ :,]*//'`
Sudo cp /etc/hosts.deny.bak /etc/hosts.deny
Sudo chmod 666 /etc/hosts.deny
if [ $current ] ; then
echo "sshd : $current , $z" >> /etc/hosts.deny
else
echo "sshd : $z" >> /etc/hosts.deny
fi
Sudo chmod 644 /etc/hosts.deny
fi
done
Centos/RHELが不正なアクターをブロックするための自動化されたソリューション
Centosが無効なユーザーアカウントと有効なアカウントの不正なパスワードの両方について失敗したsshログインをチェックするためのスクリプトを次に示します。ソースIPが3回を超えてヒットし、まだ拒否リストにない場合は、拒否リストに追加されます。これをrootのcrontabから15分ごとに実行します。また、sshを介したrootログインを許可していないため、この組み合わせにより、かなり静かになっています。
#/bin/bash
# Save a copy of the existing hosts.deny file for safety
cp /etc/hosts.deny /etc/hosts.deny.bak
# Get a list of the offending IP addresses and process them
for z in `grep "Invalid\|Failed" /var/log/secure | awk '{ print $NF }' | sort | uniq`
do
# Get the number of times this IP hit us
hits=`grep "Invalid\|Failed" /var/log/secure* | grep $z | wc -l`
# Check whether this IP is already blocked
blocked=`grep $z /etc/hosts.deny | wc -l`
# If they hit us more than 3 times and are not already on the deny list
# add them to the deny list
if [ $hits -gt 3 -a $blocked -eq 0 ]
then
echo "sshd : $z" >> /etc/hosts.deny
fi
done
これはSSH攻撃に対する私の代替ソリューションです。使用しない場合は、SSHデーモンを閉じ続けるという考え方です。オープンポートなし、攻撃なし。あなたはそれを試すことができます。オープンソースです https://github.com/indy99/nnet_port_guard