English | 日本語
1.9 以降、新しくインストールした環境では、Web GUI は既定で HTTPS で動作します(自己署名の証明書、または用意した PFX ファイル)。以前の版から更新した環境は、切り替えるまで HTTP のままです。切り替えは、Windows では FileAccessMonitor.exe web-https on を実行してサービスを再起動し、Linux では sudo fileaccessmonitor-server --https on を実行します。詳しくは README の「セキュリティ」を参照してください。HTTP のままでは、ログイン時のパスワードや JWT が暗号化されずにネットワークを流れます。
HTTPS を自分で設定したい場合は、次の 2 つの方法もあります。
以下の設定は、FileAccessMonitor.exe と同じフォルダにある appsettings.Production.json に書きます。インストーラーで導入した場合は C:\Program Files\FileAccessMonitor\ です。このファイルは更新時も保持されます。編集したらサービスを再起動してください。
Restart-Service FileAccessMonitorNote
Web GUI は絶対パス(/api/...、/login.html)を使っています。そのため、https://fam.example.com/ のようにサイトのルートで公開する必要があります。https://intranet.example.com/fam/ のようなサブパスでは動作しません。
ローカル コンピューター → 個人 の証明書ストアに、秘密鍵付きの証明書が必要です。証明書の発行先は、利用者がブラウザーに入力する名前(例: fam.example.com)にしてください。サービスは LocalSystem で動くため、秘密鍵を読み取れます。
appsettings.Production.json:
{
"Kestrel": {
"Endpoints": {
"Http": { "Url": "http://0.0.0.0:8080" },
"Https": {
"Url": "https://0.0.0.0:8443",
"Certificate": {
"Subject": "fam.example.com",
"Store": "My",
"Location": "LocalMachine",
"AllowInvalid": false
}
}
}
}
}-
HTTPS のみにする場合は、
Httpの行を削除します。そのうえで、HTTP 用のファイアウォール規則を HTTPS 用に置き換えます。Remove-NetFirewallRule -DisplayName "File Access Monitor Web" New-NetFirewallRule -DisplayName "File Access Monitor HTTPS" -Direction Inbound -Protocol TCP -LocalPort 8443 -Action Allow
-
証明書ストアの代わりに
.pfxファイルを使う場合は、Certificateを次のように書き換えます。"Certificate": { "Path": "C:\\ProgramData\\FileAccessMonitor\\fam.pfx", "Password": "<pfx のパスワード>" }
.pfxは、SYSTEM と Administrators だけが読める場所に置いてください(C:\ProgramData\FileAccessMonitor\の機密ファイルも同じ制限にしています)。 -
動作確認だけなら、自己署名証明書でも試せます。信頼済みにするまで、ブラウザーに警告が出ます。
New-SelfSignedCertificate -DnsName fam.example.com -CertStoreLocation Cert:\LocalMachine\My -NotAfter (Get-Date).AddYears(2)
アプリと同じサーバー上にプロキシを置く場合(IIS など): アプリはループバックだけで待ち受け、プロキシ以外から直接つながらないようにします。8080 番のファイアウォール規則も削除します。
{
"Kestrel": { "Endpoints": { "Http": { "Url": "http://127.0.0.1:8080" } } }
}Remove-NetFirewallRule -DisplayName "File Access Monitor Web"アプリとは別のマシンにプロキシを置く場合(Linux 上の nginx・Caddy など): 待ち受け URL は既定のままにします。8080 番へは、プロキシの IP アドレスからだけ接続できるように制限します。
Set-NetFirewallRule -DisplayName "File Access Monitor Web" -RemoteAddress 192.0.2.5 # プロキシの IPCSP などのセキュリティヘッダーはアプリが付け、プロキシはそのまま中継します。
操作ログには、操作ごとの接続元 IP アドレスを記録します。プロキシ経由の場合、そのままではプロキシの IP が記録されます。appsettings.Production.json にプロキシを登録すると、プロキシが送る X-Forwarded-For ヘッダーから本来の接続元 IP を記録します(下記の nginx の例は送信します。IIS の ARR と Caddy は既定で送信します)。
{
"ReverseProxy": { "KnownProxies": [ "127.0.0.1" ] }
}同じサーバー上のプロキシなら 127.0.0.1、別のマシンならプロキシの IP アドレスを指定します。登録したアドレスからは任意の接続元 IP を名乗れるため、自分で管理しているプロキシだけを登録してください。
-
URL Rewrite と Application Request Routing (ARR) をインストールします。
-
ARR のプロキシ機能を有効にします。
Set-WebConfigurationProperty -PSPath 'MACHINE/WEBROOT/APPHOST' -Filter 'system.webServer/proxy' -Name 'enabled' -Value 'True'
-
サイトを作成します(例: サイト名
FileAccessMonitor、物理パスC:\inetpub\famの空フォルダー)。証明書を指定して HTTPS バインドを追加します。 -
そのフォルダーに次の
web.configを置きます。<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <rewrite> <rules> <!-- HTTP を HTTPS へリダイレクト(サイトに HTTP バインドもある場合のみ必要) --> <rule name="Redirect to HTTPS" stopProcessing="true"> <match url="(.*)" /> <conditions> <add input="{HTTPS}" pattern="off" /> </conditions> <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" /> </rule> <rule name="FileAccessMonitor" stopProcessing="true"> <match url="(.*)" /> <action type="Rewrite" url="http://127.0.0.1:8080/{R:1}" /> </rule> </rules> </rewrite> <httpProtocol> <customHeaders> <add name="Strict-Transport-Security" value="max-age=31536000" /> </customHeaders> </httpProtocol> </system.webServer> </configuration>
server {
listen 80;
server_name fam.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
http2 on;
server_name fam.example.com;
ssl_certificate /etc/ssl/certs/fam.example.com.crt;
ssl_certificate_key /etc/ssl/private/fam.example.com.key;
add_header Strict-Transport-Security "max-age=31536000" always;
location / {
proxy_pass http://192.0.2.10:8080; # FileAccessMonitor のサーバー
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}Caddy は証明書を自動で取得・更新します。社内 LAN の中でしか名前解決できないホスト名の場合は、tls internal を追加すると Caddy 自身の CA で証明書を発行します。
fam.example.com {
reverse_proxy 192.0.2.10:8080
header Strict-Transport-Security "max-age=31536000"
}