web-dev-qa-db-ja.com

1日に数百回の侵入の試みが行われるのは正常ですか?

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

196
Kyle

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

攻撃対象はGoogleまたはDNSエントリでは見つかりませんが、攻撃者は特定のサブネット(たとえば、既知のルートサーバーホスティング会社)のすべてのIPアドレスを試すだけです。そのため、URL(したがってDNSエントリ)がやや曖昧であることは問題になりません。

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

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

さらに、インストールできます fail2ban これは、authlogをスキャンし、IPからのログイン試行の失敗がある程度見つかった場合、そのIPを/etc/hosts.denyまたはiptables/netfilterに追加します。攻撃者を数分間ロックアウトするため。

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

207
Holger Just

数100で十分です...先月、私のサーバーの1つで40k回の試行が失敗したことがわかりました。それらをプロットする問題を解決しました: Map

Sshポートを変更してPort Knockingを実装すると、数は0に減少しました:-)

58
Bart De Vos

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

netfilterにはrecentモジュールがあり、(INPUT chain)で使用できます。

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に接続しようとするすべての試みは、IPを含むrecentモジュールと "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
29
0xC0000022L

fail2ban 、またはSSHをIPにロックするような同様の方法を実装できます。悲しいことに、ボットは常にブルートフォースアクセスを試みるため、これはごく普通のことです。適切なパスワードを持っていることを確認する必要があります。

15
Jacob

はい。今日ではごく普通のことです。

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

$ ssh-keygen -t dsa

〜/ .ssh/id_dsa.pubの内容をサーバー〜/ .ssh/authorized_keys(および/root/.ssh/authorized_keys、直接rootログインが必要な場合)。

サーバー/ etc/ssh/sshd_configを構成して、公開鍵認証のみを受け入れるようにします。

PubkeyAuthentication yes
PasswordAuthentication no
PermitRootLogin without-password

サーバーが多すぎる場合は、Puppetを使用して、サーバーへの公開鍵と構成を実行できます。

Denyhostsおよびfail2banSSHログインの繰り返し試行をブロックし、完全なIDS/IPSが必要な場合はSnortを参照してください。

12
jkj

http://denyhosts.sourceforge.net/ を使用します

はい、公開鍵認証を使用し、パスワード認証を無効にする必要があります。

8
number5

たったの500しか手に入らないのは、ちょっと低いと思います。

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

6
James Schek

試行は機械化されているため、数値は問題ないようです(一部のサイトと比較して高い、他のサイトと比較して低い)。通常必要な手順を実行する必要があります。攻撃を検出しなくても、サイトを毎日攻撃の対象と見なします。 攻撃を検出しない、という意味ではありません

6
adamo

はい、

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

DNSに関連付けられたIPアドレスを回避する

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

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

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

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

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

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

6
Ben DeMott

Fail2banのような自動ロックアウトメカニズムを使用することに加えて、もう1つのオプションがあります。実際に攻撃者の悪用アドレスISPに連絡します。まったく無駄に見えるかもしれませんが、スクリプトキディの場合、ISPは彼らに行動を起こす用意はありません。

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

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

5
JRW

何百ものSSH接続が失敗するのはごく普通のことです。

オプションがあれば、SSHポートを非標準のものに変更するだけです。サーバーの安全性が向上するわけではありませんが、ログがクリーンアップされます(故意に侵入しようとしているユーザーを確認できます)。

5
Adrian Macneil

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

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

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

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

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

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

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

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

お役に立てれば。

4
J Litten

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

非標準ポートでの失敗したログインは数が少なく、はるかに離れており、より標的を絞った攻撃を示している可能性もあります。

さらに一歩進んで Kippo などのSSHハニーポットをインストールして、ブルートフォーサーを「入れ」、チャンスが与えられたときに何が行われるかを確認することもできます。

4
Andy Smith

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

例:

AllowUsers admin jsmith jdoe

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

3
Jay

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

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

3
weeheavy

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

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

Fwknopは、なりすましではなく、接続を承認するだけではなく実際に認証するため、より優れたポートノック実装の1つです。

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

  • Google-authenticator または wikid を使用してSSH認証を強化する

これにより、パスワードベースの攻撃と、特定の攻撃者/標的型攻撃が管理マシンを侵害し、SSHキーとパスワードの組み合わせを盗む可能性が保護されます。

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

3
Hilton D

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

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

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

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

1
BillThor

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

1
user9517

はい、それは正常です。

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

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

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

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

  • Sshアクセスを持つユーザーには、強力な英数字のパスワードを使用してください

0
Kevin Parker

私は pam_abl を使用して、ブルートフォーサーを一時的にブラックリストに登録します。 hosts.denyiptablesに依存するよりも、独自のデータベースを使用してPAMで認証を受ける方が良いと思います。

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

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

最後のものは最も簡単なものです。負荷の高いマシンでは、このような侵入の試みはシステム全体に深刻な悪影響を与える可能性があります。

-
よろしく、
ロバート

0
Robert