In current SW git sources, systemd service files assign dependency order with 
respect to the "network.target",

        cd ./code
        grep network `find . | grep service`                                
                ./Shorewall-init/shorewall-init.service:Before=network.target
                ./Shorewall6-lite/shorewall6-lite.service:After=network.target
                ./Shorewall-lite/shorewall-lite.service:After=network.target
                ./Shorewall/shorewall.service:After=network.target
                ./Shorewall6/shorewall6.service:After=network.target

As I undertstand intent, shorewall-init.service is to start/exec before any 
network functionality is up, and shorewall{,6}{,-lite}.service are to start 
after the network is up.

In the case of shorewall configs that have mandatory/required interface 
dependencies for multiple interfaces, "after the network is up" needs to be 
after ALL of the interfaces are up.

The dependency on network.target, however, enables the parallelized start after 
network functionality is 1st available -- i.e., after any/single interface is 
initialized.  If a multi-interface SW config to fail, e.g., on 'isusble' tests 
...

Reading @

        @ http://www.freedesktop.org/software/systemd/man/systemd.special.html


there are *three* network-related targets,

        network-pre.target

                This passive target unit may be pulled in by services that want 
to run before any network is set up, for example for the purpose of setting up 
a firewall. All network management software orders itself after this target, 
but does not pull it in.


        network.target

                This unit is supposed to indicate when network functionality is 
available, but it is only very weakly defined what that is supposed to mean, 
with one exception: at shutdown, a unit that is ordered after network.target 
will be stopped before the network -- to whatever level it might be set up then 
-- is shut down. It is hence useful when writing service files that require 
network access on shutdown, which should order themselves after this target, 
but not pull it in. Also see Running Services After the Network is up for more 
information. Also see network-online.target described above.

                systemd automatically adds dependencies of type After= for this 
target unit to all SysV init script service units with an LSB header referring 
to the "$network" facility.

        network-online.target

                Units that strictly require a configured network connection 
should pull in network-online.target (via a Wants= type dependency) and order 
themselves after it. This target unit is intended to pull in a service that 
delays further execution until the network is sufficiently set up. What 
precisely this requires is left to the implementation of the network managing 
service.

                Note the distinction between this unit and network.target. This 
unit is an active unit (i.e. pulled in by the consumer rather than the provider 
of this functionality) and pulls in a service which possibly adds substantial 
delays to further execution. In contrast, network.target is a passive unit 
(i.e. pulled in by the provider of the functionality, rather than the consumer) 
that usually does not delay execution much. Usually, network.target is part of 
the boot of most systems, while network-online.target is not, except when at 
least one unit requires it. Also see Running Services After the Network is up 
for more information.

                All mount units for remote network file systems automatically 
pull in this unit, and order themselves after it. Note that networking daemons 
that simply provide functionality to other hosts generally do not need to pull 
this in.

With those definitions, and the need to correctly accommodate multi-interface 
SW configs, is it not more appropriate to

                ./Shorewall-init/shorewall-init.service
                        ...
-                       Before=network.target
+                       Before=network-pre.target
                        ...

where network-pre target was added to specifically deal with fw 'leaks',

        [systemd-devel] [PATCH] Add a network-pre.target to avoid firewall leaks
        
http://lists.freedesktop.org/archives/systemd-devel/2014-June/019772.html

and

                ./Shorewall/shorewall.service
                        ...
-                       After=network.target
+                       After=network-online.target
                        ...

                ./Shorewall-lite/shorewall-lite.service
                        ...
-                       After=network.target
+                       After=network-online.target
                        ...

                ./Shorewall6/shorewall6.service
                        ...
-                       After=network.target
+                       After=network-online.target
                        ...

                ./Shorewall6-lite/shorewall6-lite.service
                        ...
-                       After=network.target
+                       After=network-online.target
                        ...


deal with the multi-interface use case

?

Locally, I'm currently using these changes -- in conjunction with additional 
fail2ban and openvpn dependencies -- and they eliminate the @boot SW startup 
failure due to missing/not-yet-initialized interfaces.

I do not yet know the issues this might cause, if any, with distro-packaging.


------------------------------------------------------------------------------
Meet PCI DSS 3.0 Compliance Requirements with EventLog Analyzer
Achieve PCI DSS 3.0 Compliant Status with Out-of-the-box PCI DSS Reports
Are you Audit-Ready for PCI DSS 3.0 Compliance? Download White paper
Comply to PCI DSS 3.0 Requirement 10 and 11.5 with EventLog Analyzer
http://pubads.g.doubleclick.net/gampad/clk?id=154622311&iu=/4140/ostg.clktrk
_______________________________________________
Shorewall-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/shorewall-users

Reply via email to