Debianサーバーを保護するためにどのような手順を取りますか?[閉まっている]


66

インターネットに直接接続されているDebianサーバーをインストールしています。可能な限り安全にしたいのは明らかです。あなたとあなたのアイデアを追加して、それを保護するためのアイデアとあなたがそれのために使用するプログラムをお願いします。

この質問の一部で、ファイアウォールとして何を使用していますか?手動で設定されたiptablesだけか、何らかのソフトウェアを使用して支援しますか?最善の方法は何ですか?すべてをブロックし、必要なものだけを許可しますか?このトピックの初心者向けの良いチュートリアルはありますか?

SSHポートを変更しますか?ブルートフォース攻撃を防ぐためにFail2Banなどのソフトウェアを使用していますか?



1
Ubuntuはufw Debianにはありません;)iptablesを自分で設定するのか、fireHOLのようなソフトウェアを使用するのかはわからない
Thomaschaaf

私は常にiptablesルールを自分で書く傾向があります。私は、すべてのフラグメント、クリスマスパケットなどをドロップするようなものを実行するボイラープレートを持っています。それを超えるものはシステム固有であり、通常はかなり小さいです。ちなみに、iptablesを使用している場合、ドロップフラグメントを十分に強調することはできません。何らかの理由でまだ調査していませんが、iptablesは最初のフラグメントのみをチェックし、残りはチェックせずに盲目的に渡します。私の考えでは、それはフラグメントを不利にします。
スコットパック

3
うーん... Debianにはufwがあります。 packages.debian.org/ufw
womble

回答:


50

必須:

  • エキスパートモードでのシステムのインストール、必要なパッケージのみ
  • iptables'inputのデフォルトポリシーを使用した手書きファイアウォール:ドロップ、SSH、HTTP、または指定されたサーバーが実行されている他のすべてへのアクセスを許可
  • SSHのFail2Ban [および場合によってはFTP / HTTP /その他-コンテキストに応じて]
  • ルートログインを無効にし、通常のユーザーとsudoを使用して強制的に
  • カスタムカーネル[古い習慣]
  • スケジュールされたシステムのアップグレード

さらに妄想のレベルに応じて:

  • 許可されたいくつかの宛先/ポートを除く出力のポリシーを削除します
  • integritTripwireなど、ファイルシステムウェアの一部が変更されていないかどうかをチェックする[チェックサムをマシンの外部に保持]
  • 少なくとも外部からシステムのnmapを使用したスケジュールスキャン
  • 未知のパターンの自動ログチェック[ただし、これは主にハードウェアの誤動作またはいくつかの小さなクラッシュを検出するためのものです]
  • chkrootkitのスケジュールされた実行
  • /etc/passwd新しいユーザーを追加するための不変の属性はわずかに難しい
  • noexecでマウントされた/ tmp
  • ポートノッカーまたはその他の非標準的なSSHポートを開く方法(たとえば、Webサーバーの「シークレット」Webページにアクセスすると、ページを表示したIPアドレスからの限られた期間の着信SSH接続が許可されます。接続した場合-m state --satete ESTABLISHED、単一のSSHセッションを使用する限り、パケットフローを許可します。]

私は自分自身ではなく、理にかなっていること:

  • カーネルのgrsecurity
  • システムが危険にさらされたときにログを上書きできないようにリモートsyslog
  • SSHログインに関する警告
  • rkhunterを設定し、時々実行するように設定します

4
これらすべてを実行した後、システムに対してBASTILLEを実行して、他のものを探します。また、システムのNessusスキャンも安全でない完全なチェックを行うことをお勧めします。次に、アラートが発生したものを修正します。
スコットパック

13
カスタムカーネルをコンパイルしても、自分が何をしているのかを本当に理解していない限り、セキュリティ上の利点はありません。また、パッケージ管理システム内に配置しない限り、最新の状態に保つことを怠ります。これにより、セキュリティが低下します。
アダムギビンズ

3
-1あいまいさによるセキュリティ。そうでなければまともな答え。
dwc 2009年

@Adam-はい、私はそれを知っていますが、それでも私は必要な部分だけで構成されるモノリシックなカーネルを持つことを好みます。それはおそらく非常に後方ですが、それでも私はそれを行います。@dwc-これはただの追加のステップであり、ただのアイシングまたは不快な臭いものの山の上のチェリーと言います。
pQd 2009年

1
-そして、あなたはないのsu sudoを意味
LapTop006

18

