<div dir="ltr">&gt; Why do we need to use firewalld?<br><span class="gmail-"></span><div>I
 think that the initial trigger was the realization we&#39;re completely 
lacking ipv6 handling (which requires use of another, similar tool in 
ip6tables) in the current infrastructure. <br><br>Assessing the situation and reviewing the code for potential solutions led us to a couple of conclusions:<br><br></div><div>- Current flow is overly complex and should be reexamined regardless.<br></div><div>-
 The naive solution would be to duplicate the current flow for 
ip6tables, potentially leading to a lot of boilerplate code. I&#39;m sure 
there are more sophisticated solutions that could be implemented within 
the current infrastructure, but firewalld naturally came up as it allows
 us to handle both ipv4 and ipv6 via a single entity.<br></div><div>- As
 many of the services are already statically provided by either 
firewalld or 3rd party packages, we&#39;ll be able to merely pass names of 
services instead of complete rule sets.<br></div><div>- el7 is shipped with and makes use of firewalld by default.<br><br></div><div><span class="gmail-">&gt; What is the role of the central management in this regard?<br></span>I&#39;d like its role to be as insignificant as possible.<span class="gmail-"><br><br>&gt; -- Does it need to manage firewalls per host in detail? (are we acting as a firewall management system?)<br></span></div><div>No.
 Ansible was recently brought up as a solution/replacement to custom 
rules/service deployment, and other than that, there is no justification
 to having central management. The hosts have the required information 
to determine which services/rules should be enabled on them (via either 
vdsm or otopi)<br><br></div><span class="gmail-"><div>&gt; -- Does it need to apply a firewall template configuration to all the hosts? (all being identical)<br>&gt; -- Does it need to specify what services it wants the host to run and mention if the whole setup should be harden or not?<br></div></span><div>If
 we do decide to keep Engine&#39;s involvement, it should be as minimal as 
possible. Names of required services should be provided and that&#39;s it, 
in my opinion (and even that sounds wasteful).<span class="gmail-"><br><br>&gt; As far as I know, firewalld and 
iptables can co-exist, therefore, I do not see the need to &#39;upgrade&#39; or 
perform a hard replacement.<br>&gt; It can be done as an option (firewall-type: iptables/firewalld).<br>&gt; On upgrade it continues with the &#39;old&#39; definition and on new created host the default can be firewalld.<br>&gt;
 Is someone will explicitly want to change it from one to the other, we 
could go with remove/add approach to make things simpler.<br></span></div><div>firewalld doesn&#39;t play well with iptables&#39; service. Enabling firewalld disables iptables&#39; service and flushes its rules. <br></div><span class="gmail-"><div><br>&gt; I
 personally like the distributed approach, where the upper management 
layer passes what it wants to the lower layers with minimum information.
 Letting the lower levels<br>&gt; do the explicit work and figure out what they need to do.<br>&gt; If
 that was the original approach, Engine would have not &#39;care&#39; what type 
of firewall you use down at the host, you could even use a custom 
firewall, an NFV firewall solution<br>&gt; or anything that may pop up in the future.<br><div>&gt; Engine would have just said: I want libvirt, vdsm, ssh, etc... services opened (for access from ...).<br></div>&gt; Custom
 settings? That implies we manage firewalls. So either let the user add 
their special stuff on the hosts or provide them with a proper firewall 
management interface.<br></div></span>Agreed. I&#39;ll go even further 
and write that Engine shouldn&#39;t even state the services hosts require; a
 host should be self aware of the services it needs to use based on the 
