<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">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><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On Sun, Mar 26, 2017 at 2:12 PM, Oved Ourfali &lt;<a href="mailto:oourfali@redhat.com">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">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/<wbr>1432354</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/<wbr>show_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/<wbr>pipermail/users/2017-March/<wbr>080600.html</a><br>
<div class="HOEnZb"><div class="h5"><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">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">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><span class="HOEnZb"><font color="#888888">--<br>
Didi<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>
</font></span></blockquote></div><br></div>