Как установить Docker CE на Debian 10 с поддержкой двойного стека IPv6-NAT и поддержкой брандмауэра
Введение
В этом руководстве мы установим Docker Community Edition на облачный сервер, на котором работает Docker 10 Buster, и настроим его конфигурацию docker и брандмауэра, чтобы легко поддерживать переадресацию портов с двумя стеками (симметричная маршрутизация IPv4 и IPv6) через IPv6-NAT и передачу брандмауэра через IPTables.Предпосылки
Это руководство было протестировано на облачном сервере Hetzner, но должно работать с любым облачным сервером.
- Нам нужен облачный сервер со свежим образом Debian 10 Buster.
- Рекомендуется использовать аутентификацию с открытым ключом для доступа по SSH.
- Если мы хотим использовать какие-либо внутренние сети или плавающие IP-адреса, мы должны добавить и настроить их, прежде чем приступить к этому учебнику.
Шаг 1 - Подготовка среды
Во-первых, нам нужно войти на облачный сервер, используя SSH. Если мы не вошли в систему как root напрямую, нам нужно открыть корневую оболочку с помощью sudo:sudo -i
Шаг 1.1 - Установите переменные среды
Некоторые значения, такие как основной адрес IPv4 и IPv6, будут использоваться несколько раз, поэтому мы будем экспортировать их как переменные среды для простого повторного использования.Пожалуйста, введите ваши значения и выполните следующие команды экспорта:
# Main IPv4 address for the cloud server
export HCTUT_IPV4MAIN="192.0.2.1"
# Main IPv6 address for the cloud server
export HCTUT_IPV6MAIN="2001:DB8::2"
# Configured SSH port used to connect to the cloud server (default: 22)
export HCTUT_SSHPORT="22"
# Private IPv4 Subnet for custom docker bridge
export HCTUT_PSUBIPV4="172.25.0.0/24"
# Private IPv6 Subnet for custom docker bridge
export HCTUT_PSUBIPV6="fdef::/64"
export HCTUT_IPV6NAT_VERSION="vX.X.X"
Шаг 1.2 - Обновление и обновление облачного сервера
Мы должны убедиться, что на облачном сервере установлены последние обновления, а его списки пакетов актуальны:apt update
apt dist-upgrade
Шаг 1.3 - сетевое исправление IPv6
В настоящий момент основной IPv6-адрес, настроенный в конфигурации cloud-init, добавлен как устаревший . Это сломает IPv6-NAT, поэтому нам нужно это исправить, просто принудительно привязав IPv6-адресeth0
вместо обозначенного eth0:0
:sed -i 's/eth0:0/eth0/g' /etc/network/interfaces.d/50-cloud-init.cfg
systemctl restart networking.service
Шаг 2 - Сконфигурируйте модули ядра для Debian 10 Buster
В Debian 10 Buster есть две подсистемы ядра, которые будут обрабатывать задания брандмауэра для вашей системы: nf_tables (nftables) и x_tables (iptables). Кроме того, можно использовать новую подсистему ( таблицы nf ), настроив ее с помощью устаревших команд (iptables / ip6tables). В настоящее время есть некоторые ошибки ( # 934168 ) в официальном ядре Debian при использовании определенных правил с подсистемой nf tables и устаревшими командами iptables. Docker CE также не предоставляет встроенной поддержки для nftables. Поскольку использование обеих подсистем ядра не рекомендуется из-за непредвиденного поведения, мы будем использовать только x_tables и устаревшие команды iptables / ip6tables .Шаг 2.1 - Отключить модуль ядра nf_tables
Поскольку мы хотим использовать только подсистему x_tables , мы отключим модуль ядра nf_tables, чтобы предотвратить любую непреднамеренную загрузку этого модуля:cat << \EOF > /etc/modprobe.d/nftables.conf
install nf_tables /bin/false
EOF
Шаг 2.2 - Загрузка br_netfilter при загрузке
Docker использует модуль ядра br_netfilter, который иногда не может быть загружен динамически самим демоном docker. Чтобы убедиться, что этот модуль загружен, мы загрузим его непосредственно при загрузке:cat << \EOF > /etc/modules-load.d/br_netfilter.conf
br_netfilter
EOF
Шаг 2.3 - Установите параметр ядра для сетевой маршрутизации
Некоторые параметры ядра необходимо настроить для поддержки надежной маршрутизации IPv4 и IPv6 с помощью Docker:cat << \EOF > /etc/sysctl.d/85-network.conf
net.ipv4.conf.default.rp_filter=1
net.ipv4.conf.all.rp_filter=1
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
net.ipv4.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0
EOF
sysctl --system
Шаг 3 - Установите и настройте брандмауэр
Как указывалось ранее, мы (и докер) будем использовать iptables и ip6tables для настройки нашего брандмауэра.Шаг 3.1 - Установите iptables с сохранением задания
Прежде всего, нам нужно установить iptables и системное задание постоянства, которое будет загружать сохраненные правила брандмауэра при загрузке:apt install iptables iptables-persistent
Шаг 3.2 - Использование устаревших команд iptables / ip6tables
Нам нужно принудительно использовать устаревшие команды для iptables / ip6tables:update-alternatives --set iptables /usr/sbin/iptables-legacy
update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
Шаг 3.3 - Создание основных правил брандмауэра
Настройка брандмауэра - сложная тема, которую мы будем и не можем полностью охватить в этом руководстве. Мы будем использовать очень простую конфигурацию по умолчанию, которая будет разрешать входящие соединения SSH только на все основные IP-адреса облачного сервера и некоторые пакеты ICMP / ICMPv6:cat << EOF > /etc/iptables/rules.v4
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
:HCFW-ICMP - [0:0]
:HCFW-Local - [0:0]
:HCFW-Services - [0:0]
:HCFW-State - [0:0]
-A INPUT -j HCFW-Local
-A INPUT -j HCFW-State
-A INPUT -p icmp -j HCFW-ICMP
-A INPUT -j HCFW-Services
-A OUTPUT -j HCFW-Local
-A OUTPUT -j HCFW-State
-A OUTPUT -j ACCEPT
-A HCFW-ICMP -p icmp -m icmp --icmp-type 3 -j ACCEPT
-A HCFW-ICMP -p icmp -m icmp --icmp-type 11 -j ACCEPT
-A HCFW-ICMP -p icmp -m icmp --icmp-type 8 -m limit --limit 8/sec -j ACCEPT
-A HCFW-Local -i lo -j ACCEPT
-A HCFW-Services -p tcp -m tcp -d $HCTUT_IPV4MAIN --dport $HCTUT_SSHPORT -j ACCEPT
-A HCFW-State -m conntrack --ctstate INVALID -j DROP
-A HCFW-State -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
COMMIT
EOF
cat << EOF > /etc/iptables/rules.v6
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
:WCFW-ICMP - [0:0]
:WCFW-Local - [0:0]
:WCFW-Services - [0:0]
:WCFW-State - [0:0]
-A INPUT -j WCFW-Local
-A INPUT -j WCFW-State
-A INPUT -p ipv6-icmp -j WCFW-ICMP
-A INPUT -j WCFW-Services
-A OUTPUT -j WCFW-Local
-A OUTPUT -j WCFW-State
-A OUTPUT -j ACCEPT
-A WCFW-ICMP -p ipv6-icmp -m icmp6 --icmpv6-type 1 -j ACCEPT
-A WCFW-ICMP -p ipv6-icmp -m icmp6 --icmpv6-type 2 -j ACCEPT
-A WCFW-ICMP -p ipv6-icmp -m icmp6 --icmpv6-type 3 -j ACCEPT
-A WCFW-ICMP -p ipv6-icmp -m icmp6 --icmpv6-type 4 -j ACCEPT
-A WCFW-ICMP -p ipv6-icmp -m icmp6 --icmpv6-type 133 -j ACCEPT
-A WCFW-ICMP -p ipv6-icmp -m icmp6 --icmpv6-type 134 -j ACCEPT
-A WCFW-ICMP -p ipv6-icmp -m icmp6 --icmpv6-type 135 -j ACCEPT
-A WCFW-ICMP -p ipv6-icmp -m icmp6 --icmpv6-type 136 -j ACCEPT
-A WCFW-ICMP -p ipv6-icmp -m icmp6 --icmpv6-type 128 -m limit --limit 8/sec -j ACCEPT
-A WCFW-Local -i lo -j ACCEPT
-A WCFW-Services -p tcp -m tcp -d $HCTUT_IPV6MAIN --dport $HCTUT_SSHPORT -j ACCEPT
-A WCFW-State -m conntrack --ctstate INVALID -j DROP
-A WCFW-State -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
COMMIT
EOF
Шаг 4 - Установите и настройте Docker CE
Теперь мы можем установить Docker CE в нашей системе Debian 10 Buster. Мы установим официальные пакеты от Docker Inc., так как репозитории пакетов debian не содержат последних обновлений для Docker CE.Шаг 4.1. Настройка хранилищ APT Docker Inc.
Перед установкой Docker CE нам нужно добавить репозитории apt от Docker Inc. к нашим источникам пакетов и ключ подписи Debian Inc. к нашим доверенным ключам apt:apt install apt-transport-https
wget -O /tmp/docker https://download.docker.com/linux/debian/gpg
gpg --dearmor /tmp/docker
cp /tmp/docker.gpg /etc/apt/trusted.gpg.d/docker.gpg
rm -rf /tmp/docker /tmp/docker.gpg
cat << \EOF > /etc/apt/sources.list.d/docker.list
deb https://download.docker.com/linux/debian buster stable
EOF
Шаг 4.2 - Установите Docker Community Edition
Теперь мы можем установить Docker CE. Мы не будем устанавливать aufs, который является более старым драйвером хранилища и больше не рекомендуется.apt update
apt install docker-ce aufs-tools-
Шаг 4.3. Настройка docker-демона
Теперь нам нужно установить некоторые параметры конфигурации для демона Docker. В качестве DNS-серверов докер по умолчанию будет использовать собственный прокси-сервер dns, но в качестве резервной копии мы предоставим DNS-сервер Hetzner IPv4 и IPv6. Поскольку мы используем iptables / ip6tables для переадресации портов, прокси-сервер пользователя не нужен и должен быть отключен. В дополнение к этому, мы создадим новый мост по умолчанию, который будет использоваться докерными контейнерами, так что собственный мост докера больше не нужен.cat << \EOF > /etc/docker/daemon.json
{
"log-driver": "journald",
"bridge": "none",
"userland-proxy": false,
"dns": ["2a01:4f8:0:1::add:1010", "213.133.100.100"]
}
EOF
Шаг 4.4 - Создать новый мост по умолчанию для докера
Используя наши предустановленные подсети, мы теперь создаем наш новый мост по умолчанию:docker network create \
-d bridge \
--ipv6 \
--subnet $HCTUT_PSUBIPV4 \
--subnet $HCTUT_PSUBIPV6 \
-o "com.docker.network.bridge.enable_icc=false" \
-o "com.docker.network.bridge.name=dnetDefault" \
dnetDefault
com.docker.network.bridge.enable_icc
значение true
.Мы не используем
docker0
мост, поэтому нам нужно указать сеть docker run --network dnetDefault ...
для каждого контейнера. В противном случае контейнер будет создан без подключения к сети. Как побочный эффект, это предотвратит случайное создание контейнеров с сетевыми возможностями.Шаг 4.5 - Исправление системного сервисного модуля docker.service
Docker добавит и удалит правила iptables в наш набор правил. Если у нас есть существующие правила iptables, их необходимо загрузить до запуска Docker. Этого можно достичь, начавdocker.service
после netfilter-persistent.service
. Кроме того, некоторые IP-адреса могут быть не готовы непосредственно при запуске (например, DHCP для внутренних сетей), поэтому мы отложим запуск службы докера на две секунды. Следующая команда переопределит существующий сервисный модуль systemd для докера:cat << \EOF > /etc/systemd/system/docker.service
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
BindsTo=containerd.service
After=network-online.target firewalld.service netfilter-persistent.service containerd.service
Wants=network-online.target
Requires=docker.socket
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStartPre=/bin/sleep 5
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
# Note that StartLimit* options were moved from "Service" to "Unit" in systemd 229.
# Both the old, and new location are accepted by systemd 229 and up, so using the old location
# to make them work for either version of systemd.
StartLimitBurst=3
# Note that StartLimitInterval was renamed to StartLimitIntervalSec in systemd 230.
# Both the old, and new name are accepted by systemd 230 and up, so using the old name to make
# this option work for either version of systemd.
StartLimitInterval=60s
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Comment TasksMax if your systemd version does not support it.
# Only systemd 226 and above support this option.
TasksMax=infinity
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
[Install]
WantedBy=multi-user.target
EOF
Шаг 4.6 - Установите флаги ядра в GRUB_CMDLINE
Некоторые функции ядра должны быть включены для демона docker при запуске системы и должны быть добавлены в командную строку grub по умолчанию:sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT="/GRUB_CMDLINE_LINUX_DEFAULT="cgroup_enable=memory swapaccount=1 /g' /etc/default/grub
update-grub
Шаг 5 - Установите и настройте docker-ipv6nat
Наша главная цель - симметричная конфигурация с двумя стеками для докера. Возможно, вы сможете добавить общедоступные адреса IPv6 в контейнеры Docker, но тогда у вас будет прямой доступ через IPv6 и косвенный доступ через IPv4, что усложнит систему с двумя стеками. Чтобы обеспечить симметричную конфигурацию, мы будем использовать docker-ipv6nat, который добавит правила IPv6 NAT для подсетей IPv6, используемых docker.Шаг 5.1 - Загрузите и установите бинарный файл docker-ipv6nat
wget -O /tmp/docker-ipv6nat.amd64 https://github.com/robbertkl/docker-ipv6nat/releases/download/$HCTUT_IPV6NAT_VERSION/docker-ipv6nat.amd64
chown root:root /tmp/docker-ipv6nat.amd64
mv /tmp/docker-ipv6nat.amd64 /usr/local/sbin/docker-ipv6nat
chmod +x /usr/local/sbin/docker-ipv6nat
Шаг 5.2 - Создать системный сервисный модуль для docker-ipv6nat
cat << \EOF > /etc/systemd/system/docker-ipv6nat.service
[Unit]
Description=Docker IPv6-NAT
After=network.target docker.service
StartLimitIntervalSec=60
[Service]
Type=simple
Restart=on-failure
RestartSec=10
ExecStart=/usr/local/sbin/docker-ipv6nat -cleanup -retry
[Install]
WantedBy=multi-user.target
EOF
systemctl enable docker-ipv6nat
Шаг 6 - Перезагрузка
Теперь мы можем выйти из корневой оболочки и перезагрузить облачный сервер:reboot
Шаг 7 - Создать основной веб-сервер HTTPD (необязательно)
После перезагрузки облачного сервера мы можем протестировать нашу конфигурацию и запустить базовый веб-сервер HTTPD.Шаг 7.1 - Проверка системных сервисов
Сначала нам нужно проверить, все ли сервисы systemd выполнены правильно:sudo systemctl status netfilter-persistent.service --no-pager
sudo systemctl status docker.service --no-pager
sudo systemctl status docker-ipv6nat.service --no-pager
Шаг 7.2 - Проверьте сеть
В качестве следующего шага мы должны проверить, правильно ли настроен наш док-мост.ip addr
dnetDefault
интерфейс (используя примеры значений для подсетей):4: dnetDefault: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:5e:d8:b7:5e brd ff:ff:ff:ff:ff:ff
inet 172.25.0.1/24 brd 172.25.0.255 scope global dnetDefault
valid_lft forever preferred_lft forever
inet6 fdef::1/64 scope global tentative
valid_lft forever preferred_lft forever
inet6 fe80::1/64 scope link tentative
valid_lft forever preferred_lft forever
Шаг 7.3 - Проверка модулей ядра
Мы не должны иметь возможность проверять работоспособность отключенногоnf_tables
модуля ядра:sudo modprobe nf_tables
modprobe: ERROR: ../libkmod/libkmod-module.c:979 command_do() Error running install command for nf_tables
modprobe: ERROR: could not insert 'nf_tables': Operation not permitted
br_netfilter
должны быть загружены:lsmod | grep br_netfilter
br_netfilter 24576 0
bridge 188416 1 br_netfilter
Шаг 7.4 - Spawn HTTPD контейнер
Теперь мы можем порождать контейнер (соответственно заменить значения):# Main IPv4 address for the cloud server
export HCTUT_IPV4MAIN="192.0.2.1"
# Main IPv6 address for the cloud server
export HCTUT_IPV6MAIN="2001:DB8::1"
sudo docker run \
-d \
--restart always \
--name test-httpd \
--network dnetDefault \
--publish $HCTUT_IPV4MAIN:8080:80 \
--publish [$HCTUT_IPV6MAIN]:8080:80 \
httpd:latest
http://$HCTUT_IPV4MAIN:8080
и http://[$HCTUT_IPV6MAIN]:8080
.Шаг 7.5 - Проверьте iptables
sudo iptables -t nat -nvL
sudo iptables -nvL
root@tutorial:~# sudo iptables -t nat -nvL
Chain PREROUTING (policy ACCEPT 6 packets, 292 bytes)
pkts bytes target prot opt in out source destination
29 1712 DOCKER all -- * * 0.0.0.0/0 0.0.0.0/0 ADDRTYPE match dst-type LOCAL
Chain INPUT (policy ACCEPT 1 packets, 60 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 DOCKER all -- * * 0.0.0.0/0 0.0.0.0/0 ADDRTYPE match dst-type LOCAL
Chain POSTROUTING (policy ACCEPT 5 packets, 300 bytes)
pkts bytes target prot opt in out source destination
0 0 MASQUERADE all -- * dnetDefault 0.0.0.0/0 0.0.0.0/0 ADDRTYPE match src-type LOCAL
0 0 MASQUERADE all -- * !dnetDefault 172.25.0.0/24 0.0.0.0/0
0 0 MASQUERADE tcp -- * * 172.25.0.2 172.25.0.2 tcp dpt:80
Chain DOCKER (2 references)
pkts bytes target prot opt in out source destination
5 300 DNAT tcp -- * * 0.0.0.0/0 116.203.191.110 tcp dpt:8080 to:172.25.0.2:80
root@tutorial:~# sudo iptables -nvL
Chain INPUT (policy DROP 5 packets, 232 bytes)
pkts bytes target prot opt in out source destination
6028 57M HCFW-Local all -- * * 0.0.0.0/0 0.0.0.0/0
6028 57M HCFW-State all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 HCFW-ICMP icmp -- * * 0.0.0.0/0 0.0.0.0/0
27 1552 HCFW-Services all -- * * 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
51 7055 DOCKER-ISOLATION-STAGE-1 all -- * * 0.0.0.0/0 0.0.0.0/0
26 3428 ACCEPT all -- * dnetDefault 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
5 300 DOCKER all -- * dnetDefault 0.0.0.0/0 0.0.0.0/0
20 3327 ACCEPT all -- dnetDefault !dnetDefault 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- dnetDefault dnetDefault 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
1475 129K HCFW-Local all -- * * 0.0.0.0/0 0.0.0.0/0
1475 129K HCFW-State all -- * * 0.0.0.0/0 0.0.0.0/0
44 2906 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0
Chain DOCKER (1 references)
pkts bytes target prot opt in out source destination
5 300 ACCEPT tcp -- !dnetDefault dnetDefault 0.0.0.0/0 172.25.0.2 tcp dpt:80
Chain DOCKER-ISOLATION-STAGE-1 (1 references)
pkts bytes target prot opt in out source destination
20 3327 DOCKER-ISOLATION-STAGE-2 all -- dnetDefault !dnetDefault 0.0.0.0/0 0.0.0.0/0
51 7055 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0
Chain DOCKER-ISOLATION-STAGE-2 (1 references)
pkts bytes target prot opt in out source destination
0 0 DROP all -- * dnetDefault 0.0.0.0/0 0.0.0.0/0
20 3327 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0
Chain HCFW-ICMP (1 references)
pkts bytes target prot opt in out source destination
0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 3
0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 11
0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 8 limit: avg 8/sec burst 5
Chain HCFW-Local (2 references)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
Chain HCFW-Services (1 references)
pkts bytes target prot opt in out source destination
3 180 ACCEPT tcp -- * * 0.0.0.0/0 116.203.191.110 tcp dpt:22
Chain HCFW-State (2 references)
pkts bytes target prot opt in out source destination
0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate INVALID
7432 57M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
Шаг 7.6 - Проверьте ip6tables
sudo ip6tables -t nat -nvL
sudo ip6tables -nvL
root@tutorial:~# sudo ip6tables -t nat -nvL
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
5 400 DOCKER all * * ::/0 ::/0 ADDRTYPE match dst-type LOCAL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 1 packets, 96 bytes)
pkts bytes target prot opt in out source destination
0 0 DOCKER all * * ::/0 ::/0 ADDRTYPE match dst-type LOCAL
Chain POSTROUTING (policy ACCEPT 6 packets, 496 bytes)
pkts bytes target prot opt in out source destination
0 0 MASQUERADE all * !dnetDefault fdef::/64 ::/0
0 0 MASQUERADE tcp * * fdef::2 fdef::2 tcp dpt:80
Chain DOCKER (2 references)
pkts bytes target prot opt in out source destination
5 400 DNAT tcp * * ::/0 2a01:4f8:c2c:159e::1 tcp dpt:8080 to:[fdef::2]:80
root@tutorial:~# sudo ip6tables -nvL
Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
19 1352 WCFW-Local all * * ::/0 ::/0
19 1352 WCFW-State all * * ::/0 ::/0
16 1064 WCFW-ICMP icmpv6 * * ::/0 ::/0
0 0 WCFW-Services all * * ::/0 ::/0
Chain FORWARD (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
63 8997 DOCKER-ISOLATION all * * ::/0 ::/0
43 5270 DOCKER all * dnetDefault ::/0 ::/0
0 0 ACCEPT all * dnetDefault ::/0 ::/0 ctstate RELATED,ESTABLISHED
20 3727 ACCEPT all dnetDefault !dnetDefault ::/0 ::/0
12 880 DROP all dnetDefault dnetDefault ::/0 ::/0
Chain OUTPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
42 3800 WCFW-Local all * * ::/0 ::/0
42 3800 WCFW-State all * * ::/0 ::/0
42 3800 ACCEPT all * * ::/0 ::/0
Chain DOCKER (1 references)
pkts bytes target prot opt in out source destination
31 4390 ACCEPT tcp !dnetDefault dnetDefault ::/0 fdef::2 tcp dpt:80
Chain DOCKER-ISOLATION (1 references)
pkts bytes target prot opt in out source destination
63 8997 RETURN all * * ::/0 ::/0
Chain WCFW-ICMP (1 references)
pkts bytes target prot opt in out source destination
0 0 ACCEPT icmpv6 * * ::/0 ::/0 ipv6-icmptype 1
0 0 ACCEPT icmpv6 * * ::/0 ::/0 ipv6-icmptype 2
0 0 ACCEPT icmpv6 * * ::/0 ::/0 ipv6-icmptype 3
0 0 ACCEPT icmpv6 * * ::/0 ::/0 ipv6-icmptype 4
4 224 ACCEPT icmpv6 * * ::/0 ::/0 ipv6-icmptype 133
0 0 ACCEPT icmpv6 * * ::/0 ::/0 ipv6-icmptype 134
7 504 ACCEPT icmpv6 * * ::/0 ::/0 ipv6-icmptype 135
5 336 ACCEPT icmpv6 * * ::/0 ::/0 ipv6-icmptype 136
0 0 ACCEPT icmpv6 * * ::/0 ::/0 ipv6-icmptype 128 limit: avg 8/sec burst 5
Chain WCFW-Local (2 references)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all lo * ::/0 ::/0
Chain WCFW-Services (1 references)
pkts bytes target prot opt in out source destination
0 0 ACCEPT tcp * * ::/0 2a01:4f8:c2c:159e::1 tcp dpt:22
Chain WCFW-State (2 references)
pkts bytes target prot opt in out source destination
0 0 DROP all * * ::/0 ::/0 ctstate INVALID
3 288 ACCEPT all * * ::/0 ::/0 ctstate RELATED,ESTABLISHED
Шаг 7.7 - Удалить контейнер HTTPD
В качестве последнего шага мы удалим порожденный контейнер и загруженный образ:sudo docker stop test-httpd
sudo docker rm test-httpd
sudo docker rmi httpd:latest
Заключение
Мы установили Docker Community Edition и IPTables Firewall на наш Debian 10 Buster и подготовили его к симметричной работе с двумя стеками IPv4 / IPv6. В дополнение к этому, мы установили очень простой набор правил брандмауэра, который должен быть скорректирован путем редактирования/etc/iptables/rules.v4
и /etc/iptables/rules.v6
.
Комментариев 0