1日に何百もの侵入試行を受けるのは正常ですか?


196

サーバーを確認したところ、/var/log/auth.log1日あたり500件を超えるパスワード/侵入試行の失敗通知を受け取っていることがわかりました。私のサイトは小さく、そのURLは不明瞭です。これは正常ですか?何らかの対策を講じるべきですか?


2
不要な外部ポートをすべてロックダウンするまで、多くのハッキングの試みを受けただけでなく、ある日2つの異なる国から同時にハッキングされていたので、それが非常に悪かったのを覚えています!そのため、数百回の侵入試行は完全に正常です。
ジャンゴラインハルト

91
16秒ごとに1回、新しい攻撃の「シーケンス」が発生するサーバーがあります。通常、1つのシーケンスは、さまざまなポートでの約100回の試行のバッチです。ある日、キックのために、ファイアウォールの外側にあるパッチ未適用のサーバーをオンにしました。電源を入れてからpwndを取得するまでに10分もかかりませんでした。ポイントは、インターネットは本当にジャングルです。食べられないようにしてください。
-NotMe

2
:私は私が間違ってサイトに私の質問を投稿見ることができますsuperuser.com/questions/200896/...
ジャスティン・C

6
私は他の人に同意しますが、これは必要な一般的なポート(80、443)では正常です。デフォルトのポートを22からたとえば6022のような不明瞭なものに変更するだけで、SSHポートに対するこれらの試みを事実上排除しました それだけで、そのタイプの攻撃の99%をほぼ排除しました。
キロ

2
SSHポートを変更する場合、ポート1024未満に保つセキュリティ上の理由があります(ルートのみが1024未満のポートを開くことができるため、SSHをハイジャックする他のユーザーから保護されます)。
ブレンダン

回答:


207

今日のインターネットでは、これは悲しいことにごく普通のことです。IPネットワーク全体で見つかった各サーバーにログインしようとするボットネットの大群があります。通常、よく知られているアカウント(ルートや特定のアプリケーションアカウントなど)に対して単純な辞書攻撃を使用します。

攻撃の標的は、GoogleやDNSエントリでは見つかりませんが、攻撃者は特定のサブネット(既知のルートサーバーホスティング会社など)のすべてのIPアドレスを試すだけです。したがって、URL(したがってDNSエントリ)が不明瞭であっても問題ありません。

そのため、次のことが非常に重要です。

  • SSHでrootログインを許可しない(howto
  • どこでも(Webアプリケーションでも)強力なパスワードを使用する
  • SSHの場合、可能であれば公開鍵認証を使用し、パスワード認証を完全に無効にします(howto

さらに、authlogをスキャンするfail2banをインストールできます。IPから特定のログイン試行の失敗が検出されると、そのIPを/etc/hosts.denyiptables / netfilterに追加して、攻撃者を数分間ロックアウトします。

SSH攻撃に加えて、脆弱なWebアプリケーション(一部のブログアプリ、CMS、phpmyadminなど)についてWebサーバーをスキャンすることも一般的になっています。そのため、それらを最新の状態に保ち、安全に構成してください。


21
fail2banなどのアプリケーションは、午前中の愚かな時間にボットがサーバーにヒットするのを「一時的に」停止するのに大いに役立ちます。
11年

46
sshのポートを22から222に移動します。これは非常にうまく機能します。
トム・オコナー

40
+1、公開鍵認証のみ:)
0xC0000022L

3
@STATUS_ACCESS_DENIED:fail2banが実行するアクションは、実行するシェルコマンドの単なるリストです。そのため、カスタム設定で適切に機能させるのは非常に柔軟で簡単です。最善のリファレンスは、ダウンロードしてを参照することaction.d/iptables.confです。
mattdm

4
このような攻撃者をブロックすることは時間の無駄です。ルートログインを無効にすると、パスワードはもちろんのこと、正しいログイン名を誰も推測できない可能性が高くなります。SSH自体はすでにパスワード要求のレート制限を行っているため、ユーザー名を知っていても(ランダムボットは知らない)、まともなパスワードを持っている場合は、推測することはありません。
ブレンダン

58

数百は問題ありません...先月、サーバーの1つで4万回の試行が失敗しました。私はそれらをプロットするのに苦労しました:地図

sshポートを変更してPort Knockingを実装すると、数値は0になりました:-)


