/
カテゴリー
概要
外部からウェブページへのアクセスを遮断したい A さんは、iptables の設定をしました。しかし A さんの設定ではウェブページへのアクセスは意図したとおりに遮断できていないようです。A さんに代わってアクセス制御の設定をしてください。
A さんは以下のコマンドで iptables の設定をしたと言っています。
iptables -A INPUT -p tcp --dport 80 -j DROP
また、~/app
にウェブページを作成するのに使用したファイルがまとまっています。
前提条件
~/app
以下のファイルを変更しても良いが、ファイルを削除したり移動したりしないこと。
初期状態
prob12-host にて自身の IP アドレスに curl を実行するとウェブページにアクセスできる ( 以下のように結果が出力される )。
[email protected]:~$ curl 192.168.12.1:8080 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>ICTSC-2021-WINTER</title> </head> <body> <h1>Prob 12</h1> <p>Please filter this page :)</p> </body> </html>
終了状態
- prob12-host にて curl を実行するとウェブページへのアクセスが iptables によって遮断される ( 以下のように結果が出力される )。
$ curl 192.168.12.1:8080 curl: (7) Failed to connect to 192.168.12.1 port 8080: Connection refused
この出力と同じようにConnection refusedとアクセスが遮断されていることがわかるようにすること。
-
localhost
を指定してアクセスした場合はアクセスできる。
$ curl localhost:8080 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>ICTSC-2021-WINTER</title> </head> <body> <h1>Prob 12</h1> <p>Please filter this page :)</p> </body> </html>
上記 1. 2. の状態が永続化されていること。
解説
初期状態で docker-compose.yaml はこのようになっています。
version: '3' services: ictsc-web-app: image: ictsc-web-app:latest container_name: ictsc-web-app restart: always ports: - "8080:80"
8行目の ports ディレクティブでは IP アドレスを指定しない場合に 0.0.0.0 にポートがバインドされます。
よって以下のように ports ディレクティブを変更することで、iptables のルールを変更することなく問題を解決できます。
ports: - "127.0.0.1:8080:80"
別解
この問題では iptables のルール変更を禁止していないので、iptables のルールを変更することでも問題の解決が可能です。
/etc/iptables/rules.v4
に変更を加えます。
# -A INPUT -p tcp -m tcp --dport 80 -j DROP -A INPUT -p tcp -m tcp --dport 8080 -j REJECT
ただしこの場合には終了条件からパケットを DROP ではなく、REJECT するルールを設定する必要があります。