ユーザーを監査し、サーバー上のSSHへのアクセスを試行するにはどうすればよいですか?


28

私のサーバーでいくつかのセキュリティ上の問題がありました。いくつかのSSHユーザーは、問題を引き起こすファイアを設定しています。

私はしたいと思います:

  • ユーザーのログインとログアウトを追跡する
  • 悪意のあるアクティビティを発見するために、これらのSSHのアクティビティを追跡します
  • ユーザーがログを削除できないようにする

私はシステム管理者ではないので、この問題についてはかなり経験が浅いので、どんなアドバイスでも大歓迎です。:)

回答:


27

SSHサーバーについて説明しているので、コマンドラインソリューションを紹介します。

  • ユーザーのログインとログアウトを追跡します。それは簡単です、ファイルに/var/log/auth.logはこの情報が必要です。

  • それらのユーザーのアクティビティを追跡する:かなり無害な場合.bash_historyは、ホームディレクトリのファイルを確認できます。実行したコマンドのリストが表示されます。問題はもちろん、このファイルを削除または編集できることです。

  • ユーザーがログを削除できないようにする:ユーザーがに触れないようにする必要がありますauth.log。彼らが遊ぶのを止める.bash_historyには、いくつかのトリックをする必要があります。

  • ユーザーがルートアクセスを取得できた場合はどうなりますか?:あなたはめちゃくちゃです。間違えない限り、彼らはすべての足跡を隠すことができます。


ユーザーunset HISTFILEがbash内に入力できないようにする方法はないため、bashの履歴は記録されないことに注意してください。
ジル「SO-悪であるのをやめる」

@Gilles、トリックのリンクを読んでください。HITSFILEを.profileの読み取り専用変数として設定します。
ハビエルリベラ

制限のないbashで読み取り専用変数を設定解除できると思いましたが、明らかにそうではありません。これにより、トレーサビリティが少し向上します。これは、別のシェル(読み取りも読み取りもし~/.bash_historyない~/.bashrc)がに表示されるため$HISTFILEです。しかし、それ自体は完全に合法である可能性があります(たとえば、ユーザーは単に実行しzshたい、または代替で独自のオプションを設定したいbashrc)。
ジル 'SO-悪であるのをやめる'

1
はい。彼をbashまたは他のシェルに制限できます。結局のところ、セキュリティはただのレースです。
ハビエルリベラ

「ユーザーがルートアクセスを取得できた場合」、すべての手順を非表示にできるとは限りません。監査には常に外部サーバーを使用できます。この場合、ルートになることを含め、すべてのステップが記録されます。
ペトル

6

[免責事項]パーティーに遅れていることに気づきましたが、別の質問に答えを貼り付けたいと思います。読者に良い洞察を提供できると思うからです。基本的なssh情報の場所。

AskUbuntuでこの質問を読み、VPSをチェックした後、同様の問題が発生しましたが、無数の総当たり攻撃が見られました。それが私が行動を起こすことにしたときです。

さて、私がリンクした質問によると、sshを介したマシンでのログイン試行の失敗(ブルートフォース攻撃など)を確認するには、次のように入力してください。

grep sshd.\*Failed /var/log/auth.log | less

出力が複数の行で構成されている場合、つまりブルートフォースの試行が多く、特に短い間隔で発生した場合は、次のアクションを実行できます。

ssh構成ファイルを変更する

これを行うには、次のように/ etc / ssh / sshd_configにあるファイルをお気に入りのエディターで開きますvim /etc/ssh/sshd_config

1.ポート22からsshを移動してみます。次の行を見つけます。

# What ports, IPs and protocols we listen for
Port 22

ポート22をコメントアウトし、好きな人を使用します。例:

# What ports, IPs and protocols we listen for
# Port 22
Port 28934

1024未満のポートには特別な(ルート)許可が必要であることを忘れないでください。これがどのように干渉するかはわかりませんが、ただ言っています。

2. sshを介したルートログインの無効化:ルートユーザー名は予測可能であり、システムへの完全なアクセスを提供するため、SSHを介してこのアカウントへの自由なアクセスを提供することは賢明ではありません。読ん行を探しのPermitRootLoginをし、それを設定していない何も

PermitRootLogin no

3.パスワード認証を無効にするSSHキー生成して使用し、システムにログインします。パスワードを有効にしないと、攻撃者はサーバーにアクセスするためにSSH秘密鍵を推測(または盗み)する必要があります。非常に非常に難しいことです。PasswordAuthenticationを読み取る行を見つけて、noに設定します。

PasswordAuthentication no

!警告!その前に、このガイドを参照してくださいこっち証明書認証を設定する方法について。

注:変更を行ったら、を使用しますsudo /etc/init.d/ssh restart。sshを使用して別のポートに接続するには、次を使用しますssh username@hostname.com -p <port_number>

ファイアウォールを設定する

Linuxに統合されている非常に強力で効果的なファイアウォールIPTablesのセットアップ方法については、このガイドをご覧ください。

セキュリティに役立つセットアップスクリプト

私が個人的に使用し、すぐに思い浮かぶのはFail2Banです。Fail2banは、ログイン試行の失敗についてログファイルを監視します。IPアドレスが認証試行の最大回数を超えると、ネットワークレベルでブロックされ、イベントがログインし/var/log/fail2ban.logます。それをインストールするには:sudo apt-get install fail2ban

ssh経由でコマンド履歴を確認する

という名前のlinuxコマンドがあり、historyその時点までに入力されたコマンドを確認できます。historyターミナルに入力して、その時点までのすべてのコマンドを確認してください。あなたがルートだったら助けになるでしょう。

特定のコマンド検索するにはhistory | grep command-name

sshの後のすべてのコマンドリストするにはfc -l ssh

viを使用してコマンドを編集することもできます(vimを試したことはありませんが、同様に機能すると仮定しています)。fc -e vi

履歴を削除することもできます:history -c

注:コマンドのファンではない場合history、ホームディレクトリ(cd ~)に.bash_history(bashを使用している場合)と呼ばれるファイルがありcat、bashシェルで入力されたすべてを確認できます。


とてもいい答えです。また、askubuntu.com
a / 3906/59250の


3
  1. ハビエルはすでにこれに答えました:/var/log/auth.log
  2. ここでこれに関するすばらしい記事を見つけました。
  3. ユーザーがrootにアクセスできない場合、ログファイルは安全なはずです。sudoersファイルにいくつかのカスタムルールを作成して、ユーザーがアクセスできるものとその方法を制限することができます。また、sshdデーモンのログレベルを上げることができます。

3

ログイン自体とは別に、ログイン後のユーザーのアクションを追跡/記録する安全な方法はありません。Linuxの基本的な知識がある場合は、シェルロギングを無効にしたり、他のシェル(Pythonなど)からコマンドを実行したりできます。

代わりに、sshアクセスを提供することについて保守的にすべきです。彼らは本当にそれを必要としますか?シェルを使用してビジネスを提供しているのでない限り、sshアクセスを許可することはあまり一般的ではありません。

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