マシンのファイアウォールに関する注意事項...

  • ブラックリストではなくホワイトリストを使用します。つまり、すべてをブロックし、必要なものだけを許可し、その他はすべて拒否します。
  • GUI / ncursesまたはその他の方法でファイアウォールを作成するタスクを作成しようとするソフトウェアを使用しないでください。そうした場合、ソフトウェアが仮定を行うことを許可することになります。そのリスクをとる必要はなく、そうすべきではありません。自分で設定します。不明な場合は無効にします。必要な場合はすぐにわかります。すでに稼働中のシステムであり、トラフィックを(誤ってブロックすることで)中断できない場合は、tcpdump(ファイルにダンプ)を実行してサンプルを取得します-後で調べて、有効なものとそうでないものを見つけます。
  • 私は個人的に、非標準ポートでサービスを実行することには何の意味も見ていません。ツールは最近、ポート22で何かが実行されているため、それがsshである必要があり、そうでないと仮定するためにツールはそれほど愚かではありませんたとえばamap、とnmapのの-Aオプション。あなたは(そしておそらく心配している場合は必要があります)例えば、以下は、攻撃者がの正確なバージョンを知って聞かせ、詮索好きな目から身を隠すために、あなたのサービスを変更することができ、と言ったOpenSSH彼らは、その後のための悪用を探すことができ、それはあなたが実行していますその正確なバージョン。そのようなものを隠すと、それらをより難しくしているでしょう。
    [root @ ud-olis-1 uhtbin]#telnet localhost 22
    127.0.0.1を試行しています...
    localhost.localdomain(127.0.0.1)に接続しました。
    エスケープ文字は「^]」です。
    SSH-2.0-OpenSSH_3.9p1
  • すべての公共サービスを最新の状態に保ち、最新のセキュリティパッチを適用します。
  • ゲートウェイサーバー自体にデータを保存しないでください。少なくともこのマシンに侵入したときに時間を費やすことになり、1つまたは2つのサービスが失われますが、データは失われません。

一番下の行は、100%安全なものを作ることに決して成功しないということです-それは単に不可能です-したがって、作ることは可能な限り安全にすることです-それがあなたのシステムを壊すだけの努力であるなら、それは十分であり、ほとんどのスクリプトキディは次のシステムに移行します。

  • iptables Linuxシステムに適した方法ですが、自分で設定してください。

オープンスタンダードに基づかない「セキュリティソフトウェア」を使用しないでください-それらは不十分に書かれた運命にあり、ハッキングされます(「if」ではなく「when」の問題)。オープンソースとオープンプロトコルは、一般の人々に精通しており、成熟した信頼できる製品になることを目指しています。クローズドソースソフトウェアは、ほとんどの場合、著者がそれがどれほど素晴らしい/安全な製品であるかについての自信に依存してます。つまり、少数の目と目いっぱいの目です。

それが役立つことを願っています:)


「...目が少ない対、目がいっぱいだ」-私は十分な「企業」がこれを実現することを望みますが、あいまいさによるセキュリティはほとんどの傾向であるようです。はい、標準以外のポートでsshなどのサービスを実行しても、決心した攻撃者を遠ざけることはできません。誰かがポート22上のIPアドレスの範囲に辞書攻撃を実行している-しかし、スクリプトが離れてキディー続ける
L0neRanger

12
  • ルートログインを無効にする
  • パスワードによるログインを無効にする(公開鍵によるログインのみを許可する)
  • SSHポートを変更する
  • denyhosts(または同様の)を使用します

  • 独自のiptblesスクリプトを作成します(したがって、許可するものを正確に制御し、他のすべてをドロップできます)。

  • SSL / TLSで保護された通信の使用を強制し、有効で期限切れでなく署名された証明書があることを確認します

  • すべての外部サービスに対して厳密な証明書検証をオンにします(たとえば、別のマシン上のLDAPサーバーでユーザーを認証する場合)

パスワード認証を無効にすると、賛成票がもらえます。
デロバート2009年


6

一般的な出発点として、セキュリティのベストプラクティスを包括的にまとめたCenter for Internet Securityのベンチマーク/ガイドに従います。Debianベンチマークがしばらく更新されているようには見えませんが、手順の概要は次のとおりです。

  • 最新のOSパッチ/パッケージを適用する
  • システム/カーネル/プロセスのアカウンティングを有効にします。
  • MACを有効にします(例:SELinuxまたはAppArmor)。
  • ホストベースのファイアウォール(iptables)を有効にします。
  • APT sources.listを確認します(キーが正しい、ソースが信頼されている)。
  • ネットワークサービスを最小化し、不要なものをすべて無効にし、ファイアウォールを設定します。
  • TCPWrappersを使用して、システムアクセスをさらに制限します。
  • 暗号化されたネットワークプロトコルのみを使用し、暗号化されていないサービス(telnet、ftpなど)を無効にします。
  • SSHへのリモートアクセスのみを構成します。
  • ユーザーログインパスワードを無効にし、キーベースの認証を要求します。
  • ファイルシステムの共有(NFS、SMB)を無効にします。
  • リモート/集中システムログを有効にします(そして定期的にログを確認してください!)。
  • BIOS /ファームウェアレベルのパスワードを設定します。
  • ブートローダーのパスワードを設定します。
  • システムバックアップを構成し、災害復旧計画と、バックアップが有効であり、担当者が災害復旧手順を知っていることをテストします。