2
素敵な地図。これを行う方法を知りたいです!
-jftuga

9
@jftuga最初にログからすべてのIPを取得しました。grep 'Failed password' /var/log/secure* | grep sshd | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' | sort | uniq(重複を許可する場合は、末尾の| uniqを削除します)。次に、それらをCSVに入れて、zeemaps.comにアップロードできます。彼らはマップ(郡ごとの試行回数のための赤に緑を)着色する回数を使用する場所私は私は、その後、より良いマップを見てきましたが、私はジェット機は、1人の考え出したていない
バート・デ・ヴォス

3
「実装されたポートノッキング」とはどういう意味ですか?これを行うためにapt-get経由でインストールできるアプリはありますか?番号が0に落ちるといいですね

18
あいまいさによるセキュリティは悪いラップを取得します。戦略全体ではなく全体的な戦略の一部である限り、まったく問題ありません。結局のところ、あいまいな文字列以外のパスワードは何ですか?
ジョエルCoel

5
@Joel Coel、これは秘密の文字列です。不明瞭な問題によるほとんどのセキュリティとは対照的です-あいまいですが、必ずしも秘密のプロセスではありません。
-tobyodavies

29

私は、公開鍵認証のみを許可し、ルートログインを許可しないことに加えて、「ターピット」を使用します。

netfilterありrecent、あなたが(で使用できるモジュール、INPUTチェーンは):

iptables -A INPUT -i if0 -p tcp --dport 22 -m state --state NEW -m recent --set --name tarpit --rsource
iptables -A INPUT -i if0 -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 180 --hitcount 6 --name tarpit --rsource -j DROP
iptables -A INPUT -i if0 -p tcp --dport 22 -j ACCEPT

つまり、ポート22への接続試行はすべてrecent、IPとその他の「tarpit」という名前のモジュールによって一覧表示されます(興味がある場合は、を参照してください/proc/net/xt_recent/tarpit)。明らかに、他の名前を使用できます。

IPをリストまたはリストから削除するには、次を使用します。

echo "+123.123.123.123" > /proc/net/xt_recent/tarpit
echo "-123.123.123.123" > /proc/net/xt_recent/tarpit

これにより、試行が300秒で5回に制限されます。既存の接続を持つユーザーは、既に確立された接続を持ち、さらに(レート制限を超えて)作成することが許可されているため、その制限に悩まされないことに注意してください。

ルールを好みに合わせて調整しますが、ルールがその順序で追加されることを確認します(つまり、追加するときはこの順序で使用し、挿入するときは逆の順序で使用します)。

これにより、ノイズが大幅に削減されます。また、ポートを変更するという認識されているセキュリティとは異なり、(ブルートフォーシングに対する)実際のセキュリティも提供します。ただし、ご使用の環境で実行可能な場合は、ポートを変更することをお勧めします。ノイズレベルも大幅に削減されます...

これをfail2banと組み合わせることができますが、私はこれと上記のルールのみを使用せずに正常に実行しています。

編集:

これを行うことで自分を締め出すことができるので、特定のポートをノックして禁止を解除できる次のようなものを追加できます。

iptables -A INPUT -i if0 -p tcp --dport <knockport> -m state --state NEW -m recent --name tarpit --remove

2
私はこれを使用して、時々自分自身をブロックすることができます。そのため、禁止を解除するために「ノック」できる別のポートを設定したいです。
ベンラムリー

@benlumley:良い点。ポートのノッキングは、デフォルトのポートを変更する場合にも同様に役立ちます-または、両方を組み合わせて変更する場合でも
...-0xC0000022L

@benlumley:あなたのコメントを見ました(Samによって削除されました)。答えが編集/改善されるかどうかは絶対に気にしません;)
0xC0000022L

15