relevant configuration (e.g. if gluster is supported in the cluster, 
enable gluster service)</div><div class="gmail_extra"><br><div class="gmail_quote">On Sun, Mar 26, 2017 at 4:47 PM, Edward Haas <span dir="ltr">&lt;<a href="mailto:ehaas@redhat.com" target="_blank">ehaas@redhat.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><div><div><div><div><div><div><div><div><div><div><br>I may be too naive, but it all sounds too complex to me.<br>Is there any reference to the use cases of the firewall configuration?<br><br></div><div>Few questions:<br></div>- Why do we need to use firewalld?<br></div>- What is the role of the central management in this regard?<br>-- Does it need to manage firewalls per host in detail? (are we acting as a firewall management system?)<br>-- Does it need to apply a firewall template configuration to all the hosts? (all being identical)<br></div>-- Does it need to specify what services it wants the host to run and mention if the whole setup should be harden or not?<br><br></div>As far as I know, firewalld and iptables can co-exist, therefore, I do not see the need to &#39;upgrade&#39; or perform a hard replacement.<br></div>It can be done as an option (firewall-type: iptables/firewalld).<br>On upgrade it continues with the &#39;old&#39; definition and on new created host the default can be firewalld.<br></div>Is someone will explicitly want to change it from one to the other, we could go with remove/add approach to make things simpler.<br><br></div>I personally like the distributed approach, where the upper management layer passes what it wants to the lower layers with minimum information. Letting the lower levels<br></div>do the explicit work and figure out what they need to do.<br></div>If that was the original approach, Engine would have not &#39;care&#39; what type of firewall you use down at the host, you could even use a custom firewall, an NFV firewall solution<br></div>or anything that may pop up in the future.<br></div><div>Engine would have just said: I want libvirt, vdsm, ssh, etc... services opened (for access from ...).<br></div><div>Custom settings? That implies we manage firewalls. So either let the user add their special stuff on the hosts or provide them with a proper firewall management interface.<br></div><div><br></div>Thanks,<br></div>Edy.<br><div><div><div><div><div><div><div><div><div><div><div><div><div><div><br></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div><div class="gmail_extra"><br><div class="gmail_quote"><div><div class="h5">On Sun, Mar 26, 2017 at 2:57 PM, Yedidyah Bar David <span dir="ltr">&lt;<a href="mailto:didi@redhat.com" target="_blank">didi@redhat.com</a>&gt;</span> wrote:<br></div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5"><span>On Sun, Mar 26, 2017 at 2:12 PM, Oved Ourfali &lt;<a href="mailto:oourfali@redhat.com" target="_blank">oourfali@redhat.com</a>&gt; wrote:<br>
&gt;<br>
&gt;<br>
&gt; On Sun, Mar 26, 2017 at 2:08 PM, Leon Goldberg &lt;<a href="mailto:lgoldber@redhat.com" target="_blank">lgoldber@redhat.com</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; Hey Oved,<br>
&gt;&gt;<br>
&gt;&gt; I don&#39;t think completely moving away from iptables is foreseeable at this<br>
&gt;&gt; point, but I could be of course wrong. Either way, upgrading still needs to<br>
&gt;&gt; be thought of.<br>
&gt;&gt;<br>
&gt;<br>
&gt; I see.<br>
&gt;<br>
&gt;&gt;<br>
&gt;&gt; By stating that the current infrastructure is complex, I was referring to<br>
&gt;&gt; the entire chain of storing rules in the database, fetching them using a<br>
&gt;&gt; dedicated deployment class consisting of include/exclude logic, sending them<br>
&gt;&gt; over, unpacking, deploying...<br>
&gt;&gt;<br>
&gt;&gt; This procedure involves a lot of code that could be made redundant if the<br>
&gt;&gt; required logic is present in the host, which to me seems favorable. It of<br>
&gt;&gt; course entails other potential difficulties, primarily in the form of custom<br>
&gt;&gt; services.<br>
&gt;&gt;<br>
&gt;&gt; I don&#39;t think otopi&#39;s firewalld plugin is any more complex than the<br>
&gt;&gt; potential code that will have to be written in vdsm-tool, however it<br>
&gt;&gt; currently expects the data generated by aforementioned chain. The hybrid<br>
&gt;&gt; approach briefly touches on simplifying Engine&#39;s involvement while retaining<br>
&gt;&gt; use of otopi&#39;s plugin.<br>
&gt;&gt;<br>
&gt;<br>
&gt; Okay. I think that writing a new plugin for firewalld is indeed a good<br>
&gt; option, whether you &quot;refactor&quot; the engine side or not.<br>
<br>
</span>otopi already has a &#39;firewalld&#39; plugin. It&#39;s already in use, at least<br>
by engine-setup, so we should be a bit careful if we want to change it.<br>
Not preventing/objecting anything, just mentioning.<br>
<br>
This plugin&#39;s interface currently only takes XML-content as input.<br>
It has no place for configuring existing firewalld services presumably<br>
already provided elsewhere (by firewalld itself or 3rd party packages,<br>
such as vdsm). So if we go that route we probably want to extend this<br>
interface to allow passing service names and rely on them being defined<br>
elsewhere.<br>
<br>
A related issue is that for engine-setup, the _input_ is currently<br>
firewalld xml content, and if users choose to configure &#39;iptables&#39;,<br>
this is parsed to generate iptables rules. This is currently an engine-setup<br>
issue only, but will affect also host deploy flow if we decided to<br>
allow passing service names (without their xml content) and still keep<br>
compatibility to current state and allow configuring iptables on the<br>
host. We&#39;ll then be there in the same situation we are at with engine-setup.<br>
See also <a href="https://bugzilla.redhat.com/1432354" rel="noreferrer" target="_blank">https://bugzilla.redhat.com/14<wbr>32354</a> . An alternative is obviously<br>
deciding to remove iptables support and support only firewalld, but this<br>
is a rather radical change for users, imo.<br>
<br>
See also this for some of the existing behavior of engine-setup:<br>
<br>
<a href="https://bugzilla.redhat.com/show_bug.cgi?id=1024707#c9" rel="noreferrer" target="_blank">https://bugzilla.redhat.com/sh<wbr>ow_bug.cgi?id=1024707#c9</a><br>
<br>
IMO we first need to decide what we want, then how to do that. IMO the<br>
questions we have re &quot;what we want&quot; are, more-or-less:<br>
<br>
1. Do we want to support in some version X both iptables and firewalld, or<br>
is it ok to stop support for iptables and support only firewalld without<br>
overlap? If so, do we handle upgrades, and how?<br>
<br>
2. Do we want to support custom firewalld xml to be configured on the<br>
host by us? Or is it ok to only support choosing among existing services,<br>
which will need to be added to the host using other means (packaged by<br>
firewalld, packaged by 3rd parties, added manually by users)?<br>
<br>
3. Opposite of (2.): Do we want to support firewalld services that are<br>
added to the host using other means (see there)? Obviously we do, but:<br>
If we do, do we still want to support also iptables (see (1.))? And if<br>
so, what do we want to then happen?<br>
<br>
(2.) and (3.) are not conflicting, each needs its own answer.<br>
<br>
My (thoughts about) answers:<br>
<br>
1. If done well enough, and considerably simplifies things, I think it&#39;s<br>
ok to jump directly from &quot;only iptables&quot; to &quot;only firewalld&quot;, but then<br>
we should announce this ahead of time to give users time to plan/prepare.<br>
If it&#39;s not too costly, I&#39;d prefer to support both for the foreseeable<br>
future, though.<br>
<br>
2. Latter option here is problematic, if we need/want to allow<br>
customizing services during deploy. E.g. suppose that one day we want<br>
to make the vdsm port configurable. It will be nice if this can be done<br>
by only changing things on the engine, without having to distribute<br>
changes (conf and/or packages) to all hosts before host-deploy.<br>
I&#39;d say we can go a long way here by having a strict requirement from<br>
all services that we need/want on hosts to have official IANA-registered<br>
port numbers - then, it&#39;s imo much easier to tell users &quot;If you want to<br>
change the port for service X, you have to (long list of complex actions<br>
goes here)&quot;. Currently, where services are not registered, we risk<br>
conflicts with existing services, requiring the user to change ports -<br>
and so we can&#39;t make this process too difficult. No idea how important<br>
this is in practice.<br>
<br>
3. Not sure :-( I&#39;d say that if we want to support both iptables and<br>
firewalld together, and support both &quot;xml in engine&quot; and &quot;xml in host&quot;,<br>
then it might be ok if the custom rules/services will not automatically<br>
apply to both iptables and firewalld. Meaning - you can set both custom<br>
iptables rules and firewalld services, but it&#39;s up to you to make sure<br>
they actually do the same thing if that&#39;s important to you.<br>
<br>
Bottom line: I think we should summarize the open questions in a way<br>
that will make it clear to users how each answer will affect them, and<br>
ask what they think. Leon already started doing this [1], I only saw<br>
one reply. Perhaps this means that users do not care that much, and<br>
expect us to just decide and tell them what we decided (and always to<br>
keep the option to disable this feature, as is possible today, and do<br>
this themselves, if our choice of solution does not fit their needs).<br>
<br>
I know this is way too loooong, sorry. Feel free to ignore, but then<br>
please ask simpler questions if you want shorter answers :-)<br>
<br>
[1] <a href="http://lists.ovirt.org/pipermail/users/2017-March/080600.html" rel="noreferrer" target="_blank">http://lists.ovirt.org/piperma<wbr>il/users/2017-March/080600.<wbr>html</a><br>
<div class="m_7457438430304499453HOEnZb"><div class="m_7457438430304499453h5"><br>
&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; On Sun, Mar 26, 2017 at 1:40 PM, Oved Ourfali &lt;<a href="mailto:oourfali@redhat.com" target="_blank">oourfali@redhat.com</a>&gt; wrote:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; top-posting:<br>
&gt;&gt;&gt; You need to also consider how upgrade will be handled, right?<br>
&gt;&gt;&gt; Or iptables will still remain supported?<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Also, see some comments inline.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Regards,<br>
&gt;&gt;&gt; Oved<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; On Sun, Mar 26, 2017 at 1:33 PM, Leon Goldberg &lt;<a href="mailto:lgoldber@redhat.com" target="_blank">lgoldber@redhat.com</a>&gt;<br>
&gt;&gt;&gt; wrote:<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Hey,<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; We&#39;re looking to migrate from iptables to firewalld. We came up with a<br>
&gt;&gt;&gt;&gt; couple of possible approaches we&#39;d like opinions on. I&#39;ll list the options<br>
&gt;&gt;&gt;&gt; first, and will<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; 1) Replicate existing flow:<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; As of date, iptable rules are inserted in the database via SQL config<br>
&gt;&gt;&gt;&gt; files. During host deployment, VdsDeployIptablesUnit adds the required rules<br>
&gt;&gt;&gt;&gt; (based on cluster/firewall configuration) to the deployment configuration,<br>
&gt;&gt;&gt;&gt; en route to being deployed on the host via otopi and its iptables plugin.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Pros:<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; - Reuse of existing infrastructure.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Cons:<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; - Current infrastructure is overly complex...<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Can you elaborate?<br>
&gt;&gt;&gt; I&#39;m not an otopi expert, but I think that otopi plugins shouldn&#39;t be more<br>
&gt;&gt;&gt; complex than what you describe in section #2, and the plugins were meant in<br>
&gt;&gt;&gt; order to handle such cases.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; - Many of the required services are provided by firewalld. Rewriting<br>
&gt;&gt;&gt;&gt; them is wasteful; specifying them (instead of providing actual service .xml<br>
&gt;&gt;&gt;&gt; content) will require adaptations on both (engine/host) sides. More on that<br>
&gt;&gt;&gt;&gt; later.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; 2) Host side based configuration:<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Essentially, all the required logic (aforementioned cluster/firewall<br>
&gt;&gt;&gt;&gt; configuration) to determine if/how firewalld should be deployed could be<br>
&gt;&gt;&gt;&gt; passed on to the host via ohd. Vdsm could take on the responsibility of<br>
&gt;&gt;&gt;&gt; examining the relevant configuration, and then creating and/or adding the<br>
&gt;&gt;&gt;&gt; required services (using vdsm.conf and vdsm-tool).<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; So here you replace the otopi plugin with relevant vdsm-tool code, and<br>
&gt;&gt;&gt; the question is why is that better?<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Pros:<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;  - Engine side involvement is greatly diminished.<br>
&gt;&gt;&gt;&gt;  - Simple(r).<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Cons:<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;  - Custom services/rules capabilities will have to be rethought and<br>
&gt;&gt;&gt;&gt; re-implemented (current infrastructure supports custom iptables rules by<br>
&gt;&gt;&gt;&gt; being specified in the SQL config file).<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; 3) Some other hybrid approach:<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; If we&#39;re able to guarantee all the required firewalld services are<br>
&gt;&gt;&gt;&gt; statically provided one way or the other, the current procedure could be<br>
&gt;&gt;&gt;&gt; replicated and be made more simpler. Instead of providing xml content in the<br>
&gt;&gt;&gt;&gt; form of strings, service names could be supplied. The responsibility of<br>
&gt;&gt;&gt;&gt; actual service deployment becomes easier, and could be left to otopi (with<br>
&gt;&gt;&gt;&gt; the appropriate modifications) or switched over to vdsm.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; --<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Regardless, usage of statically provided vs. dynamically created<br>
&gt;&gt;&gt;&gt; services remains an open question. I think we&#39;d like to avoid implementing<br>
&gt;&gt;&gt;&gt; logic that ask whether some service is provided (and then write it if it<br>
&gt;&gt;&gt;&gt; isn&#39;t...), and so choosing between the dynamic and static approaches is also<br>
&gt;&gt;&gt;&gt; needed. Using the static approach, guaranteeing all services are provided<br>
&gt;&gt;&gt;&gt; will be required.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; I do believe guaranteeing the presence of all required services is worth<br>
&gt;&gt;&gt;&gt; it, however custom services aren&#39;t going to be naively compatible, and we&#39;ll<br>
&gt;&gt;&gt;&gt; still have to use similar mechanism as described in #1 (service string -&gt;<br>
&gt;&gt;&gt;&gt; .xml -&gt; addition of service name to active zone).<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Your thoughts are welcome.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Thanks,<br>
&gt;&gt;&gt;&gt; Leon<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;<br>
&gt;<br>
<br>
<br>
<br>
</div></div></div></div><span class="HOEnZb"><font color="#888888"><span class="m_7457438430304499453HOEnZb"><font color="#888888">--<br>
Didi<br>
______________________________<wbr>_________________<br>
Devel mailing list<br>
<a href="mailto:Devel@ovirt.org" target="_blank">Devel@ovirt.org</a><br>
<a href="http://lists.ovirt.org/mailman/listinfo/devel" rel="noreferrer" target="_blank">http://lists.ovirt.org/mailman<wbr>/listinfo/devel</a><br>
</font></span></font></span></blockquote></div><br></div>
<br>______________________________<wbr>_________________<br>
Devel mailing list<br>
<a href="mailto:Devel@ovirt.org">Devel@ovirt.org</a><br>
<a href="http://lists.ovirt.org/mailman/listinfo/devel" rel="noreferrer" target="_blank">http://lists.ovirt.org/<wbr>mailman/listinfo/devel</a><br></blockquote></div><br></div>