最近、Ubuntuを搭載したVPSを入手しました。非常に基本的なWebサイトの作成を開始したいと思います。ただし、このサーバーをセキュリティで保護するために実行する必要がある手順がわかりません。
私はUbuntuが初めてで、セキュリティが新しく、Webサイトを作成するのが初めてです(Webサイトは、おそらくHTML、CSS、Django/Python、およびいくつかのデータベースになります)。
私の最大の懸念は、一部のハッカーがゾンビとしてそれを使用しようとする可能性があり、私にはわかりません。または、そのロボットがログインを試み、そのマシンに保存するデータをこっそりと盗み見ることができ、私にはわかりません。または他に何を知っているか。
UbuntuのWebサイトで ファイアウォール情報ページ を見つけましたが、それで十分ですか?
追伸:答えを出すことができない場合は、Ubuntuとセキュリティの完全な初心者向けの本/ウェブサイトの推奨事項にも感謝します
ファイアウォールだけでは十分ではなく、最低限必要なものです。次に、ある種のIDSを持つことが望ましいです。たとえば、SSHポートが公開されている場合は、強力なパスワードを持っている場合でも、総当たり攻撃をブロックする必要があります。インターネット上の一般的なサーバーは、1日に数百回、数千回調査され、攻撃されます。私は知っています。1日で受け取るすべてのアラートから、ログを読むだけです。ところで、セキュリティは簡単にフルタイムの職業になることができます。また、ログはあるが読んだことがない場合、何かを見落とす可能性があります。
あなたがゼロからウェブサイトを構築しようとしているなら、私は最大の危険はあなた自身のコードから来ると思います。あなたが何をしているのか分からなければ、あなたの最大の敵はあなたです。たとえば、コードがSQLインジェクションを許可している場合、ufwはあなたを保護しません。フレームワークを使用すると、新人のミスを避けるのに役立ちますが、コードの品質は保証されません。あなたはベストプラクティスと安全なコードを書く方法を学ぶ必要があります。フレームワークはあなたにそれを教えません。
Pythonコードの品質をテストするために pylint をお勧めします。他にも、BanditやMypyなど、より具体的なチェックのためのツールがあります。
WAF(Webアプリケーションファイアウォール)も有効ですが、制限が厳しすぎないようにするには、ある程度の調整が必要です。
攻撃対象を減らすためにできることはたくさんあります。 Google:「Linuxの強化」。私が本を推薦しなければならなかったならば、それは包括的な概要のためのハッキング暴露でしょう。
重要なことの1つは、システムを最新の状態に保つことです。脆弱性は常に発見されており、場合によっては0日もあるため、アップグレードまたはパッチをダウンロードするために迅速に対応する必要があります(最近思い浮かぶのはEximです)。だから、私はニュースを最新の状態に保つために、コンピューターのセキュリティに関するいくつかのメールリスト、ウェブサイト、またはブログを購読することを強くお勧めします。
Equifaxは、数か月前にパッチが適用されていた欠陥が原因でハッキングされました。彼らの先延ばしは彼らに心からの犠牲を払った。システムを保守しないと、リスクが大幅に増加します。必要なのは、1つの悪用可能な欠陥だけです。
最後に、私はあなたに pentest をお勧めします。 SQLインジェクションをテストするには、SQLmapは優れたツールです。しかし、最良の結果を得るには、ツールがどのように機能するかを理解する必要があります。デフォルトのオプションでツールを実行するだけでは、ほとんどの場合、欠陥を見つけるには不十分です(サイトのコーディングが不十分な場合を除く)。 Webマスターは、データベースの復元後にファイルを削除するのを忘れたため、SQLバックアップのように機密ファイルをサーバーに残している場合があります。ディレクトリリストは、そこにあるべきではないファイルの存在を明らかにする可能性があります。
多くのWebサイトにはphpmyadminディレクトリがあり、ブルートフォース攻撃に対する保護はまったくありません。したがって、ハッカーはこの方法でデータベースにアクセスできます。サーバーにphpmyadminが本当に必要な場合は、少なくとも予測可能なディレクトリ名を使用しないでください。また、Word全体に公開されないようにアクセスを制限することで、メリットはありません。
ファイアウォールは、WebサイトをホストするUbuntuサーバーのセキュリティ対策として十分ですか?
使用したいテクノロジーを考えると、これを経験したことがなく、データベースに裏打ちされた動的なWebサイトを作成したいと考えています。この種の設定は、簡単に悪用しやすいサイトに典型的です。多くの場合、データベースにバックアップされているとSQLインジェクションが許可され、安全でないアップロードではコードが実行される可能性があります。Linuxの通常のパケットフィルターファイアウォールは、これらのアプリケーションレベルの攻撃ファイアウォールはセキュリティ対策として十分ではありません。
現在の経験のレベルでは、誰もがアクセスできる(そして潜在的に悪用できる)動的アプリケーションを作成しないことを強くお勧めします。これがあなた自身または一部の選択されたユーザーのみを対象としている場合は、Webサーバーが持っている確立されたメカニズム(htpasswdなど)を使用してサイトをパスワードで保護し、少なくともWebサイトにアクセスできるユーザーを制限することで攻撃面を制限することができます。
私はまた、Ubuntuとセキュリティの完全な初心者のための本/ウェブサイトの推奨事項に感謝します
Webセキュリティの詳細については、まず Webアプリケーションのセキュリティリスクのトップ1 をご覧ください。一般に、これは残念ながらかなり複雑なトピックであるため、すぐに十分に理解することを期待しないでください。
Ingress:あなたのウェブサイトはtcpポート80と443で世界に開かれます。また、あなたがウェブサイトを管理できるように他のいくつかのポートを開く必要があるかもしれません(sshのtcpポート22など)。ただし、ソースを管理ステーション)。これは、Webサーバーがこれらのポートに対するアプリケーションレベルの攻撃に対してオープンであることを意味します。そのため、これらのポートをテストして、アプリケーションレベルの脆弱性を確認します。
下り:誰かがウェブサーバーに対するアプリケーションレベルの攻撃を管理している場合、リモートコントロールを可能にするためにそれをだまして発信接続を確立させることができます。したがって、Webサーバーからの下り接続を制限することをお勧めします。
おそらく、出力ポート53(DNS)が必要です。パッチの更新を取得するには、出力が必要になる場合があります(理想的には、宛先IPを特定にすることができます)。アプリケーションによっては、データまたは認証リソースにアクセスするために下りアクセスが必要になる場合があります。
OSIレイヤーでのさまざまな種類の攻撃からソリューションまたはシステム全体を強化するには、複数の防御レイヤーセキュリティが必要なため、単一のファイアウォールでは不十分です。
私の提案は次の設定です。
以下のNISTのドキュメントは、追加のセキュリティ対策を適用するのに役立ちます。 https://csrc.nist.gov/publications/detail/sp/800-44/version-2/final \ https://nvlpubs.nist.gov/nistpubs/Legacy /SP/nistspecialpublication800-44ver2.pdfhttps://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-123.pdf
サーバーを脆弱にするものは何ですか?外部からの接続を受け入れ、不正なアクセスを取得するために悪用される可能性があるバグのあるアプリケーションを持っている。
ファイアウォールは何をしますか?送信元IPアドレス、宛先ポートなどのルールに基づいてパケットを傍受します。この情報は、正当なパケットを妨害せずに悪意のあるパケットをドロップするのに十分ですか?いいえ、攻撃者が RFC 3514 に十分に従うように配慮されていない限り(公開日を確認してください)。
ファイアウォールの使用は限定的であり、同じサーバー上の他のアプリケーションからのみ見えるように意図されていたときに、アプリケーションが誤って外部から到達できるように誤って設定することを防ぎます fail2ban で呼び出すことができますアプリケーション固有のルールなどによってアクティビティが歓迎されないと思われるユーザーをブラックリストに登録する。
一般的なVPSのセキュリティは、ファイアウォールではなく、主にそれが実行するアプリケーションとその構成方法に依存します。
いいえ、他の人が反応したためです
達成したいことに応じて、 静的Webサイト または 単一ページアプリケーション を検討できます。
それらを世界に公開する必要がある場合は、Netifly、GitHub、GitLab Pagesなどの一部のプラットフォームで、学習体験としてこれらを無料でホストできます(他にも多数ありますが、私はこれらのいずれにも所属していませんが、それらを使用しました)成功と喜びで)。
これは、HTML、CSS、JavaScript、およびいくつかの自動化について、安全な方法で学ぶのに役立ちます。
欠点があります(サーバー側での生成がない)場合でも、(APIからフェッチすることにより)一部のデータに到達できます-これは実際にセキュリティを学習するための良い方法です。
サーバーのセキュリティを魔法のように向上させるためにファイアウォールに依存することはできません。ここに私の懸念があります:ファイアウォールはあなたに安心感を与えるかもしれません。ファイアウォールは、システムが通信できる方法を制限します。しかし、待ってください。システムは、望まない方法で通信しようとするべきではありません。私の意見では、ファイアウォールの微調整ではなく、サービスの構成に焦点を当てるべきです。
これを実現するには、すべてのサービスを適切に構成する必要があります。たとえば、一部の内部サービスは、localhostを0.0.0.0(全員)でリッスンすることにより、ローカルシステムへの接続を制限できます。データベースはローカルUNIXソケットを使用できます。私がこれまでに使用したすべてのSSHサーバーとWebサーバーには、適切なデフォルト設定があります。適切なパスワードを使用してください。フレームワークを最新の状態に保ちます。追加のセキュリティが必要な場合は、アプリケーションの書き込みアクセスを制限するか、apparmorなどを使用して、アプリケーションの動作を監視します。
サーバーがポートを開いて、ユーザーが許可していないサービスを提供する瞬間、あなたはすでに問題を抱えています。悪意のある送信接続を確立するマルウェアがサーバーにありますか?あなたはすでに負けています。自分のマシンで未承諾のコードを実行した攻撃者は、きっとファイアウォールを回避できるはずです。そもそもこれらのことを望まないので、慎重に設定してください。
あなたの部屋が燃えていると想像してください。ドアを閉めないで、「これは頑丈なドアです。火は安全に閉じ込められています」と言います。火を消す必要があります。
ファイアウォールはネットワークを保護するのに役立ちますが、1台のサーバーではそれができません。私にとって、ソフトウェアファイアウォールで単一のシステムを保護する習慣は、オペレーティングシステム自体が安全でないサービスを公開しているWindows 2000のようなものです。
更新:小さなプライベートサイトをホストするつもりだと思います。あなたのアプリケーションのコード、または使用されているフレームワーク/アプリケーションの1つに悪用可能な間違いがあるとしましょう。これは私の想像に従って起こり得ることです:
リモートコード実行:攻撃者はあなたのマシン上で任意のものを実行することに成功しました。
@schroederによると、サーバーの維持には攻撃を緩和するための取り組みが含まれます。受信トラフィックに関するルールにより、攻撃者がUDPソケットを使用しない限り、ファイアウォールは1を簡単に停止できます。ファイアウォールは2を軽減することもできますが、更新メカニズムなどの必要な機能を中断せずに送信接続を許可しないように、ファイアウォールを慎重に構成する必要があります。攻撃者がルートアクセスを取得した場合、攻撃者はファイアウォールを無効にして、あらゆる努力を学術的に行うことができます。
ファイアウォールは、自分のシステム、データ、またはユーザーを保護するよりも、他のシステムを保護します。他人の安全のために努力したいかどうかはあなた次第です。これは、パーソナルサーバーよりもネットワーク管理者やサーバーファームにとって興味深いものです。ファイアウォールよりもアプリケーション自体に焦点を当てます。