# Is there a way to persist Traefik rules through firewalld reload?

**URL:** https://community.traefik.io/t/is-there-a-way-to-persist-traefik-rules-through-firewalld-reload/12358
**Category:** Traefik v2
**Tags:** docker, docker-swarm
**Created:** [November 5, 2021, 3:37pm UTC](https://community.traefik.io/t/is-there-a-way-to-persist-traefik-rules-through-firewalld-reload/12358 "2021-11-05T15:37:23Z")
**Posts on this page:** 2
**Page:** 1

<div class="post-metadata">

### Author: ![3ch01c](https://sea2.discourse-cdn.com/flex020/user_avatar/community.traefik.io/3ch01c/32/4465_2.png) [@3ch01c](https://community.traefik.io/u/3ch01c)
#### Post date: [November 5, 2021, 3:37pm UTC](https://community.traefik.io/t/is-there-a-way-to-persist-traefik-rules-through-firewalld-reload/12358/1 "2021-11-05T15:37:23Z")

</div>

# Environment

RHEL 8

```auto
$ cat /etc/redhat-release 
Red Hat Enterprise Linux release 8.4 (Ootpa)

```

Docker 20.10.9 (Swarm mode)

```auto
$ docker version
Client: Docker Engine - Community
 Version: 20.10.9
 API version: 1.41
 Go version: go1.16.8
 Git commit: c2ea9bc
 Built: Mon Oct 4 16:08:25 2021
 OS/Arch: linux/amd64
 Context: default
 Experimental: true

Server: Docker Engine - Community
 Engine:
  Version: 20.10.9
  API version: 1.41 (minimum version 1.12)
  Go version: go1.16.8
  Git commit: 79ea9d3
  Built: Mon Oct 4 16:06:48 2021
  OS/Arch: linux/amd64
  Experimental: false
 containerd:
  Version: 1.4.11
  GitCommit: 5b46e404f6b9f661a205e28d59c982d3634148f8
 runc:
  Version: 1.0.2
  GitCommit: v1.0.2-0-g52b36a2
 docker-init:
  Version: 0.19.0
  GitCommit: de40ad0

```

Traefik 2.5

```auto
$ docker exec -it $(docker ps -f name=example_reverse-proxy -q) traefik version
Version: 2.5.3
Codename: livarot
Go version: go1.17.1
Built: 2021-09-20T15:43:56Z
OS/Arch: linux/amd64

```

# Set up the deployment

Make a Traefik Quick Start deployment for Swarm mode.

```yml
# docker-compose.yml
version: '3'

services:
  reverse-proxy:
    # The official v2 Traefik docker image
    image: traefik:v2.5
    # Enables the web UI and tells Traefik to listen to docker
    command:
      - --api.insecure=true
      - --providers.docker
      - --providers.docker.swarmMode=true
      - --providers.docker.exposedbydefault=false
      - --entrypoints.http.address=:80
      - --accesslog
      - --log.level=DEBUG
    ports:
      # The HTTP port
      - "80:80"
      # The Web UI (enabled by --api.insecure=true)
      - "8080:8080"
    volumes:
      # So that Traefik can listen to the Docker events
      - /var/run/docker.sock:/var/run/docker.sock
    deploy:
      placement:
        constraints:
          - node.role == manager
      labels:
        traefik.enable: "true"
        traefik.docker.network: "example_default"
  whoami:
    # A container that exposes an API to show its IP address
    image: traefik/whoami
    deploy:
      labels:
        traefik.enable: "true"
        traefik.http.routers.whoami.rule: "Host(`whoami.docker.localhost`)"
        traefik.http.routers.whoami.entrypoints: http
        traefik.http.services.whoami.loadbalancer.server.port: "80"
        traefik.docker.network: "example_default"

```

Deploy it.

```auto
$ docker stack deploy -c docker-compose.yml example
Creating network example_default
Creating service example_reverse-proxy
Creating service example_whoami

```

Verify deployment status.

```auto
$ docker ps -af "label=com.docker.stack.namespace=example"
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
803fd46c403e traefik/whoami:latest "/whoami" 22 seconds ago Up 20 seconds 80/tcp example_whoami.1.bmeduo3gsjshcidh4gtsh1ugb
0b7cdd777212 traefik:v2.5 "/entrypoint.sh --ap…" 24 seconds ago Up 22 seconds 80/tcp example_reverse-proxy.1.klt5b7p4cea2fx9kipnzadt9w

```

Verify DOCKER-INGRESS firewall chain is configured.

```auto
$ sudo iptables -n -L DOCKER-INGRESS
Chain DOCKER-INGRESS (1 references)
target prot opt source destination         
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8080
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED tcp spt:8080
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED tcp spt:80
RETURN all -- 0.0.0.0/0 0.0.0.0/0           

```

Verify connectivity.

```auto
$ curl -v -H Host:whoami.docker.localhost http://127.0.0.1
* Rebuilt URL to: http://127.0.0.1/
* Uses proxy env variable no_proxy == '127.0.0.1,localhost,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16'
* Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to 127.0.0.1 (127.0.0.1) port 80 (#0)                                         
> GET / HTTP/1.1
> Host:whoami.docker.localhost
> User-Agent: curl/7.61.1
> Accept: */*
>
< HTTP/1.1 200 OK
< Content-Length: 376
< Content-Type: text/plain; charset=utf-8
< Date: Wed, 03 Nov 2021 17:37:44 GMT<
Hostname: 6f83977ba1b7
IP: 127.0.0.1
IP: 10.0.18.6
IP: 172.18.0.3
RemoteAddr: 10.0.18.3:36668
GET / HTTP/1.1
Host: whoami.docker.localhost
User-Agent: curl/7.61.1
Accept: */*
Accept-Encoding: gzip
X-Forwarded-For: 10.0.0.2
X-Forwarded-Host: whoami.docker.localhost
X-Forwarded-Port: 80
X-Forwarded-Proto: http
X-Forwarded-Server: ec90f31b38fb
X-Real-Ip: 10.0.0.2

* Connection #0 to host 127.0.0.1 left intact                                             

```

# Break it

Reload firewalld.

```auto
$ sudo firewall-cmd --reload
success

```

Verify the DOCKER-INGRESS chain was removed.

```auto
$ sudo iptables -n -L DOCKER-INGRESS
iptables: No chain/target/match by that name.

```

Verify lack of connectivity.

```auto
$ curl -v -H Host:whoami.docker.localhost http://127.0.0.1
* Rebuilt URL to: http://127.0.0.1/
* Uses proxy env variable no_proxy == '127.0.0.1,localhost,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16'
* Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to 127.0.0.1 (127.0.0.1) port 80 (#0)                                         
> GET / HTTP/1.1
> Host:whoami.docker.localhost
> User-Agent: curl/7.61.1
> Accept: */*
>

```

# Additional notes

Docker's firewalld zone persists on reload. Can Traefik use that?

```auto
$ sudo firewall-cmd --zone=docker --list-all                                                                                                            
docker (active)
  target: ACCEPT
  icmp-block-inversion: no
  interfaces: docker0 docker_gwbridge
  sources:
  services:
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

```

# Debug log

```auto
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:10:47Z" level=info msg="Configuration loaded from flags."
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:10:47Z" level=info msg="Traefik version 2.5.3 built on 2021-09-20T15:43:56Z"
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:10:47Z" level=debug msg="Static configuration loaded {\"global\":{\"checkNewVersion\":true},\"serversTransport\":{\"maxIdleConnsPerHost\":200},\"entryPoints\":{\"http\":{\"address\":\":80\",\"transport\":{\"lifeCycle\":{\"graceTimeOut\":\"10s\"},\"respondingTimeouts\":{\"idleTimeout\":\"3m0s\"}},\"forwardedHeaders\":{},\"http\":{},\"udp\":{\"timeout\":\"3s\"}},\"traefik\":{\"address\":\":8080\",\"transport\":{\"lifeCycle\":{\"graceTimeOut\":\"10s\"},\"respondingTimeouts\":{\"idleTimeout\":\"3m0s\"}},\"forwardedHeaders\":{},\"http\":{},\"udp\":{\"timeout\":\"3s\"}}},\"providers\":{\"providersThrottleDuration\":\"2s\",\"docker\":{\"watch\":true,\"endpoint\":\"unix:///var/run/docker.sock\",\"defaultRule\":\"Host(`{{ normalize .Name }}`)\",\"swarmMode\":true,\"swarmModeRefreshSeconds\":\"15s\"}},\"api\":{\"insecure\":true,\"dashboard\":true},\"log\":{\"level\":\"DEBUG\",\"format\":\"common\"},\"accessLog\":{\"format\":\"common\",\"filters\":{},\"fields\":{\"defaultMode\":\"keep\",\"headers\":{\"defaultMode\":\"drop\"}}},\"pilot\":{\"dashboard\":true}}"
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:10:47Z" level=info msg="\nStats collection is disabled.\nHelp us improve Traefik by turning this feature on :)\nMore details on: https://doc.traefik.io/traefik/contributing/data-collection/\n"
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:10:47Z" level=info msg="Starting provider aggregator.ProviderAggregator {}"
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:10:47Z" level=debug msg="Start TCP Server" entryPointName=traefik
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:10:47Z" level=debug msg="Start TCP Server" entryPointName=http
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:10:47Z" level=info msg="Starting provider *acme.ChallengeTLSALPN {\"Timeout\":4000000000}"
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:10:47Z" level=info msg="Starting provider *docker.Provider {\"watch\":true,\"endpoint\":\"unix:///var/run/docker.sock\",\"defaultRule\":\"Host(`{{ normalize .Name }}`)\",\"swarmMode\":true,\"swarmModeRefreshSeconds\":\"15s\"}"
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:10:47Z" level=info msg="Starting provider *traefik.Provider {}"
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:10:47Z" level=debug msg="Configuration received from provider internal: {\"http\":{\"routers\":{\"api\":{\"entryPoints\":[\"traefik\"],\"service\":\"api@internal\",\"rule\":\"PathPrefix(`/api`)\",\"priority\":2147483646},\"dashboard\":{\"entryPoints\":[\"traefik\"],\"middlewares\":[\"dashboard_redirect@internal\",\"dashboard_stripprefix@internal\"],\"service\":\"dashboard@internal\",\"rule\":\"PathPrefix(`/`)\",\"priority\":2147483645}},\"services\":{\"api\":{},\"dashboard\":{},\"noop\":{}},\"middlewares\":{\"dashboard_redirect\":{\"redirectRegex\":{\"regex\":\"^(http:\\\\/\\\\/(\\\\[[\\\\w:.]+\\\\]|[\\\\w\\\\._-]+)(:\\\\d+)?)\\\\/$\",\"replacement\":\"${1}/dashboard/\",\"permanent\":true}},\"dashboard_stripprefix\":{\"stripPrefix\":{\"prefixes\":[\"/dashboard/\",\"/dashboard\"]}}},\"serversTransports\":{\"default\":{\"maxIdleConnsPerHost\":200}}},\"tcp\":{},\"tls\":{}}" providerName=internal
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:10:47Z" level=debug msg="No default certificate, generating one" tlsStoreName=default
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:10:47Z" level=debug msg="Provider connection established with docker 20.10.9 (API 1.41)" providerName=docker
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:10:47Z" level=debug msg="Configuration received from provider docker: {\"http\":{\"routers\":{\"whoami\":{\"entryPoints\":[\"http\"],\"service\":\"whoami\",\"rule\":\"Host(`whoami.docker.localhost`)\"}},\"services\":{\"whoami\":{\"loadBalancer\":{\"servers\":[{\"url\":\"http://10.0.19.6:80\"}],\"passHostHeader\":true}}}},\"tcp\":{},\"udp\":{}}" providerName=docker
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:10:47Z" level=debug msg="Added outgoing tracing middleware api@internal" middlewareType=TracingForwarder entryPointName=traefik routerName=api@internal middlewareName=tracing
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:10:47Z" level=debug msg="Added outgoing tracing middleware dashboard@internal" entryPointName=traefik routerName=dashboard@internal middlewareName=tracing middlewareType=TracingForwarder
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:10:47Z" level=debug msg="Creating middleware" entryPointName=traefik routerName=dashboard@internal middlewareName=dashboard_stripprefix@internal middlewareType=StripPrefix
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:10:47Z" level=debug msg="Adding tracing to middleware" entryPointName=traefik routerName=dashboard@internal middlewareName=dashboard_stripprefix@internal
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:10:47Z" level=debug msg="Creating middleware" middlewareName=dashboard_redirect@internal middlewareType=RedirectRegex entryPointName=traefik routerName=dashboard@internal
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:10:47Z" level=debug msg="Setting up redirection from ^(http:\\/\\/(\\[[\\w:.]+\\]|[\\w\\._-]+)(:\\d+)?)\\/$ to ${1}/dashboard/" middlewareName=dashboard_redirect@internal middlewareType=RedirectRegex entryPointName=traefik routerName=dashboard@internal
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:10:47Z" level=debug msg="Adding tracing to middleware" routerName=dashboard@internal middlewareName=dashboard_redirect@internal entryPointName=traefik
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:10:47Z" level=debug msg="Creating middleware" middlewareName=traefik-internal-recovery middlewareType=Recovery entryPointName=traefik
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:10:47Z" level=debug msg="No default certificate, generating one" tlsStoreName=default
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:10:48Z" level=debug msg="Creating middleware" middlewareType=Pipelining entryPointName=http routerName=whoami@docker serviceName=whoami middlewareName=pipelining
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:10:48Z" level=debug msg="Creating load-balancer" entryPointName=http routerName=whoami@docker serviceName=whoami
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:10:48Z" level=debug msg="Creating server 0 http://10.0.19.6:80" entryPointName=http routerName=whoami@docker serviceName=whoami serverName=0
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:10:48Z" level=debug msg="child http://10.0.19.6:80 now UP"
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:10:48Z" level=debug msg="Propagating new UP status"
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:10:48Z" level=debug msg="Added outgoing tracing middleware whoami" middlewareType=TracingForwarder entryPointName=http routerName=whoami@docker middlewareName=tracing
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:10:48Z" level=debug msg="Creating middleware" middlewareName=traefik-internal-recovery middlewareType=Recovery entryPointName=http
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:10:48Z" level=debug msg="Added outgoing tracing middleware api@internal" entryPointName=traefik middlewareName=tracing middlewareType=TracingForwarder routerName=api@internal
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:10:48Z" level=debug msg="Added outgoing tracing middleware dashboard@internal" entryPointName=traefik routerName=dashboard@internal middlewareName=tracing middlewareType=TracingForwarder
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:10:48Z" level=debug msg="Creating middleware" entryPointName=traefik routerName=dashboard@internal middlewareName=dashboard_stripprefix@internal middlewareType=StripPrefix
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:10:48Z" level=debug msg="Adding tracing to middleware" entryPointName=traefik routerName=dashboard@internal middlewareName=dashboard_stripprefix@internal
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:10:48Z" level=debug msg="Creating middleware" routerName=dashboard@internal middlewareType=RedirectRegex middlewareName=dashboard_redirect@internal entryPointName=traefik
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:10:48Z" level=debug msg="Setting up redirection from ^(http:\\/\\/(\\[[\\w:.]+\\]|[\\w\\._-]+)(:\\d+)?)\\/$ to ${1}/dashboard/" entryPointName=traefik routerName=dashboard@internal middlewareType=RedirectRegex middlewareName=dashboard_redirect@internal
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:10:48Z" level=debug msg="Adding tracing to middleware" routerName=dashboard@internal middlewareName=dashboard_redirect@internal entryPointName=traefik
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:10:48Z" level=debug msg="Creating middleware" middlewareName=traefik-internal-recovery middlewareType=Recovery entryPointName=traefik
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:11:02Z" level=debug msg="Configuration received from provider docker: {\"http\":{\"routers\":{\"dashboard\":{\"service\":\"api@internal\",\"rule\":\"Host(`traefik.docker.localhost`) \\u0026\\u0026 (PathPrefix(`/api`) || PathPrefix(`/dashboard`))\"},\"whoami\":{\"entryPoints\":[\"http\"],\"service\":\"whoami\",\"rule\":\"Host(`whoami.docker.localhost`)\"}},\"services\":{\"dashboard\":{\"loadBalancer\":{\"servers\":[{\"url\":\"http://10.0.19.3:9999\"}],\"passHostHeader\":true}},\"whoami\":{\"loadBalancer\":{\"servers\":[{\"url\":\"http://10.0.19.6:80\"}],\"passHostHeader\":true}}}},\"tcp\":{},\"udp\":{}}" providerName=docker
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:11:02Z" level=debug msg="No entryPoint defined for this router, using the default one(s) instead: [http]" routerName=dashboard
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:11:02Z" level=debug msg="No default certificate, generating one" tlsStoreName=default
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:11:03Z" level=debug msg="Added outgoing tracing middleware api@internal" routerName=api@internal middlewareName=tracing middlewareType=TracingForwarder entryPointName=traefik
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:11:03Z" level=debug msg="Added outgoing tracing middleware dashboard@internal" entryPointName=traefik routerName=dashboard@internal middlewareName=tracing middlewareType=TracingForwarder
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:11:03Z" level=debug msg="Creating middleware" entryPointName=traefik routerName=dashboard@internal middlewareName=dashboard_stripprefix@internal middlewareType=StripPrefix
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:11:03Z" level=debug msg="Adding tracing to middleware" middlewareName=dashboard_stripprefix@internal entryPointName=traefik routerName=dashboard@internal
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:11:03Z" level=debug msg="Creating middleware" entryPointName=traefik routerName=dashboard@internal middlewareName=dashboard_redirect@internal middlewareType=RedirectRegex
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:11:03Z" level=debug msg="Setting up redirection from ^(http:\\/\\/(\\[[\\w:.]+\\]|[\\w\\._-]+)(:\\d+)?)\\/$ to ${1}/dashboard/" entryPointName=traefik routerName=dashboard@internal middlewareName=dashboard_redirect@internal middlewareType=RedirectRegex
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:11:03Z" level=debug msg="Adding tracing to middleware" entryPointName=traefik routerName=dashboard@internal middlewareName=dashboard_redirect@internal
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:11:03Z" level=debug msg="Creating middleware" entryPointName=traefik middlewareName=traefik-internal-recovery middlewareType=Recovery
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:11:03Z" level=debug msg="Creating middleware" entryPointName=http serviceName=whoami routerName=whoami@docker middlewareName=pipelining middlewareType=Pipelining
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:11:03Z" level=debug msg="Creating load-balancer" routerName=whoami@docker entryPointName=http serviceName=whoami
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:11:03Z" level=debug msg="Creating server 0 http://10.0.19.6:80" routerName=whoami@docker entryPointName=http serviceName=whoami serverName=0
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:11:03Z" level=debug msg="child http://10.0.19.6:80 now UP"
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:11:03Z" level=debug msg="Propagating new UP status"
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:11:03Z" level=debug msg="Added outgoing tracing middleware whoami" routerName=whoami@docker middlewareName=tracing middlewareType=TracingForwarder entryPointName=http
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:11:03Z" level=debug msg="Added outgoing tracing middleware api@internal" entryPointName=http routerName=dashboard@docker middlewareName=tracing middlewareType=TracingForwarder
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:11:03Z" level=debug msg="Creating middleware" middlewareName=traefik-internal-recovery middlewareType=Recovery entryPointName=http
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:11:17Z" level=debug msg="Configuration received from provider docker: {\"http\":{\"routers\":{\"dashboard\":{\"service\":\"api@internal\",\"rule\":\"Host(`traefik.docker.localhost`) \\u0026\\u0026 (PathPrefix(`/api`) || PathPrefix(`/dashboard`))\"},\"whoami\":{\"entryPoints\":[\"http\"],\"service\":\"whoami\",\"rule\":\"Host(`whoami.docker.localhost`)\"}},\"services\":{\"dashboard\":{\"loadBalancer\":{\"servers\":[{\"url\":\"http://10.0.19.3:9999\"}],\"passHostHeader\":true}},\"whoami\":{\"loadBalancer\":{\"servers\":[{\"url\":\"http://10.0.19.6:80\"}],\"passHostHeader\":true}}}},\"tcp\":{},\"udp\":{}}" providerName=docker
example_reverse-proxy.1.rna6y8g2xsbh@localhost | time="2021-11-03T18:11:17Z" level=info msg="Skipping same configuration" providerName=docker

```

---

<div class="post-metadata">

### Author: ![rtribotte](https://sea2.discourse-cdn.com/flex020/user_avatar/community.traefik.io/rtribotte/32/1966_2.png) [@rtribotte](https://community.traefik.io/u/rtribotte)
#### Post date: [November 9, 2021, 8:09am UTC](https://community.traefik.io/t/is-there-a-way-to-persist-traefik-rules-through-firewalld-reload/12358/2 "2021-11-09T08:09:02Z")

</div>

Hello @3ch01c,

Thanks for your interest in Traefik!

> [@3ch01c](#):
>
> Docker's firewalld zone persists on reload. Can Traefik use that?

What are you expecting from Traefik?
