linux防火墙设置

以在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:

1
2
ufw reload
ufw enable

这可能不是必需的,但是在任何时候更改并重新启动防火墙时,都不必重新启动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

关闭防火墙

1
ufw disable

FirewallD

FirewallD是Fedora,CentOS和基于它们的其他Linux发行版上的默认防火墙应用程序.但FirewallD也可用于其他Linux发行版,包括Ubuntu 16.04.

如果您选择使用FirewallD而不是UFW,请首先卸载UFW:

1
2
3
4
5
6
apt-get purge ufw
# 然后安装FirewallD:
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
# firewall-cmd --permanent --add-service=https

注意 :如果你犯了一个错误,需要删除的条目,输入

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
# 然后重新启动Docker.
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
# 然后可以切换到UFW或FirewallD.
查看开启端口
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
Share Comments