Zone-Policy例子¶
本地IPv4和IPv6¶
我们有三个网络。
WAN - 172.16.10.0/24, 2001:0DB8:0:9999::0/64
LAN - 192.168.100.0/24, 2001:0DB8:0:AAAA::0/64
DMZ - 192.168.200.0/24, 2001:0DB8:0:BBBB::0/64
这个具体的例子是一个路由器在棍子上,但非常容易适应无论你有多少网卡:
Internet - 192.168.200.100 - TCP/80
Internet - 192.168.200.100 - TCP/443
Internet - 192.168.200.100 - TCP/25
Internet - 192.168.200.100 - TCP/53
VyOS可作为DHCP、DNS转发器、NAT、路由器和防火墙。
192.168.200.200/2001:0DB8:0:BBBB::200是内部/外部DNS、web和mail (SMTP/IMAP)服务器。
192.168.100.10/2001:0DB8:0:AAAA::10为管理员控制台。它可以SSH到VyOS。
LAN和DMZ主机有基本的出站访问:Web、FTP、SSH。
LAN可以访问DMZ资源。
DMZ不能访问LAN资源。
入站WAN连接到DMZ主机。
VyOS接口被分配了他们各自网络的。1/:1地址。WAN在VLAN 10上,LAN在VLAN 20上,DMZ在VLAN 30上。
它看起来是这样的:
interfaces {
ethernet eth0 {
duplex auto
hw-id 00:53:ed:6e:2a:92
smp_affinity auto
speed auto
vif 10 {
address 172.16.10.1/24
address 2001:db8:0:9999::1/64
}
vif 20 {
address 192.168.100.1/24
address 2001:db8:0:AAAA::1/64
}
vif 30 {
address 192.168.200.1/24
address 2001:db8:0:BBBB::1/64
}
}
loopback lo {
}
}
Zones Basics¶
每个接口都被分配到一个安全区域。接口可以是物理的,也可以是虚拟的,如隧道(VPN、PPTP、GRE等),并且被完全相同的对待。
从A区域到b区域的交通流就是我所说的区域对方向。如。A->B和B->A是两个区域对目的地。
规则集是根据每个区域对-方向创建的。
我将规则集命名为表示它们所代表的区域对方向。如。ZoneA-ZoneB或ZoneB-ZoneA。LAN-DMZ DMZ-LAN。
在VyOS中,必须有唯一的规则集名称。如果出现重叠,我将在v6规则集的末尾添加一个“-6”。如。LAN-DMZ LAN-DMZ-6。这允许每个自动完成和唯一性。
在本例中,我们有4个区域。LAN, WAN, DMZ, Local。本地区域是防火墙本身。
如果您的计算机在LAN上,并且您需要SSH到您的VyOS框中,那么您需要一条规则在LAN- local规则集中允许它。如果您想从VyOS框访问一个网页,您需要一条规则在Local-LAN规则集中允许它。
在规则中,保持它们名称的一致性是有好处的。随着规则数量的增加,你的一致性越强,你的生活就会越轻松。
Rule 1 - State Established, Related
Rule 2 - State Invalid
Rule 100 - ICMP
Rule 200 - Web
Rule 300 - FTP
Rule 400 - NTP
Rule 500 - SMTP
Rule 600 - DNS
Rule 700 - DHCP
Rule 800 - SSH
Rule 900 - IMAPS
前两条规则用于处理VyOS和iptables的特性。
区域和规则集都有一个默认的动作语句。使用zone-policy时,缺省动作由zone-policy语句设置,由规则10000表示。
记录接受和拒绝的流量是很好的做法。当您试图排除连接问题时,它可以为您节省大量的麻烦。
要将日志记录添加到默认规则,执行以下操作:
set firewall name <ruleSet> enable-default-log
默认情况下,iptables不允许已建立会话的流量返回,因此必须显式允许返回。为此,我向每个规则集添加了两条规则。1允许建立的和相关的状态包通过,规则2丢弃并记录无效的状态包。我们将已建立的/相关的规则放在顶部,因为网络上的绝大多数流量都已建立,而无效规则是为了防止无效状态包被错误地与其他规则匹配。在高容量环境中,先列出最匹配的规则可以减少CPU负载。注意:我已经提交了一个bug,将此添加为默认操作。
“需要注意的是,您不希望将日志记录添加到已建立的状态规则中,因为您将记录每个会话的入站和出站包,而不仅仅是会话的启动。你的日志在很短的时间内就会非常庞大。”
在VyOS中,在将接口应用到zone-policy之前,必须先创建接口,在将其应用到zone-policy之前,必须创建规则集。
我首先创建/配置接口。为每个区域对方向(zone-pair-direction)构建规则集,其中至少包括三种状态规则。然后设置zone- policy。
区域不允许默认的accept动作;要么放弃,要么拒绝。记住这一点非常重要,因为如果您将接口应用到一个区域并提交,任何活动的连接都将被删除。具体来说,如果您通过SSH进入VyOS,并添加本地或连接到某个区域的接口,并且没有允许SSH和已建立会话的规则集,那么您将无法连接。
下面是在IPv4和IPv6中为这个例子创建的规则(可能不完整)。如果没有指定IP地址,则不显示源/目的地址。
WAN – DMZ:192.168.200.200 – tcp/80
WAN – DMZ:192.168.200.200 – tcp/443
WAN – DMZ:192.168.200.200 – tcp/25
WAN – DMZ:192.168.200.200 – tcp/53
WAN – DMZ:2001:0DB8:0:BBBB::200 – tcp/80
WAN – DMZ:2001:0DB8:0:BBBB::200 – tcp/443
WAN – DMZ:2001:0DB8:0:BBBB::200 – tcp/25
WAN – DMZ:2001:0DB8:0:BBBB::200 – tcp/53
DMZ - Local - tcp/53
DMZ - Local - tcp/123
DMZ - Local - tcp/67,68
LAN - Local - tcp/53
LAN - Local - tcp/123
LAN - Local - tcp/67,68
LAN:192.168.100.10 - Local - tcp/22
LAN:2001:0DB8:0:AAAA::10 - Local - tcp/22
LAN - WAN - tcp/80
LAN - WAN - tcp/443
LAN - WAN - tcp/22
LAN - WAN - tcp/20,21
DMZ - WAN - tcp/80
DMZ - WAN - tcp/443
DMZ - WAN - tcp/22
DMZ - WAN - tcp/20,21
DMZ - WAN - tcp/53
DMZ - WAN - udp/53
Local - WAN - tcp/80
Local - WAN - tcp/443
Local - WAN - tcp/20,21
Local - DMZ - tcp/25
Local - DMZ - tcp/67,68
Local - DMZ - tcp/53
Local - DMZ - udp/53
Local - LAN - tcp/67,68
LAN - DMZ - tcp/80
LAN - DMZ - tcp/443
LAN - DMZ - tcp/993
LAN:2001:0DB8:0:AAAA::10 - DMZ:2001:0DB8:0:BBBB::200 - tcp/22
LAN:192.168.100.10 - DMZ:192.168.200.200 - tcp/22
因为我们有4个区域,所以需要设置以下规则集。
Lan-wan
Lan-local
Lan-dmz
Wan-lan
Wan-local
Wan-dmz
Local-lan
Local-wan
Local-dmz
Dmz-lan
Dmz-wan
Dmz-local
即使这两个区域永远不会通信,创建区域对-方向规则集并设置enable-default-log也是一个好主意。这将允许您记录访问网络的尝试。如果没有它,您将永远看不到连接尝试。
这是三个基本规则的一个例子。
name wan-lan {
default-action drop
enable-default-log
rule 1 {
action accept
state {
established enable
related enable
}
}
rule 2 {
action drop
log enable
state {
invalid enable
}
}
}
下面是一个IPv6 DMZ-WAN规则集的例子。
ipv6-name dmz-wan-6 {
default-action drop
enable-default-log
rule 1 {
action accept
state {
established enable
related enable
}
}
rule 2 {
action drop
log enable
state {
invalid enable
}
rule 100 {
action accept
log enable
protocol ipv6-icmp
}
rule 200 {
action accept
destination {
port 80,443
}
log enable
protocol tcp
}
rule 300 {
action accept
destination {
port 20,21
}
log enable
protocol tcp
}
rule 500 {
action accept
destination {
port 25
}
log enable
protocol tcp
source {
address 2001:db8:0:BBBB::200
}
}
rule 600 {
action accept
destination {
port 53
}
log enable
protocol tcp_udp
source {
address 2001:db8:0:BBBB::200
}
}
rule 800 {
action accept
destination {
port 22
}
log enable
protocol tcp
}
}
构建了所有规则集之后,就需要创建zone-policy。
首先为每个区域设置接口和缺省动作。
set zone-policy zone dmz default-action drop
set zone-policy zone dmz interface eth0.30
在本例中,我们正在设置v6规则集,该规则集表示来自LAN的、目的地为DMZ的流量。由于zone-policy防火墙的语法有点笨拙,所以我把它向后考虑,以保持它的清晰。
set zone-policy zone dmz from lan firewall ipv6-name lan-dmz-6
DMZ-LAN策略是LAN-DMZ。 一次堆砌一堆时,您会感到有节奏。
最后,您将获得类似此配置的内容。 我删除了防火墙,接口和区域策略部分中的所有内容。 它足够长了。
IPv6隧道¶
如果您使用的是来自HE.net或其他网站的IPv6隧道,则除了具有两个WAN接口外,其基础是相同的。 一个针对v4,另一个针对v6。
您将拥有5个区域而不是4个区域,并且可以在隧道接口与LAN / DMZ区域(而不是WAN)之间配置v6规则集。
LAN, WAN, DMZ, local and TUN (隧道)
v6对将是:
lan-tun
lan-local
lan-dmz
tun-lan
tun-local
tun-dmz
local-lan
local-tun
local-dmz
dmz-lan
dmz-tun
dmz-local
请注意,没有人会去WAN,因为WAN上没有v6地址。
您必须在wan-local规则集上添加几个规则,以允许使用协议41。
就像是:
rule 400 {
action accept
destination {
address 172.16.10.1
}
log enable
protocol 41
source {
address ip.of.tunnel.broker
}
}