[Ferm] Parser error or user error ...
Auke Kok
sofar at foo-projects.org
Fri Jan 1 10:11:08 CET 2016
On 01/01/2016 01:07 AM, Bret Giddings wrote:
> HI Auke,
>
> On 31 December 2015 at 20:47, Auke Kok <sofar at foo-projects.org> wrote:
>>
>> On 12/31/2015 04:15 AM, Bret Giddings wrote:
>>> Hello,
>>>
>>> The following (somewhat contrived) snippet results in a warning message of
>>>
>>> Warning in test.ferm line 16: Chain is already specified
>>>
>>> table filter {
>>> chain FORWARD {
>>> policy DROP;
>>> # connection tracking
>>> mod state state INVALID DROP;
>>> mod state state (ESTABLISHED RELATED) ACCEPT;
>>>
>>> interface eth0 outerface eth1 @subchain eth0.eth1 {
>>> chain dns {
>>> daddr 1.2.3.4 ACCEPT;
>>> daddr 5.6.7.8 ACCEPT;
>>> }
>>> protocol (udp tcp) dport 53 realgoto dns;
>>> }
>>> }
>>> }
>>>
>>> This appears to be related to ferm detecting that the subchain
>>> ethic.eth1 is defined twice - however, I can't see that it is.
>>>
>>> Am i doing something wrong or is this a harmless parser bug?
>>
>> You have a chain nested inside a chain, which is wrong.
>>
>> I don't know what actually happens, I assume that the innermost chain will
>> be
>> used for the section where it is defined, but you should likely reorder your
>> lines
>> something like this (rough sketch, untested):
>>
>> table filter {
>> chain FORWARD {
>> policy DROP;
>> # connection tracking
>> mod state state INVALID DROP;
>> mod state state (ESTABLISHED RELATED) ACCEPT;
>>
>> }
>>
>> interface eth0 outerface eth1 @subchain eth0.eth1 {
>> chain dns {
>> daddr 1.2.3.4 ACCEPT;
>> daddr 5.6.7.8 ACCEPT;
>> }
>> chain FORWARD protocol (udp tcp) dport 53 realgoto dns;
>> }
>> }
>>
>> Auke
> I assume that you are saying that this is a ferm design decision?
> Given that the only concept of nesting chains in iptables is in how
> you call them, they are all top-level unscoped objects wherever they
> might be 'defined'.
>
> What I am actually trying to achieve is to be able to include
> (reusable) chain definitions dynamically via the include mechanism -
> but I can probably rejig to fit in line with the requirement.
>
> Curiously, if you do define multiple nested chains, ferm produces a
> warning but still outputs the right iptables commands to create and
> call said chains.
I didn't think the @subchain was the problem, I actually thought it was
the "chain dns" part.
The warning is a courtesy notice that you may have likely done something
you didn't want (in most cases). In your cases, it's a false positive.
Auke
More information about the Ferm
mailing list