以在Ubuntu 16.04上为Docker Swarm配置Linux防火墙为例子
介绍
DockerSwarm 是Docker的一项功能,可以很容易地大规模投放Docker窗主机和容器. Docker窗群,或码头集群,该功能是由一个或多个主机Dockerized作为经典的节点,任何数量的工作节点组成.设置这样的系统需要仔细操纵Linux防火墙.
Docker Swarm正常工作所需的网络端口有:
TCP端口2376进行安全Docker窗客户端通信.此端口是Docker Machine工作所必需的. Docker机器用于编排Docker主机.
TCP端口2377 .此端口用于Docker Swarm或群集的节点之间的通信.它只需要在管理器节点上打开.
TCP和UDP端口7946的节点之间的通信(容器网络发现).
UDP端口4789的覆盖网络通信(容器入口联网).
注意:除了这些端口,端口22 (SSH的流量),并在集群上运行需要提供特定服务的其他端口必须是开放.
预前准备
设置组成集群的主机,包括至少一个群集管理器和一个群组工作者.您可以按照教程如何提供和管理远程Docker在Ubuntu 16.04Docker主机设置这些.
注意:您会注意到命令(在这篇文章中所有的命令)不能与前缀sudo .这是因为它假设您正在使用的登录到服务器docker-machine ssh使用Docker窗机设置后命令.
在本文中,您将学习如何使用所有Linux发行版上提供的不同防火墙管理应用程序在Ubuntu 16.04上配置Linux防火墙.这些防火墙管理应用程序是FirewallD,IPTables工具和UFW,简单的防火墙. .虽然本教程包含三种方法,每种方法都提供相同的结果,因此您可以选择最熟悉的方法.
UFW
UFW是Ubuntu发行版上的默认防火墙应用程序,包括Ubuntu 16.04
如果你只是设置你的Docker主机,UFW已经安装.您只需要启用和配置它
在将用作Swarm管理器的节点上执行以下命令:
1 2 3 4 5 6
| ufw allow 22/tcp ufw allow 2376/tcp ufw allow 2377/tcp ufw allow 7946/tcp ufw allow 7946/udp ufw allow 4789/udp
|
之后,重新加载并启用UFW:
这可能不是必需的,但是在任何时候更改并重新启动防火墙时,都不必重新启动Docker守护程序:
1
| systemctl restart docker
|
然后在将用作工作线程的每个节点上,执行以下命令:
1 2 3 4 5 6 7 8
| ufw allow 22/tcp ufw allow 2376/tcp ufw allow 7946/tcp ufw allow 7946/udp ufw allow 4789/udp ufw reload ufw enable systemctl restart docker
|
关闭防火墙
FirewallD
FirewallD是Fedora,CentOS和基于它们的其他Linux发行版上的默认防火墙应用程序.但FirewallD也可用于其他Linux发行版,包括Ubuntu 16.04.
如果您选择使用FirewallD而不是UFW,请首先卸载UFW:
1 2 3 4 5 6
| apt-get purge ufw apt-get install firewalld systemctl status firewalld systemctl start firewalld systemctl enable firewalld
|
当开机启动时会生成如下文件:
1 2 3 4
| Created symlink from /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service to /usr/lib/systemd/system/firewalld.service. Created symlink from /etc/systemd/system/basic.target.wants/firewalld.service to /usr/lib/systemd/system/firewalld.service.
|
在将是Swarm管理器的节点上,使用以下命令打开必要的端口:
1 2 3 4 5 6 7
| firewall-cmd --add-port=22/tcp --permanent firewall-cmd --add-port=2376/tcp --permanent firewall-cmd --add-port=2377/tcp --permanent firewall-cmd --add-port=7946/tcp --permanent firewall-cmd --add-port=7946/udp --permanent firewall-cmd --add-port=4789/udp --permanent
|
注意 :如果你犯了一个错误,需要删除的条目,输入
1
| firewall-cmd --remove-port=port-number/tcp --permanent
|
重新加载防火墙:
1 2 3 4
| firewall-cmd --reload firewall-cmd --list-all vim /etc/firewalld/zones/public.xml
|
然后重新启动Docker.
1
| systemctl restart docker
|
然后在将用作Swarm工作程序的每个节点上,执行以下命令:
1 2 3 4 5 6 7
| firewall-cmd --add-port=22/tcp --permanent firewall-cmd --add-port=2376/tcp --permanent firewall-cmd --add-port=7946/tcp --permanent firewall-cmd --add-port=7946/udp --permanent firewall-cmd --add-port=4789/udp --permanent firewall-cmd --reload systemctl restart docker
|
关闭防火墙
1 2 3 4
| systemctl stop firewalld systemctl disable firewalld firewall-cmd --zone=public --query-service=ssh
|
IPTables
要在任何Linux发行版上使用IPtables,您必须首先卸载任何其他防火墙实用程序.如果您从FirewallD或UFW切换,请先卸载它们.
1 2
| apt-get purge ufw firewalld apt-get install iptables-persistent
|
接下来,使用此命令清除所有现有规则:
1
| netfilter-persistent flush
|
现在,您可以添加使用规则, iptables实用程序.第一组命令应该在将用作Swarm管理器的节点上执行.
1 2 3 4 5 6 7 8 9 10 11
| iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A INPUT -p tcp --dport 2376 -j ACCEPT iptables -A INPUT -p tcp --dport 2377 -j ACCEPT iptables -A INPUT -p tcp --dport 7946 -j ACCEPT iptables -A INPUT -p udp --dport 7946 -j ACCEPT iptables -A INPUT -p udp --dport 4789 -j ACCEPT netfilter-persistent save sudo systemctl restart docker
|
在将用作Swarm工作程序的节点上,执行以下命令:
1 2 3 4 5 6 7
| iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A INPUT -p tcp --dport 2376 -j ACCEPT iptables -A INPUT -p tcp --dport 7946 -j ACCEPT iptables -A INPUT -p udp --dport 7946 -j ACCEPT iptables -A INPUT -p udp --dport 4789 -j ACCEPT netfilter-persistent save sudo systemctl restart docker
|
如果您希望在使用此方法后切换到FirewallD或UFW,正确的方法是首先停止防火墙:
1 2 3 4 5 6 7 8 9
| sudo netfilter-persistent stop sudo netfilter-persistent flush sudo netfilter-persistent save
|
查看开启端口
1 2 3 4 5 6
| sudo nmap -sTU localhost sudo nmap -PS 192.168.1.222 nc -zv 45.76.0.178 22 22334
|