fail2ban、またはIPにSSHをロックするような同様の方法を実装できます。残念ながら、ボットは常にブルートフォースアクセスを試みるため、非常に正常です。適切なパスワードを使用する必要があります。


3
SSHを使用している場合は、公開キー認証を検討してください。これは、パスワード認証よりも少し安全です。
Piskvor

12

はい。最近ではかなり普通です。

可能であれば、管理目的で公開鍵認証のみを使用してください。ワークステーションで秘密鍵を生成します。

$ ssh-keygen -t dsa

〜/ .ssh / id_dsa.pubの内容をサーバー〜/ .ssh / authorized_keys(および/root/.ssh/authorized_keys、直接ルートログインが必要な場合)にコピーペーストします。

サーバーの/ etc / ssh / sshd_configを設定して、公開鍵認証のみを受け入れます。

PubkeyAuthentication yes
PasswordAuthentication no
PermitRootLogin without-password

サーバーが多すぎる場合は、Puppetを使用してそれらに対して公開キーと構成を実行できます。

見てDenyhostsfail2banの繰り返しSSHのログイン試行をブロックするとご覧にSnortをフルIDS / IPSが必要な場合。


2
サーバーへのシェルアクセスにSSHで公開キー認証を使用することはお勧めしません。ワークステーションが危険にさらされたり、さらにひどく盗まれたりした場合、パスワードを必要とせずに誰かがあなたのサーバーにオープンアクセスできるようになります。公開キー認証は、パスワードを必要とせずに別のシステムにSSHアクセスできるようにするためにスクリプトまたはプログラムのようなものが必要な場合に適しているため、プレーンテキストパスワードをスクリプト/プログラムに埋め込む必要はありません。
登録ユーザー

5
@Deleted Account:SSHプライベートキーのパスフレーズを設定できます。
フィルコーエン

2
「登録済みユーザー」のコメントが間違っています。明確にするために:秘密鍵には常に適切なパスワードを設定し、どのサーバーにも秘密鍵を保存しないでください。秘密鍵は自分のワークステーションに保管してください。鍵をssh-agentプログラムに追加してパスワードを入力すると、パスワードを再入力することなく、公開鍵がインストールされているすべてのシステムにログインできます。sshクライアントでエージェント転送を有効にして、サーバーからサーバーにログインできるようにします。秘密鍵を盗むのは悪いことですが、まともなパスワードがあれば、盗まれたパスワードほど悪くはありません。
マルタインHeemels

右、管理者の秘密鍵を暗号化せずに保存することさえ考えないでください。
-yrk



6

たった500個しか得られないというのはちょっと低いと思います。

以前の雇用主では、コンピューターセキュリティの研究者の1人が、侵入攻撃の絶え間ない流れを「宇宙ノイズと同等のインターネット」と呼びました。彼は、インターネット上のシステムを検索し、システムを乗っ取ろうとするスクリプトを自動的に悪用する、通常の継続的な悪意のあるトラフィックの流れとして説明しました。ボットネットやその他の悪意のあるシステムは、SETIによく似た脆弱なシステムについて、インターネットを永久にスキャンおよび再スキャンします。


6

はい、

これは一般的ですが、それはあなたが良い戦いと戦うべきではないという意味ではありません。サーバーをより安全にする方法のいくつかの手順を次に示します。

DNS関連のIPアドレスを避ける

ドメイン名に関連付けられたIPアドレスでSSHアクセスを無効にすることにより、共有環境またはコロケーション環境でこの数を大幅に減らすことができます。リストにない非ドメインIPアドレスは、このタイプのトラフィックをあまり受信しないため、リストにないIPを購入し、このIPをSSHアクセスにのみ使用します。

すべてのSSHアクセスにVPNを使用する

サーバー環境内のプライベートネットワークにIPsec / VPNを実装できる環境にいる場合、これが理想的です。すべてのSSHインターネットアクセスを無効にし、統合されたライトアウトソリューションがあることを確認します。VPNをセットアップし、VPNからのSSHアクセスのみを許可します。

