Eu encontrei uma solução. Eu fiz esta edição para /lib/systemd/system/ufw.service
:
$ diff -u ufw.service.orig ufw.service
--- ufw.service.orig 2018-05-26 13:45:48.696356561 +0100
+++ ufw.service 2018-05-26 13:46:04.443673265 +0100
@@ -2,7 +2,7 @@
Description=Uncomplicated firewall
Documentation=man:ufw(8)
DefaultDependencies=no
-Before=network.target
+After=network.target
[Service]
Type=oneshot
Portanto, isso faz com que ufw
inicie depois que a rede estiver ativa, e não antes dela. Isso parece fazer o truque - o ufw está sempre ativado depois de eu inicializar. Eu não sei se esta é a melhor maneira de fazer as coisas. Eu me preocupo que há uma pequena janela de tempo entre a rede iniciando e o firewall sendo iniciado ... mas pelo menos ele começa, o que é melhor do que antes!
Talvez alguém consiga uma solução melhor. Ou talvez esta seja a maneira correta de fazer as coisas - caso em que é um bug que o padrão é iniciado antes da rede?
Editar:
Uma solução ainda melhor é:
$ diff -u ufw.service.orig ufw.service
--- ufw.service.orig 2018-05-26 13:45:48.696356561 +0100
+++ ufw.service 2018-05-26 14:17:22.030681670 +0100
@@ -2,7 +2,7 @@
Description=Uncomplicated firewall
Documentation=man:ufw(8)
DefaultDependencies=no
-Before=network.target
+After=network-pre.target
[Service]
Type=oneshot
De acordo com esta página
o network-pre.target tem esse objetivo:
"Seu objetivo principal é o uso com serviços de firewall que desejam estabelecer um firewall antes que qualquer interface de rede seja ativada"
O que realmente me faz pensar por que não foi definido por padrão. Configurá-lo para esse valor parece resolver todos os meus problemas.