Skip to main content

Remote IP (Client) wird nicht weitergeleitet

Um Container nach Außen erreichbar zu machen (z. B. Webseiten über http oder https), bedient man sich des Konstrukts einen Proxy Container vorzuschalten. Dies hat den Vorteil, dass nur ein Container nach Außen "sichtbar" ist.

Viele Admins treffen jedoch auf das Problem, dass die Log-Dateien nicht die Remote IP, des aufrufenden Clients (Besuchers), anzeigen, sondern die IP des Proxy Containers. Dieses ist ein Problem, wenn nur ein IP-beschränkter Zugriff erfolgen oder Statistikseiten wie Matomo (ehemals Piwik) die Geo-Daten auswerten sollen. Dafür ist die Remote IP des Clients notwendig.

Konfiguration

UFW Firewall

Sobald die Firewall aktiviert ist, lässt sie grundsätzlich keine Verbindungen von Außerhalb zu.

In der Datei /etc/default/ufw wird die Forward-Policy auf ACCEPT gesetzt.

DEFAULT_FORWARD_POLICY="ACCEPT"

Folgende Einträge müssen in der Datei /etc/ufw/after.rules an dam Ende eingetragen werden, damit der Proxy Container auf die abgeschirmten Container zugreifen kann.

IPTables Firewall
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING ! -o docker0 -s 172.1.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.2.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.3.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.4.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.5.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.6.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.7.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.8.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.9.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.10.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.11.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.12.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.13.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.14.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.15.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.16.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.17.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.18.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.19.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.20.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.21.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.22.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.23.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.24.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.25.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.26.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.27.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.28.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.29.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.30.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.31.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.32.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.33.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.34.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.35.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.36.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.37.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.38.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.39.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.40.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.41.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.42.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.43.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.44.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.45.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.46.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.47.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.48.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.49.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.50.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.51.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.52.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.53.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.54.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.55.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.56.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.57.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.58.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.59.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.60.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.61.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.62.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.63.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.64.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.65.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.66.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.67.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.68.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.69.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.70.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.71.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.72.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.73.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.74.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.75.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.76.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.77.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.78.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.79.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.80.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.81.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.82.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.83.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.84.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.85.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.86.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.87.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.88.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.89.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.90.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.91.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.92.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.93.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.94.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.95.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.96.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.97.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.98.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.99.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.100.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.101.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.102.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.103.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.104.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.105.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.106.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.107.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.108.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.109.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.110.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.111.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.112.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.113.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.114.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.115.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.116.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.117.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.118.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.119.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.120.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.121.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.122.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.123.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.124.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.125.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.126.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.127.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.128.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.129.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.130.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.131.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.132.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.133.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.134.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.135.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.136.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.137.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.138.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.139.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.140.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.141.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.142.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.143.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.144.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.145.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.146.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.147.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.148.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.149.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.150.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.151.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.152.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.153.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.154.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.155.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.156.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.157.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.158.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.159.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.160.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.161.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.162.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.163.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.164.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.165.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.166.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.167.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.168.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.169.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.170.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.171.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.172.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.173.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.174.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.175.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.176.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.177.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.178.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.179.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.180.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.181.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.182.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.183.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.184.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.185.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.186.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.187.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.188.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.189.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.190.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.191.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.192.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.193.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.194.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.195.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.196.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.197.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.198.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.199.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.200.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.201.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.202.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.203.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.204.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.205.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.206.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.207.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.208.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.209.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.210.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.211.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.212.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.213.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.214.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.215.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.216.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.217.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.218.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.219.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.220.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.221.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.222.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.223.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.224.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.225.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.226.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.227.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.228.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.229.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.230.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.231.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.232.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.233.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.234.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.235.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.236.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.237.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.238.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.239.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.240.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.241.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.242.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.243.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.244.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.245.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.246.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.247.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.248.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.249.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.250.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.251.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.252.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.253.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.254.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.255.0.0/16 -j MASQUERADE
COMMIT

 

Mit einem anschließenden Neustart der Firewall, werden die Einstellungen übernommen.

/etc/init.d/ufw restart

Docker Firewall

Docker nimmt bei der Konfiguration von Containern selbstständig Änderungen an der Firewall vor. So werden Ports direkt nach Außen sichtbar gemacht. Dies verhindert man, indem in die Datei /etc/docker/daemon.json folgendes einträgt (ggf. muss die Datei erstellt werden).

{ "iptables": false }

Docker anschließend neu starten.

/etc/init.d/docker restart

Docker Proxy Container

Der Proxy Container erhält als Einziger die Erlaubnis von Außerhalb erreichbar zu sein. In Docker Compose wird somit ein Container erstellt, der auf der Host-Netzwerk gesetzt wird.

version: '3.4'
 
services:
  proxy:
    image: nginx:latest
    ports:
      - 80:80
      - 443:443
    network_mode: "host"

Wichtig ist der Part "network_mode: host". Damit ist es dem Container möglich die Remote IP des Clients zu erhalten.

Docker Application Container

Bei alle weiteren Docker Containern wird lediglich der Port freigegeben.

version: '3.4'
 
services:
  app:
    image: [APP]
    ports:
      - 8080:80

Proxy VHost Konfiguration

Im Proxy wird nun der Zugriff auf den App-Container als VHost bereitgestellt.

Der erste server-Block definiert den unverschlüsselten Zugriff über Port 80 und leitet den Client auf https um.
Der upstream-Block definiert die Verbindung zu dem Application-Container.
Der zweite server-BLock definiert den verschlüsselten Zugriff über Port 443 und ein Proxy-Pass auf den Upstream.

server {
        listen 80;
        listen [::]:80;
 
        server_name sub.domain.tld;
 
        # Redirect any HTTP request to HTTPS
        location / {
                return 301 https://$server_name$request_uri;
        }
 
        error_log /pfad/zum/error.log;
        access_log /pfad/zum/access.log;
}
 
upstream app {
        server 0.0.0.0:8080;
}
 
server {
        listen 443 ssl;
        listen [::]:443 ssl http2;
 
        server_name sub.domain.tld;
 
        real_ip_header X-Forwarded-For;
        set_real_ip_from 0.0.0.0/0;
 
        ssl_certificate /pfad/zum/cert;
        ssl_certificate_key /pfad/zum/key;
 
        location / {
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_set_header X-Forwarded-Host $host;
                proxy_set_header X-Forwarded-Server $host;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_pass http://app;
        }
 
        error_log /pfad/zum/error.log;
        access_log /pfad/zum/access.log;
}

Docker ps

Die Container sehen gestartet wie folgt aus. Der Proxy-Container zeigt keine freigegebenen Ports an.

root:/root# docker ps
CONTAINER ID        IMAGE                                        COMMAND                  CREATED             STATUS                  PORTS                                    NAMES
[ID]                nginx:latest                                 "nginx -g 'daemon of..."   2 hours ago         Up 2 hours                                                       proxy
[ID]                nextcloud                                    "/entrypoint.sh apac..."   5 hours ago         Up 5 hours              0.0.0.0:8080->80/tcp                     nc_app