1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Apacheによるリバースプロキシいろいろ

Last updated at Posted at 2025-02-04

自宅でホストするサーバ群がいろいろあるため外部からのアクセスをリバースプロキシで捌くための設定

 宗教上の理由でnginxを使わないためApacheで設定を行います。

Zabbix 7

<VirtualHost *:80>
        ServerAdmin <サーバ管理者のメールアドレス>
        ServerName <アクセスしてほしいURL>
        DocumentRoot <ダミーでよいが実在するディレクトリ>
 
		RewriteEngine on
		RewriteCond %{HTTPS} !=on
		RewriteRule ^(.*)$ https://<アクセスしてほしいURL>/$1 [L,R=301]
</VirtualHost>

<VirtualHost *:443>
        ServerAdmin <サーバ管理者のメールアドレス>
        ServerName <アクセスしてほしいURL>
        DocumentRoot <ダミーでよいが実在するディレクトリ>

		SSLEngine on

		SSLCertificateFile <TLSルート証明書>
		SSLCertificateKeyFile <TLSサーバ証明書>

		Protocols h2 http/1.1

		SetOutputFilter BROTLI_COMPRESS
		SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-brotli
		BrotliCompressionQuality 5
		BrotliCompressionWindow 18

		SSLProtocol -all +TLSv1.2 +TLSv1.3
		SSLCipherSuite "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256"
		SSLHonorCipherOrder off
		SSLSessionTickets off

		LogLevel warn

		<IfModule log_config_module>
				LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
				LogFormat "%h %l %u %t \"%r\" %>s %b" common
				<IfModule logio_module>
						LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
				</IfModule>

				CustomLog "/var/log/httpd/<アクセスしてほしいURL>_httpd-access.log" combined
		</IfModule>

		TransferLog "/var/log/httpd/<アクセスしてほしいURL>_httpd-transfer.log"
		ErrorLog "/var/log/httpd/<アクセスしてほしいURL>_httpd-error.log"

		ProxyPass /.well-known/ ! 
		ProxyPass / http://<オリジンサーバアドレス>/zabbix/
		ProxyPassReverse / http://<オリジンサーバアドレス>/zabbix/
		RequestHeader set X-Forwarded-For %{REMOTE_ADDR}s
		ProxyPassReverseCookiePath /zabbix / # ここを誤るとログインできなくなる(Zabbix 7)
 
		# HTTP Strict Transport Security (HSTS)
		Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"

		# セキュリティヘッダー強化
		Header always set Content-Security-Policy "default-src 'self' wss:; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self'; object-src 'none'; frame-ancestors 'self'; base-uri 'self'; form-action 'self';"
		Header always set X-Frame-Options "SAMEORIGIN"

		# Set-Cookie のセキュリティ強化
		Header always edit Set-Cookie ^(.*)$ "$1; Secure; HttpOnly; SameSite=Lax"

		# HTTPメソッドの制限(GET, POST, HEAD のみ許可)
		<Location />
				<LimitExcept GET POST HEAD>
						Require all denied
				</LimitExcept>
		</Location>

		# ファイルETagを無効化(情報漏洩防止)
		FileETag None
</VirtualHost>

CloudFlare経由のWordpress

インターネット → CloudFlare → リバースプロキシ → オリジンサーバ となるので設定が結構ややこしい

CloudFlareからのアクセスに制限したいが、時々403を出すので設定はまだ途上。

<VirtualHost *:80>
        ServerAdmin <サーバ管理者のメールアドレス>
        ServerName <アクセスしてほしいURL>
        DocumentRoot <ダミーでよいが実在するディレクトリ>
		RewriteEngine on
		RewriteCond %{HTTPS} !=on
		RewriteRule ^(.*)$ https://<アクセスしてほしいURL>/$1 [L,R=301]
</VirtualHost>

<VirtualHost *:443>
        ServerAdmin <サーバ管理者のメールアドレス>
        ServerName <アクセスしてほしいURL>
        DocumentRoot <ダミーでよいが実在するディレクトリ>
        LogLevel debug

        SSLEngine on

        Protocols h2 http/1.1

        SSLCertificateFile /usr/local/etc/apache24/Includes/CF-TLS/<アクセスしてほしいURL>.pem
        SSLCertificateKeyFile /usr/local/etc/apache24/Includes/CF-TLS/private.pem

        ProxyPreserveHost On
        ProxyPass / http://<オリジンサーバアドレス>/
        ProxyPassReverse / http://<オリジンサーバアドレス>/

        RequestHeader set X-Forwarded-Proto "https"
        RequestHeader set X-Forwarded-Host "<アクセスしてほしいURL>"
        RequestHeader set X-Forwarded-For "%{CF-Connecting-IP}s"

        <Directory />
                Require all denied
        </Directory>

        <Location />
            Require ip 173.245.48.0/20
            Require ip 103.21.244.0/22
            Require ip 103.22.200.0/22
            Require ip 103.31.4.0/22
            Require ip 141.101.64.0/18
            Require ip 108.162.192.0/18
            Require ip 190.93.240.0/20
            Require ip 188.114.96.0/20
            Require ip 197.234.240.0/22
            Require ip 198.41.128.0/17
            Require ip 162.158.0.0/15
            Require ip 104.16.0.0/13
            Require ip 104.24.0.0/14
            Require ip 172.64.0.0/13
            Require ip 131.0.72.0/22
            Require ip 2400:cb00::/32
            Require ip 2606:4700::/32
            Require ip 2803:f800::/32
            Require ip 2405:b500::/32
            Require ip 2405:8100::/32
            Require ip 2a06:98c0::/29
            Require ip 2c0f:f248::/32
        </Location>

        RewriteEngine On
        RewriteCond %{HTTP:CF-Connecting-IP} ^$
        RewriteRule ^ - [F,L]

        # セキュリティヘッダーの追加
        Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
        Header always set X-Content-Type-Options "nosniff"
        Header always set X-Frame-Options "SAMEORIGIN"
        Header always set Referrer-Policy "no-referrer-when-downgrade"
        Header always set Permissions-Policy "geolocation=(), microphone=(), camera=(), interest-cohort=()"
        Header always set Content-Security-Policy "default-src 'self'; frame-ancestors 'none'; base-uri 'self';"

        # ログフォーマット変更
        LogFormat "%{CF-Connecting-IP}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" cloudflare

        CustomLog "/var/log/httpd/<アクセスしてほしいURL>_httpd-access.log" cloudflare
        ErrorLog "/var/log/httpd/<アクセスしてほしいURL>_httpd-error.log"

</VirtualHost>
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?