CISecurityベンチマークでシステムに実装する特定のコマンドや構成ファイルなど、これらすべてのさまざまな設定には多くのリソースがあります。


5

マシンを直接インターネットに接続しないことをお勧めします。マシンとインターネットの間にある種のファイアウォールを配置します。これにより、サーバーに負荷をかけることなく、セキュリティとネットワークの監視を行うことができます。個人的には、ネットワークと機能のセグメンテーションによってネットワークのトラブルシューティングが頻繁に簡素化されることがわかりますが、場合によっては、複雑さが増すために分析が難しくなります。

最も安全ですが、最も面倒なファイアウォールポリシーは、すべてを拒否し、許可する必要があるトラフィックのみを明示的に許可することです。ネットワークの変更に合わせてファイアウォールポリシーを頻繁に更新する必要があるため、これは面倒です。

また、サーバー上で何らかの種類のインターフェイスファイアウォールを使用することをお勧めします-多層防御が重要です。管理関連のサービスに非標準ポートを使用しても害はありません。fail2banは大丈夫です。Serverfaultのセキュリティアプリケーションに関するより具体的な質問を追求して、より多くのアイデアを見つけてください。

セキュリティは、2人のハイカーとクマについての冗談のようなものです。完全なセキュリティを実現することは決してできませんが、他の人よりも難しいターゲットになることは役に立ちます。


素敵な答えのために+1。デフォルトの拒否は、適切にアプローチすれば管理するのが面倒ではないことを指摘しなければなりません。本当に何を許可しているのか知っている必要がありますよね?実際、これはポリシーステートメントとして平易な言葉で書き留められるべきです。あなたが通常のルーチンとしてそれをしていないなら、あなたは管理者として仕事をしていません。もしそうなら、ファイアウォールのルールを更新するのは簡単なことです。
dwc 2009年

非常に良い点。すべての組織には、わかりやすい言語のセキュリティポリシーステートメントが必要です。組織のニーズが変わると、ポリシーステートメントを更新する必要があります。管理者だけがファイアウォールルールの実装とCYAを計画する場合は、組織の管理者がセキュリティについて考えることに煩わされなくても、スマート管理者はそのようなポリシーステートメントを維持します。
pcapademic

4

一部の人々はSecuring Debian Manualを指摘しています。これは、軍事上の要件を除くすべてに完全に適切である必要があります。

多くの人々は、とんでもなくパラノイアであることはクールであるか、プロか何かであると考えています。それはそうではなく、他の管理者にとってはうっとうしく、ユーザーにとっては完全に抑圧的です。あなたがお勧めするもののほとんどは、妄想的な管理者にとって有用であると感じるためにただの忙しい仕事ですが、実際のセキュリティ侵害は十分に更新されていないシステムや内部ソースによって引き起こされる可能性が高いためです。

とはいえ、ローカルネットワーク上のものをインターネットからの何よりも信頼しないことは私の信条の1つであると考えています。したがって、ローカルネットワーク上でも認証を要求するようにすべてを構成します。IPsecを使用して、すべてのコンピューター間のすべてのトラフィックを暗号化および認証します。

私はすべてのサーバーのフルディスク暗号化への変換を進めています。

使用するサービスのみをインストールします。ファイアウォールがありません。認証を必要とするサービスを構成するか、特定のIPに(プログラムの独自の構成またはTCPラッパーによって)サービスを制限します。iptablesを使用してブロックする必要があるのはmemcached、設定ファイルがなく、TCPラッパーを使用していなかったためです。

アカウントにランダムに生成された適切なパスワードを使用し、SSHサーバー(および他のすべてのサービス)を信頼して、パスワードを知らない人を締め出します。 fail2banIMOのログファイル用のスペースが限られている場合のみです。(信頼できる十分なパスワードが必要です。)


3

www.debian.org/doc/manuals/securing-debian-howto/でこの素晴らしいハウツーをご覧ください。

私は個人的にsshポートを変更し、fail2ban + denyhostsを使用しています。そして、不要なものはすべてブロックします。ブロックすればするほど、心配する必要は少なくなります。


4
あー 「SSHポートを変更する」まで私がいました。意味がありません。特に、十分な時間を持つジョーシュモエがポートスキャンして、SSHが実行されているポートを即座に見つけることができる場合はそうではありません。接続するとすぐに、サービス名(およびサーバーバージョン)が宣言されます。
マットシモンズ

3
はい、誰でもポートスキャンして適切なポートを見つけることができることを知っています。しかし、ほとんどの攻撃はデフォルトのポートにあります。ポートを変更して、いくつかの統計情報を取得してください。
ビハンD
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.