SSHアクセス用のIPアドレスルールを実装する

VLANがオプションではない場合、既知のIPアドレス範囲からのSSH接続のみを許可するようにルーターまたはファイアウォールルールを構成します。

これらの手順に従うと、SSHを介してサーバーにアクセスするためにホスティング会社のネットワークを侵害する必要があることを知っているため、夜はずっと安眠できます。


5

何百もの失敗したSSH接続を見るのはかなり普通です。

オプションがある場合は、SSHポートを非標準のものに変更するだけです。サーバーを必ずしも安全にする必要はありませんが、ログを確実にクリーンアップします(そして、意図的に侵入しようとしている人を見ることができます!)


5

fail2banなどの自動ロックアウトメカニズムの使用に加えて、もう1つのオプションがあります。実際には、攻撃者の不正使用アドレスISPに連絡してください。それは完全に無駄に思えるかもしれませんが、スクリプトキディの場合、ISPはそれらに対してアクションを起こすことをいとわないでしょう。

不正使用アドレスを見つけるには、arin.netから始めて、whoisを使用してIPアドレスを検索します。別の地域のレジストリにリダイレクトされる場合がありますが、最終的にはアドレスを含むIPブロックの責任あるISPを見つけることができます。abuse @アドレスを探すか、技術担当者にメールしてください。

関連するログファイルエントリを含む丁寧なメッセージを送信し(プライベート情報を削除するようにしてください)、問題のあるホストに対してアクションを実行するよう依頼します。


4
以前はこれを行っていました。しかし、費やした時間と受け取った利益との関係は非常に短いため、問題ではありません。
NotMe

1
より効果的ですが、よりリスクの高いこの戦術の変形は、ISPを中間ノードに報告することです。ただし、レポートの証拠はしっかりしている必要があります。ISPが虐待レポートを無視していたため、これを行うとISP全体に重大な問題が発生しました。
staticsan

1
ある時、サーバーを担当する誰かではなくハッカーに虐待メッセージが届きました。それ以来、私はもう悩まない、ただ面倒だ。
wump

これは実際にはほとんどの場合役に立たず、時間がかかる場合があります
-RichVel

4

fail2banを使用せず、非標準ポートでSSH(およびその他)を実行することをお勧めします。あいまいさによるセキュリティは信じていませんが、これはログのノイズを減らす優れた方法だと思います。

非標準ポートでのログインの失敗はごくわずかであり、より標的を絞った攻撃を示している可能性もあります。

あなたものようなSSHのハニーポットインストールステップをさらに行くことができるKIPPOを bruteforcers「にしましょう」と、彼らはチャンスを与えられたんでしょうか見に。


ハハ、キッポはとても素敵です。サーバーにインストールして、何をしようとしているのかを確認します。
wump

4

はい、それは正常です。小さなウェブサイトであなたの状況にあるクライアントに私が言うこと。

常にハッキングされる準備をしてください。

開発サーバーにWebサイトのコピーを用意します。これは、無料で入手できるXAMPPを使用したWindowsデスクトップにすることができます。

開発サーバーを常に変更してから、ライブWebサイトにアップロードします。WordpressのようなCMSである場合は、開発サーバーで投稿を作成してから、ライブサーバーにコピーして貼り付けます。

ライブWebサイトから開発サーバーに何もダウンロードしないでください。

行っていない変更がないか、定期的にWebページを監視してください。具体的には、薬物または「強化」製品への隠されたリンク。これを行う多くのブラウザアドインとプログラムを見つけることができます。

侵害された場合。ホストに通知し、すべてを削除し、すべてのパスワードを変更し、クリーンな開発サーバーを空のWebサーバーにアップロードします。ホストと協力して、再発を防ぎます。

小規模なサイトにはセキュリティチームは必要ありません。それはあなたのホストが提供することになっているものです。そうでない場合は、ライブサーバーを移動しようとするよりも、開発サーバーを使用している場合の方がはるかに簡単な別のホストを取得します。

お役に立てれば。


2
「常にハッキングされる準備ができている」ための+1。
user78940

