RedHat 4サーバーで毎晩、何百、時には何千もの失敗したsshログインが失敗します。リモートサイトからのファイアウォールの理由により、標準ポートで実行する必要があります。これをブロックするためにすべきことはありますか?多くの人が同じIPアドレスから来ていることに気づきました。しばらくすると止まらないのでは?
Iptablesを使用して、SSHポートへの新しい着信接続をレート制限できます。ターンキーソリューションを提供するには、iptables構成全体を確認する必要がありますが、基本的には次のようなルールを追加することについて話しています。
iptables -A INPUT -p tcp --dport 22 -m recent --update --seconds 60 --hitcount 5 --name SSH --rsource -j DROP
iptables -A INPUT -p tcp --dport 22 -m recent --set --name SSH --rsource -j ACCEPT
これらのルールは、表の前半のESTABLISHED接続を受け入れることを前提としています(これにより、新しい接続のみがこれらのルールにヒットします)。新しいSSH接続はこれらのルールにヒットし、マークされます。 60秒以内に、単一のIPアドレスから5回試行すると、そのIPからの新しい着信接続がドロップされます。
これは私にとってはうまくいきました。
編集:追加のソフトウェアをインストールする必要がなく、完全にカーネルモードで実行されるため、この方法は "fail2ban"よりも優先されます。 「fail2ban」のようなログファイルの解析は処理しませんが、SSHでのみ問題が発生する場合は、ソフトウェアのインストールが必要でより複雑なユーザーモードは使用しません。
fail2ban は、失敗したログイン試行が多すぎるIPアドレスをブロックすることで、これを支援できます。
できればSSHに非標準のポート(つまり、ポート10222)を使用することをお勧めしますが、そうすることはできないので、DenyHostsなどを使用することをお勧めします。
http://denyhosts.sourceforge.net/
インストールと設定が簡単な素晴らしいパッケージ。
インターネット上の任意の場所からシステムにsshできるのはいいことかもしれませんが、開いているsshポートにロックし、システムにさまざまなジョーアカウントや辞書攻撃を適用する自動パスワード攻撃システムがあります。これは、毎晩のログの概要を読むのに時間がかかる場合があり、帯域幅の浪費になります。
同じシステム上にWebサーバーがある場合は、phpおよびtcpラッパーを使用して、sshのインバウンドトラフィックを既知のシステムに制限できます。また、インターネット上の任意のシステムからのアクセスを許可するバックドアキーを提供できます。
方法は次のとおりです。
/etc/hosts.deny内のすべてのssh接続を拒否します。
# /etc/hosts.deny fragment
sshd: all
/etc/hosts.allowでIPによって既知のシステムを許可し、一時的なアクセス用のファイルを追加します。
# /etc/hosts.allow fragment
sshd: 10.0.10.2 # some system
sshd: 172.99.99.99 # some other system
sshd: /etc/hosts.allow.temporary-sshd-access
Webサーバーにphpファイルを作成し、my-sshd-access.phpのような自明ではない名前を付けます。
<?php
function get_ip()
{
return getenv("REMOTE_ADDR");
}
?>
<?php
$out='/etc/hosts.allow.temporary-sshd-access';
$log='/var/log/sshd-access-addition-log';
print "Was:";
readfile($out);
print "<br>";
$ip=get_ip();
$fp=fopen($out,"w");
fputs($fp,$ip);
fclose($fp);
$lfp=fopen($log,"a");
fputs($lfp,$ip);
fputs($lfp,"n");
fclose($lfp);
print "Wrote: ";
readfile($out);
?>
Phpコードを許してください-私はそれをどこかからスワイプしました。アクセスするシステムのIPアドレスを/etc/hosts.allow.temporary-sshd-accessファイルに追加するだけで、接続時にsshdによって読み込まれます(/etc/hosts.allowに含まれているため)。 。
ここで、Web上の任意のシステムでこのシステムにSSHで接続する場合は、最初にWebブラウザを使用してこのファイルにアクセスします(またはwgetまたは同等のコマンドを使用します)。
$ wget http://your.system.name/my-sshd-access.php
これで、システムにsshで接続できるはずです。これが頻繁にsshでアクセスする可能性がある場合、/ etc/hosts.allow.temporary-sshd-accessファイルの内容を読み取り、IPアドレスを/ etc/hostsに永続的に追加するのは簡単です。許可します。
denyhosts も確認する必要があります。
参考:OpenSSH 6.7は tcpwrappers support を削除しました。つまり、denyhostsはおそらく新規インストールのソリューションではありません。
自分でお願いし、パスワードログインを無効にします。認証キーのみを使用する(例:google ssh-keygen-例: http://www.puddingonline.com/~dave/publications/SSH-with-Keys-HOWTO/document/html/SSH-with-Keys -HOWTO-4.html )サーバーの安全性が向上し、サーバーへの接続がより快適になり(ssh-agent、ssh-add、keychainを確認)、sshブルートフォース攻撃の被害を受けることはなくなります。
別のオプションは、すべてのssh接続が証明書によって検証されることを要求し、パスワードを完全に排除することです。
私はDenyhostsを使用していますが、少数の場所からリモートで定期的に接続しているだけだったので、他の場所を除いてすべてのポート22接続をブロックし、ポートノッキングを使用して、ラップトップでどこからでも接続できるようにしました。 。
別の解決策は、sshを別のポートに移動することです。これらのワームはかなり愚かです。
複数の障害発生後にIPを自動的にブロックするソリューションには、サービス拒否攻撃のリスクが伴います。ブルートフォース攻撃や辞書攻撃の効果を減らすための適切なパスワードポリシーがある限り、私はそれらについてあまり心配しません。
ユーザー/グループを、そもそもsshを許可する必要があるユーザーのみに制限し、rootとしてのログインを無効にする場合は、十分に安全である必要があります。そして、それで十分でない場合は、常に鍵ベースの認証が存在します。
正直なところ、SSH(およびポート22)を実行する必要がある場合、これらを回避することはできません。パスワードを受け入れる必要がある場合は、さらに悪い状態になります。
最善の策は、SSHログを除外するようにログ分析ソフトウェアを構成することです。次に、別のインスタンスを実行してSSHログのみを確認し、procmailを使用して失敗した試行を除外します。複数回失敗したIPアドレスからのログインの成功を監視するスクリプトを作成することもできます。
SSHサーバーの調査を阻止する方法はありません。 Denyhosts、fail2ban、およびiptablesの例はある程度までは機能しますが、正当なユーザーを誤ってブロックするという追加の危険があります。最善の方法は、それを吸い取って、ログ分析プロセスを自動化して、考える必要のある時間を短縮することです。
Red Hatサーバーで失敗したshhログイン試行が発生していると言った場合、背後にあるファイアウォールの種類と、そこにshhする必要のあるユーザーの数は何ですか。ファイアウォールが実際のサーバーの近くに到達する前に、ファイアウォールでの試行を制限することをお勧めします。
正当にアクセスを必要とするIPアドレスの範囲を制限できる場合は、ファイアウォールにアクセスリストを設定できるはずです。ファイアウォールでトラフィックを制限できる場合は、サーバーが何かのターゲットになっているように見えるため、ネットワーク侵入システムを確認することをお勧めします。
複数のホストでこの問題に対処する必要がある場合は、OSSECを確認することをお勧めします。 http://www.ossec.net/main/ossec-architecture
これにより、一元化された場所から複数のエージェントを構成して、ブルートフォース攻撃に自動的に応答することができます(ログから抽出できる他のパターンとともに)。
ソフトウェアの非常に素晴らしい作品:)
ほとんどのウェブホストは APF + BFD を使用して、失敗したSSHログインをIPブロックします。最近は CSF(Configserver firewall) があり、これには同じことを行うLFDと呼ばれるツールが含まれています。サーバーにアクセスしたくない特定の国(韓国、中国など)からのブロックIPも含まれます。私のSSHプローブの99%が発信元のようです)。
私は fail2ban を使用しており、それは私をたくさん助けてくれました。
DenyHostsに似た別のオプションはsshutout http://www.techfinesse.com/sshutout/sshutout.html です。