Tomcatサーバーのセキュリティ設定方法

Tomcatサーバーのセキュリティ設定方法

Tomcat は、Java Community Process を通じて Sun が開発した、広く使用されているサーブレットおよび JavaServer Page (JSP) テクノロジの公式リファレンス実装である HTTP サーバーです。サーブレットと JSP テクノロジは、HTTP サーバー アプリケーションの構築に使用されます。サーブレット テクノロジには、アクセス セキュリティ、セッション管理、スレッド制御など、多くの機能が追加されています。 JSP テクノロジーは、動的に生成された HTML ページを処理する簡単な方法を提供します。これらの HTML ページは、実行時間を短縮するためにサーブレットに直接コンパイルされます。セキュリティを確保するための上記の 2 つのテクノロジに加えて、Tomcat パラメータを構成してセキュリティを強化することもできます。

セキュリティ設定:

1. webappsディレクトリ内のすべてのファイルを削除し、tomcat管理インターフェースを無効にします。

rm -rf /usr/local/tomcat/apache-tomcat-9.0.1/webapps/*

2. tomcat-users.xml ファイル内のすべてのユーザー権限をコメント化または削除します。

3. バージョン情報を非表示にしてconf/server.xmlを変更する


3. ユーザーの質問:

nginx と httpd は、ルート ユーザーを使用してポート 80 のガードを開始し、子プロセス/スレッドは setuid() および setgid() 関数を通じて通常のユーザーに切り替わります。つまり、親プロセスの所有者は root ユーザーであり、子プロセスとマルチスレッドの所有者は非 root ユーザーです。このユーザーにはシェルがなく、ssh およびコンソール経由でシステムにログインすることはできません。
Java の JVM はシステムから独立しており、OS 上に構築されています。どのユーザーを使用して Tomcat を起動しても、Tomcat は所有者の権限を継承します。
これにより問題が発生します。Linux システムでは、1024 未満のポートを使用できるのは root のみであるため、Tomcat のデフォルト ポートは 8080 になっています。ポート 80 を使用する場合は、Tomcat を root としてのみ起動できます。これにより、多くのセキュリティ上の問題が発生します。

Tomcat の起動にのみ使用できるユーザーを作成します。

グループ追加 -g 80 トムキャット
adduser -o --home /tomcat --shell /sbin/nologin --uid 80 --gid 80 -c "Webサーバー" tomcat
chown tomcat:tomcat -R /usr/local/tomcat/apache-tomcat-9.0.1/*
su - tomcat -c "/usr/local/tomcat/apache-tomcat-9.0.1/bin/startup.sh"

ポートマッピングを作成し、ポート80にアクセスするときにポート8080を呼び出す

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

リダイレクトをキャンセル:

iptables -t nat -D PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

4. 戦争の自動展開をオフにする

vim conf/server.xml

5. 404 に表示されるバージョン情報を非表示にします。

lib 内の catalina.jar を解凍し、jar xf catalina.jar を実行します。

vim /usr/local/tomcat/apache-tomcat-9.0.1/lib/org/apache/catalina/util/ServerInfo.properties


6. tomcatのシャットダウンコマンドを変更する

Tomcat インスタンスを直接シャットダウンできる管理ポートは、server.xml で定義されます。 Telnet 経由でポートに接続した後、SHUTDOWN (デフォルトのシャットダウン コマンド) を入力して Tomcat インスタンスをシャットダウンできます (この時点でインスタンスはシャットダウンされますが、プロセスはまだ存在することに注意してください)。 Tomcat のポートはデフォルトで閉じられるため、手順は非常に簡単です。デフォルトのポートは 8005 で、コマンドは SHUTDOWN です。 close コマンドをもう少し複雑に変更する必要があります。


またはポート8005を無効にする

<サーバーポート="-1" シャットダウン="シャットダウン">

7. tomcatとプロジェクトユーザーを分ける

Tomcat が Web シェル プログラムに埋め込まれるのを防ぐには、プロジェクト ファイルを変更します。したがって、Tomcat をプロジェクト所有者から分離して、ハッキングされた場合でもプロジェクト ファイルを作成および編集できないようにする必要があります。

8. conf/web.xmlに次の設定を追加します。

9. カスタムエラーページ

web.xml は特定のアプリケーションの下にあり、このアプリケーションの 404 を処理する必要があります。ただし、http://localhost/ は tomcat 独自のアプリケーションにアクセスするため、web.xml 構成は webapp/Root/ の下のアプリケーション内に構成する必要があります。
Tomcat アプリケーションはルート ディレクトリの下に配置されているので、独自のものに置き換えるだけです。
/webapps/ROOT/WEB-INF/web.xmlに追加します

webappsディレクトリにerror.jspファイルを作成します。

<%@ ページコンテンツタイプ="text/html; charset=UTF-8" %>
<%@ ページインポート="java.io.*" %>
<%@ ページインポート="java.util.*" %>
<html>
<ヘッダー>
<title>404 ページ</title>
<本文>
<前>
<%
  列挙<文字列> attributeNames = request.getAttributeNames();
  (attributeNames.hasMoreElements()) の間
  {
    文字列 attributeName = attributeNames.nextElement();
    オブジェクト属性 = request.getAttribute(attributeName);
  out.println("request.attribute['" + attributeName + "'] = " + attribute);
  }
%>
</pre>

exception.jsp ファイル

<%@ ページ contentType="text/html; charset=UTF-8" isErrorPage="true" %>
<%@ ページインポート="java.io.*" %>
<html>
<ヘッダー>
<title>例外ページ</title>
<本文>
<hr/>
<前>
<%
response.getWriter().println("例外: " + 例外);

 if(例外 != null)
{
  response.getWriter().println("<pre>");
  例外.printStackTrace(response.getWriter());
  レスポンスのgetWriter().println("</pre>");
}

 回答
e.getWriter().println("<hr/>");
%>

ブラウザでカスタム エラー ページをテストします。


セッションタイムアウトを定義し、ディレクトリリストを禁止する

さて、この記事はこれで終わりです。お役に立てれば幸いです。

以下もご興味があるかもしれません:
  • Tomcat セキュリティ設定 win2003 tomcat 権限制限
  • Tomcat サーバーのセキュリティ設定
  • Tomcat セキュリティ仕様 (Tomcat セキュリティ強化と仕様)
  • Tomcatのセキュリティ構成とパフォーマンスの最適化の詳細な説明
  • Web セキュリティ - Tomcat は WebDAV を無効にしたり、不要な HTTP メソッドを禁止したりします

<<:  プロジェクトを素早く構築するためのvite+vue3.0+ts+element-plusの実装

>>:  MySQL データベースの型変換のための CAST 関数と CONVERT 関数の説明

推薦する

パゴダパネルとドッカーを使用して Gogs をインストールするプロセス全体

目次1 Baota Software StoreにDockerをインストールする2 ゴグスイメージを...

Tomcat で複数の war パッケージを展開する方法と手順

1 背景JDK1.8-u181とTomcat8.5.53がインストールされました。インストール後、環...

MySQLの実行原理、論理階層化、データベース処理エンジンの変更について詳しく説明します

長い間 MySQL を使ってきたので、SQL 文はすでに覚えていると思います。そこで、その実行原理を...

Tomcat のパフォーマンス最適化のための Apr モジュールの構築方法

序文Tomcat は、無数のチューニング オプションを備えた、広く使用されている Java Web ...

vue プロジェクトのデプロイと Nginx でのプロキシ設定の問題の分析

1. nginxをインストールして起動する # nginxをインストールする sudo apt-ge...

MySQLはライブラリ内の主キーなしでテーブルインスタンスコードを素早く取得します

概要MySQL データベースで主キーのないテーブルを表示するための SQL ステートメントをいくつか...

MySQL 8.0.13 のインストールと設定のグラフィックチュートリアル

Msyqlデータベースのインストール、参考までに具体的な内容は次のとおりです。 ①ブラウザでhttp...

HTMLページにビデオを挿入する方法の概要

ページでビデオ タグを使用する場合は、Ogg Theora または VP8 (これに問題がない場合)...

JSキャンバスは描画ボードと署名ボードの機能を実現します

この記事では、お絵かきボード/サインボード機能を実現するためのJSキャンバスの具体的なコードを参考ま...

最もよく使われるHTMLエスケープシーケンス

HTML では、<、>、& などは特別な意味を持ち (<、> はリン...

PrometheusはGrafanaディスプレイを使用してMySQLを監視します

目次Prometheusはエクスポーターを介してMySQLを監視し、Grafanaチャートで表示しま...

CocosCreatorオブジェクトプールの使い方

目次序文:特定の操作ステップ1: プレハブを準備するステップ2: オブジェクトプールを初期化するステ...

MySQLの文字セットを変更する方法

1. MySQLの文字セットを確認する '%char%' のような変数を表示します。...

JavaScriptはオブジェクトの不要なプロパティを削除します

目次例方法1: 削除方法2: 分解補充する要約するThinking シリーズは、10 分で実用的なプ...