Üblicherweise werden LXD/LXC-Container so aufgesetzt, dass
sie per NAT einen Zugriff auf’s Internet haben.
Problem: Wenn jemand den Container knackt, kann er relativ
problemlos aus dem Container heraus weitere Aktivitäten unternehmen
und sich im Netz verbreiten. Wir wollen stattdessen ein Hostonly-Netz
für die Container, dann kann sich der Knacker nicht ganz so leicht
verbreiten.
Ausgangslage
Rechner mit LXD-Basisinstallation und einigen LXD-Containern,
die per NAT-Brücke eingerichtet sind.
hostonly# apt-get update
Get:1 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]
Hit:2 http://archive.ubuntu.com/ubuntu bionic InRelease
Get:3 http://security.ubuntu.com/ubuntu bionic-security/main amd64 Packages [593 kB]
Get:4 http://archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]
...
hostonly# apt-get upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following packages will be upgraded:
bind9-host dnsutils libbind9-160 libdns-export1100 libdns1100 libirs160 libisc-export169 libisc169 libisccc160 libisccfg160 liblwres160
...
Die Aktualisierung klappt!
Automatische Nutzung
/root/bin/apt-proxy.sh
12345678910111213141516
#!/bin/sh
# port of apt-cacher-ng on the lxd host
PORT=3142
APT_PROXY_FILE="/etc/apt/apt.conf.d/01proxy"
LXDHOST=
for h in $(ip addr|grep -o "inet [0-9.]*/"|grep -v 127.0.0.1|grep -o "[0-9.]*"|sed -e "s/[.][0-9]*$/.1/"); do
nc -z "${h}" "${PORT}" && { LXDHOST="${h}"; break; }
done
if [ -n "${LXDHOST}" ]; then
echo >"${APT_PROXY_FILE}" "Acquire::http::Proxy \"http://${LXDHOST}:${PORT}\";"
else
rm -f "${APT_PROXY_FILE}"
fi
/root/systemd/apt-proxy.service
123456789101112
[Unit]
Description=Apt proxy to apt-cacher-ng on lxd host
After=network.target
[Service]
ExecStart=/root/bin/apt-proxy.sh
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
Aktivieren
123
lxdhost# systemctl enable /root/systemd/apt-proxy.service
Created symlink /etc/systemd/system/multi-user.target.wants/apt-proxy.service → /root/systemd/apt-proxy.service.
Created symlink /etc/systemd/system/apt-proxy.service → /root/systemd/apt-proxy.service.
Test
1234567891011
lxdhost# reboot
...
lxdhost# systemctl status apt-proxy
● apt-proxy.service - Apt proxy to apt-cacher-ng on lxd host
Loaded: loaded (/root/systemd/apt-proxy.service; enabled; vendor preset: enabled)
Active: active (exited) since Sun 2019-12-08 07:10:09 CET; 12min ago
Process: 217 ExecStart=/root/bin/apt-proxy.sh (code=exited, status=0/SUCCESS)
Main PID: 217 (code=exited, status=0/SUCCESS)
Dec 08 07:10:09 hostonly systemd[1]: apt-proxy.service: Failed to reset devices.list: Operation not permitted
Dec 08 07:10:09 hostonly systemd[1]: Started Apt proxy to apt-cacher-ng on lxd host.
Weiterleitung
Klappt die Weiterleitung einer Netzwerkverbindung vom LXD-Host an einen Hostonly-Container?
Apache HTTPD installieren
12345678910
hostonly# apt-get install apache2
hostonly# netstat -tan
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 10.2.110.10:43552 10.2.110.1:3142 TIME_WAIT
tcp 0 0 10.2.110.10:22 10.2.110.1:32976 ESTABLISHED
tcp6 0 0 :::22 :::* LISTEN
tcp6 0 0 :::80 :::* LISTEN