Play Framework を始めたばかりの方向けに、サンプルを進めるうえで困ったところを共有する目的で書いています。
Oracle Cloud Infrastructure の Ubuntu 22.04 (以下、ubuntu) 内で Play Framework 2.8.x (以下、play) を実行し、http (port: 80) で "Welcome to Play!" ページにアクセスしたときのメモです。
以下、目次
やりたいこと
ubuntu で play を実行し、http://グローバル IP にアクセスする (port: 80 でアクセスする) と、"Welcome to Play!" ページが表示される(ただし、play の待ち受けポートは 9000 の default まま)。
方針
ブラウザから ubuntu 内の play まで、http でアクセスする際、許可を与える必要があるのは以下の設定であった。
ので、以下の設定を一つずつ許可にしていく。
- 「Oracle Cloud Infrastructure の ネットワーク・セキュリティ・グループ 内セキュリティイングレスルール」として、『ポート80 の許可』
- 「ubuntu 内 iptables ルール」として、『ポート80 からポート9000 へリダイレクト』、『ポート9000 のリダイレクトのリクエストのみ許可』
- 「play 内 の AllowedHostsFilter 設定」として、『グローバルIP でのhttp リクエスト許可』
詳細
「Oracle Cloud Infrastructure の ネットワーク・セキュリティ・グループ 内セキュリティイングレスルール」として、『ポート80 の許可』
default ままだと、「ネットワーク・セキュリティ・グループ」または「(設定があれば)サブネットのセキュリティリスト」には、
あたりが許可されていた。
ので、「ネットワーク・セキュリティ・グループ」に『ポート80 でのTCP トラフィック イングレスルール』を追加した(参考: OracleCloudよりポート許可の追加)。
「ubuntu 内 iptables ルール」として、『ポート80 からポート9000 へリダイレクト』、『ポート9000 のリダイレクトのリクエストのみ許可』
# ポート80 からポート9000 へリダイレクト sudo iptables -t nat -A PREROUTING -m comment --comment "for http port forward" -p tcp --dport 80 -j REDIRECT --to-port 9000 # 設定行は、ssh 用設定行の次にしとこう INDEX_INSERT=$(sudo iptables -L --line-numbers | grep 'state NEW tcp dpt:ssh' | awk '{print $1 + 1;}') # ポート9000 のリダイレクトのリクエストのみ許可 sudo iptables -t filter -I INPUT "$INDEX_INSERT" -p tcp --dport 9000 -m conntrack --ctstate DNAT -j ACCEPT # iptables の設定保存 sudo netfilter-persistent save
なお、sudo netfilter-persistent reload
あるいは、iptables-save
を呼ぶと、iptables の filter rules が重複して登録された。
これのせい?iptables-save duplicates libvirt and ufw rules on iptables-restore with iptables-persistent 。
よくわからないし、対処方法も調べていないので、上では明示的にsudo netfilter-persistent reload
していない。
sudo reboot
時には、保存した内容のみ登録されたので、回避方法はsudo netfilter-persistent reload
しない。
「play 内 の AllowedHostsFilter 設定」として、『グローバルIP でのhttp リクエスト許可』
play.filters.hosts { # Allow requests to example.com, its subdomains, and localhost:9000. # and add Global IP (ex.: 203.0.113.0) allowed = [".example.com", "localhost:9000", "203.0.113.0"]
補足
- play の待ち受けポートは 9000 の default ままとしたのは、80 を割り当てようとするとroot 権限が必要らしいので
- 「セキュリティ・リスト」と「ネットワーク・セキュリティ・グループ」は、同じ設定を登録でき、役割も重なっている部分がある。「ネットワーク・セキュリティ・グループ」でできることは、「ネットワーク・セキュリティ・グループ」を使用することを推奨するらしい。セキュリティ・リストとネットワーク・セキュリティ・グループの比較
参考にしたところ
- Enabling Network Traffic to Ubuntu Images in Oracle Cloud Infrastructure
- Oracle Cloud Ubuntu20.04でポート開放
- How to redirect port 80 to 8080 while keeping 8080 closed to the Internet?
以上でした。