3

それを停止する別の方法(私は個人的にSSHポートを移動したくないので):これからログインするすべてのネットワークをリストできるかどうかを決定し、これらのネットワークにSSHポートへのアクセスのみを許可します。

ローカルISPのWHOISエントリは、攻撃を月に1〜2回のログイン試行に減らすのに役立ちました(当時は約1k /日でした)。まだdenyhostsを使用して、それらを検出しました


3

既に受け取った他の優れた提案に加えて、特定のサーバーに適切な場合はAllowUsersディレクティブも使用します。これにより、指定されたユーザーのみがSSH経由でログインできるようになり、安全でない構成のゲスト/サービス/システムアカウントからアクセスできる可能性が大幅に減少します。

例:

AllowUsers admin jsmith jdoe

AllowUsersオプションは、sshサービスにアクセスできるユーザーを指定および制御します。スペースで区切って、複数のユーザーを指定できます。


3

はい、それは正常です。あなたはできる :

  • fwknopを使用して攻撃の機会を減らす

Fwknopは、スプーフィングされず、単に接続を許可するのではなく実際に認証するため、より優れたポートノック実装の1つです。

  • opensshが使用するポートは変更できますが、実際にはセキュリティは向上していません。

  • Google認証システムまたはwikidを使用したssh認証の強化

これにより、パスワードベースの攻撃と、管理者のマシンを侵害し、sshキーとパスワードのコンボを盗む、断固とした攻撃者/標的型攻撃の可能性を保護します。

最新のpwn2own compを見るだけで、熟練した攻撃者が完全にパッチされた管理ボックスを侵害するのがどれほど簡単かを確認できます。


1

悲しいことに、これは非常に正常です。システムにfail2banなどを追加して、攻撃者を自動的に検出して禁止することを検討する必要があります。まだ行っていない場合は、公開鍵でsshのみを使用することを検討し、sshでのrootログインを許可しないでください。ftpを使用してシステムにファイルを転送する場合は、代わりにscp / sftpの使用を検討してください。


1

ポートノッキングを実装し、1日にいくつかのプローブを使用しています。彼らは接続を取得しないので、彼らは去ります。関係するポートへのすべてのアクセスを記録して報告します。

また、永続的な攻撃者を一時的にブラックリストに登録するためのファイアウォールとしてShorewallでfail2banを実行しました。

SSHへのインターネットアクセスが必要ない場合は、無効にします。リモートアクセスが必要な既知のアドレスがいくつかある場合は、それらのアドレスへのアクセスを制限します。

認証済みキーへのアクセスを制限することも役立ちます。


0

私はpam_abl一時的にブルートフォーサーをブラックリストに登録するために使用しますが、それはうまく機能します。hosts.denyまたはに依存するよりも、独自のデータベースを使用してPAMで認証を行う方が良いと思いますiptables

もう1つの利点は、pam_ablログファイルのスキャンに依存しないことです。


0

最近は完全に正常です。
SSHポートの新しい着信接続に対してファイアウォールの「バースト」制限を設定
するか、多くのログパーサーa'la fail2banの1つをインストールするか、SSHポートを変更できます;)。

最後のものが一番簡単です。負荷の高いマシンでは、このような侵入の試みはシステム全体に大きな悪影響を及ぼします。

-
よろしく、
ロバート


0

はい、それは正常です。

sshポートを標準の22から変更しました。サーバー、私のルール:) / etc / ssh / sshd_configを編集し、ポートを変更してサービスを再起動します。唯一の欠点は、使用するすべてのsshクライアントの構成にそのポートを追加することを忘れないでください。


0
  • rootログインを無効にします(すべてのLinuxシステムのrootユーザーが存在するため、ボットはユーザー名を簡単に推測できます)。通常ユーザーとしてログインした後、suまたはsudoのいずれかでrootに切り替えることができます。

  • デフォルトのポートを22から変更

  • 既知のIPのみからのsshアクセスを許可

  • sshアクセス権を持つユーザーに強力な英数字パスワードを使用する

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.