Firewalling jails and lo0
Niklaas Baudet von Gersdorff
stdin at niklaas.eu
Sun Aug 7 08:27:05 UTC 2016
Bjoern A. Zeeb [2016-08-06 20:02 +0000] :
> I am curious about this. Can you give me an (obfuscated) example? (if
> you want in private email)
-- $ jls -v
JID Hostname Path
Name State
CPUSetID
IP Address(es)
[...]
7 mx.box-hlm-03.niklaas.eu /usr/local/jails/smtp1
smtp1 ACTIVE
8
10.3.8.1
fd16:dcc0:f4cc:3::8:1
[...]
24 proxy1.box-hlm-03.niklaas.eu /usr/local/jails/proxy1
proxy1 ACTIVE
5
10.3.2.1
10.77.2.1
fd16:dcc0:f4cc:3::2:1
fd16:dcc0:f4cc:77::2:1
[...]
--
-- $ ifconfig lo1
lo1: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
options=600003<RXCSUM,TXCSUM,RXCSUM_IPV6,TXCSUM_IPV6>
[...]
inet 10.3.8.1 netmask 0xffff0000
inet6 fd16:dcc0:f4cc:3::8:1 prefixlen 64
[...]
inet 10.3.2.1 netmask 0xffff0000
inet 10.77.2.1 netmask 0xffff0000
inet6 fd16:dcc0:f4cc:3::2:1 prefixlen 64
inet6 fd16:dcc0:f4cc:77::2:1 prefixlen 64
[...]
nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
--
The following is a /full/ output:
-- $ ifconfig lo0
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
options=600003<RXCSUM,TXCSUM,RXCSUM_IPV6,TXCSUM_IPV6>
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2
inet 127.0.0.1 netmask 0xff000000
nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
--
So, as you can see, the jails only have IP addresses on lo1 and
none of them has one on lo0. To make that clear:
-- $ jexec smtp1 ifconfig
[...]
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
options=600003<RXCSUM,TXCSUM,RXCSUM_IPV6,TXCSUM_IPV6>
nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
lo1: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
options=600003<RXCSUM,TXCSUM,RXCSUM_IPV6,TXCSUM_IPV6>
inet 10.3.8.1 netmask 0xffff0000
inet6 fd16:dcc0:f4cc:3::8:1 prefixlen 64
nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
[...]
--
In my pf.conf I have the following. This is a simplified extract:
-- /etc/pf.conf
1 ext_if = vtnet0
2 jail_if = lo1
3
4 table <proxy> persist
5 table <mail> persist
6
7 set skip on lo0
8
9 nat on $ext_if from { <proxy> <mail> } to any -> <me>
10
11 block log all
12
13 pass out all keep state
14
15 pass in on $jail_if proto tcp from <proxy> to <mail> port { <some-ports> }
--
As you can see I have a principal block in line 11, and skip is
set on lo0 solely. That said, I block on lo1. Because of this,
I pass on lo1 in line 19. I thought this is necessary.
However, here comes the thing: Although the jails have IP addresses
attached to lo1 only, I can see traffic like the following:
-- $ tcpdump -nettti lo0 host 10.3.2.1
00:00:00.023424 AF IPv4 (2), length 64: 10.3.2.1.51096 > 10.3.8.1.9025: Flags [S], seq 4205430985, win 65535, options [mss 16344,nop,wscale 6,sackOK,TS val 349909592 ecr 0], length 0
00:00:00.000064 AF IPv4 (2), length 64: 10.3.8.1.9025 > 10.3.2.1.51096: Flags [S.], seq 3921176095, ack 4205430986, win 65535, options [mss 16344,nop,wscale 6,sackOK,TS val 3273771227 ecr 349909592], length 0
00:00:00.000023 AF IPv4 (2), length 56: 10.3.2.1.51096 > 10.3.8.1.9025: Flags [.], ack 1, win 1275, options [nop,nop,TS val 349909592 ecr 3273771227], length 0
--
-- $ tcpdump -nettti lo0 host fd16:dcc0:f4cc:3::8:1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo0, link-type NULL (BSD loopback), capture size 65535 bytes
00:00:00.000000 AF IPv6 (28), length 84: fd16:dcc0:f4cc:3::2:1.35851 > fd16:dcc0:f4cc:3::8:1.25: Flags [S], seq 3339315349, win 65535, options [mss 16324,nop,wscale 6,sackOK,TS val 352469079 ecr 0], length 0
00:00:00.000035 AF IPv6 (28), length 84: fd16:dcc0:f4cc:3::8:1.25 > fd16:dcc0:f4cc:3::2:1.35851: Flags [S.], seq 3726000680, ack 3339315350, win 65535, options [mss 16324,nop,wscale 6,sackOK,TS val 306734766 ecr 352469079], length 0
00:00:00.000044 AF IPv6 (28), length 76: fd16:dcc0:f4cc:3::2:1.35851 > fd16:dcc0:f4cc:3::8:1.25: Flags [.], ack 1, win 1274, options [nop,nop,TS val 352469079 ecr 306734766], length 0
00:00:05.060320 AF IPv6 (28), length 107: fd16:dcc0:f4cc:3::8:1.25 > fd16:dcc0:f4cc:3::2:1.35851: Flags [P.], seq 1:32, ack 1, win 1274, options [nop,nop,TS val 306739827 ecr 352469079], length 31
00:00:00.000113 AF IPv6 (28), length 76: fd16:dcc0:f4cc:3::8:1.25 > fd16:dcc0:f4cc:3::2:1.35851: Flags [F.], seq 32, ack 1, win 1274, options [nop,nop,TS val 306739827 ecr 352469079], length 0 00:00:00.000025 AF IPv6 (28), length 76: fd16:dcc0:f4cc:3::2:1.35851 > fd16:dcc0:f4cc:3::8:1.25: Flags [.], ack 33, win 1273, options [nop,nop,TS val 352474140 ecr 306739827], length 0 00:00:00.000413 AF IPv6 (28), length 76: fd16:dcc0:f4cc:3::2:1.35851 > fd16:dcc0:f4cc:3::8:1.25: Flags [F.], seq 1, ack 33, win 1274, options [nop,nop,TS val 352474140 ecr 306739827], length 0
--
As you can see, this is on lo0 although the jails don't have an
IP address on it. That said, restricting traffic on lo1 doesn't
make any sense because the jails use lo0 anyway.
> Are these ::1 connections, link-local addresses (unlikely as they should
> not be visible to jails), or full IP?
As you can see, they are full IP.
> And what’s the routing table entry in the base system for them?
Have a look at the following output of netstat (I removed some lines and cells):
-- $ netstat -rn
Routing tables
Internet:
Destination Gateway Flags Netif Expire
default < > UGS vtnet0
10.0.0.0/8 link#4 U tap0
10.3.2.1 link#3 UH lo1
10.3.8.1 link#3 UH lo1
10.77.2.1 link#3 UH lo1
127.0.0.1 link#2 UH lo0
Internet6:
Destination Gateway Flags Netif Expire
::/96 ::1 UGRS lo0
default < > UGS vtnet0
::1 link#2 UH lo0
::ffff:0.0.0.0/96 ::1 UGRS lo0
< > link#1 U vtnet0
< > link#1 UHS lo0
fd16:dcc0:f4cc:3::/64 link#3 U lo1
fd16:dcc0:f4cc:3::1 link#4 UHS lo0
fd16:dcc0:f4cc:3::2:1 link#3 UHS lo0
fd16:dcc0:f4cc:3::8:1 link#3 UHS lo0
fd16:dcc0:f4cc:77::/64 link#3 U lo1
fd16:dcc0:f4cc:77::2:1 link#3 UHS lo0
fe80::/10 ::1 UGRS lo0
fe80::%vtnet0/64 link#1 U vtnet0
fe80::< >%vtnet0 link#1 UHS lo0
fe80::%lo0/64 link#2 U lo0
fe80::1%lo0 link#2 UHS lo0
fe80::%tap0/64 link#4 U tap0
fe80::< >%tap0 link#4 UHS lo0
ff01::%vtnet0/32 < >%vtnet0 U vtnet0
ff01::%lo0/32 ::1 U lo0
ff01::%lo1/32 fd16:dcc0:f4cc:3::1:1 U lo1
ff01::%tap0/32 fd16:dcc0:f4cc:3::1 U tap0
ff02::/16 ::1 UGRS lo0
ff02::%vtnet0/32 < >%vtnet0 U vtnet0
ff02::%lo0/32 ::1 U lo0
ff02::%lo1/32 fd16:dcc0:f4cc:3::1:1 U lo1
ff02::%tap0/32 fd16:dcc0:f4cc:3::1 U tap0
--
> especially, do they have any IP address assigned to lo0 in them at all?
No, they don't.
Niklaas
More information about the freebsd-questions
mailing list