最北端で暮らすSEのknowhow

人生の最終目標は気ままな老後生活

NginxリバースプロキシでNode.jsのlocalhost:3000に転送する際のSELinuxポリシー設定


AlmaLinux release 9.6 (Sage Margay)
Nginx 1.20.1

設定は合っているはずなのに502が出る。ログを見るとSELinuxが拒否してた。

type=SYSCALL msg=audit(1763858348.697:40247): arch=c000003e syscall=42 success=no exit=-13 a0=c a1=561d98fc5f50 a2=1c a3=7ffd7b53fa8c items=0 ppid=14332 pid=14595 auid=4294967295 uid=995 gid=995 euid=995 suid=995 fsuid=995 egid=995 sgid=995 fsgid=995 tty=(none) ses=4294967295 comm="nginx" exe="/usr/sbin/nginx" subj=system_u:system_r:httpd_t:s0 key=(null)ARCH=x86_64 SYSCALL=connect AUID="unset" UID="nginx" GID="nginx" EUID="nginx" SUID="nginx" FSUID="nginx" EGID="nginx" SGID="nginx" FSGID="nginx"
type=AVC msg=audit(1763858382.883:40265): avc:  denied  { name_connect } for  pid=14595 comm="nginx" dest=3000 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:ntop_port_t:s0 tclass=tcp_socket permissive=0

拒否操作ログを元にポリシー許可ルールを生成できるらしい。必要なパッケージをインストールする。

# dnf install policycoreutils-python-utils

拒否操作ログを元に生成できるルールを確認する。

# cat /var/log/audit/audit.log | grep nginx | audit2allow -m nginx
-----------------------------------------
module nginx 1.0;

require {
	type ntop_port_t;
	type httpd_t;
	class tcp_socket name_connect;
}

#============= httpd_t ==============

#!!!! This avc is allowed in the current policy
allow httpd_t ntop_port_t:tcp_socket name_connect;

ルールが表示されれば作成可能なので、下記コマンドでTypeEnforcementファイル(.te)とポリシーパッケージファイル(.pp)を生成する。

# cat /var/log/audit/audit.log | grep nginx | audit2allow -M nginx

作成されたモジュールをインストールする。インストール完了後は不要なので削除する。

# semodule -i nginx.pp
# rm nginx.pp nginx.te