Provided by: fiaif_1.23.1-4_all bug

NAME

       zone.conf - fiaif zone configuration files

DESCRIPTION

       fiaif.conf  is the file that determines how zones should be set up in the firewall. A zone
       describes how traffic from other zones are allowed into  a  zone,  and  what  packets  are
       allowed  from  the  zone  itself.   Zones are based upon the interface and the network the
       interface is connected to. It is possible to have multiple zones  per  interface,  if  and
       only  if  the  interface  is  not  declared  public.  See  the  PUBLIC  variable  for more
       information.

       The general syntax of a configuration file is the same as for a bash(1) script,  in  which
       only variables should be present.

       The variables can be on three forms:

       VARIABLE
              This is a simple variable. It can only be assigned a single value.

       VARIABLE_FOO
              The  denotes  a variable sequence. The FOO can be replaced by any keyword, allowing
              multiple values to be specified.

       VARIABLE[N]
              A variable array. Any number of values can be specified by increasing  N  for  each
              value.

VARIABLES

   NAME
       Syntax: <name>

       Specify the name of the zone. This must be the same as specified in /etc/fiaif/fiaif.conf.

   DEV
       Syntax: <interface-name>

       Specifies the interface name in which this zone is connected.

   DYNAMIC
       Syntax: 0|1

       Specifies  whether  the IP of the interface is dynamic (e.g., obtained via DHCP or unknown
       when FIAIF is started) or not. Disabling this provides better security, but  this  is  not
       always an option given from ISPs.

   GLOBAL
       Syntax: 0|1

       Is  set  to one, any packets originating from IANA reserved networks are discarded (except
       those specified in the NET and NET_EXTRA variables).  This should be set on your  internet
       connection. If this is set to true, the interface cannot have multible zone definitions.

   IP
       Syntax: <IP address>

       The IP of the interface.  This is only necessary to specify if DYNAMIC=0.

   MASK
       Syntax: <network mask>

       The  network  mask  of the network connected to this interface.  This is only necessary to
       specify if DYNAMIC=0.  This information can be found be using the ifconfig command.

   NET
       Syntax: <ip address/networkmask>

       The network mask for the interface.  This is only necessary to specify if DYNAMIC=0.  This
       information can be found be using the ifconfig command.

   BCAST
       Syntax: <broadcast address>

       The  broadcast  address of the interface.  This is only necessary to specify if DYNAMIC=0.
       This information can be found be using the ifconfig command.

   IP_EXTRA
       Syntax: [IP]*

       Contains a list of additional IP addresses that the interface can receive. Extra IP's  for
       an interface is usually created by using interface aliases (e.g. eth0:0).

   NET_EXTRA
       Syntax: [IP/MASK]*

       A  list specifying any extra networks besides the NET variables that are connected to this
       zone (interface). The extra nets would normally be connected though other routers.

   DHCP_SERVER
       Syntax: <0|1>

       Set to '1' if the server should accept DHCP queries.  Only one zone per  interface  should
       have this enabled, since DHCP packets do not hold any valid destination address.

   INPUT[N]
       Syntax:       <ACCEPT|REJECT|DROP|LOG|ACCEPT_LOG|REJECT_NOLOG|DROP_NOLOG>       <protocol>
       [port<:port>[<,port>[:port]]*] ip/[mask]=>ip/[mask]

       The INPUT variable describes how packets are handled through the input chain.  Packets  on
       the  INPUT  chain  are  packets  coming  from  the  zone to the firewall itself. The first
       argument is how a matched packet is treated. Protocol and ports and ip/mask  are  used  to
       match  packets  (destination  port,  and  source=>destination  ip  address).  If  none are
       specified, the rule matches all packets. The port argument must only be specified  if  the
       protocol  is  udp,  tcp  or icmp When using these rules, a rule of thumb is only to accept
       specific packets, and to drop any not matched. The following line 1 accepts  HTTP-requests
       over the TCP protocol:

       INPUT[0]="ACCEPT tcp 80 0.0.0.0/0=>0.0.0.0/0"

       INPUT[1]="ACCEPT udp 1024:65535 0.0.0.0/0=>0.0.0.0/0"

       INPUT[2]="DROP ALL 0.0.0.0=>0.0.0.0"

   OUTPUT[N]
       Syntax:       <ACCEPT|REJECT|DROP|LOG|ACCEPT_LOG|REJECT_NOLOG|DROP_NOLOG>       <protocol>
       [port<:port>[<,port>[:port]]*] ip/[mask]=>ip/[mask]

       Like the INPUT[N] rule. Packets on the OUTPUT  chain  are  packets  originating  from  the
       firewall  itself going out into the zone itself.  ports are destination ports, and ip/mask
       is the source and destination ip/mask (if '=>' is not given, the ip is assumed to  be  the
       destination  ip).  The port argument must only be specified if the protocol is udp, tcp or
       icmp The following example drops all telnet packets over the tcp protocol, drops  any  udp
       packets, and allows any other send from the firewall itself.

       OUTPUT[0]="DROP tcp 21 0.0.0.0/0=>0.0.0.0/0"

       OUTPUT[1]="DROP udp ALL 0.0.0.0/0=>0.0.0.0/0"

       OUTPUT[2]="ACCEPT ALL 0.0.0.0/0=>0.0.0.0/0"

   FORWARD[N]
       Syntax:       <zone|ALL>       <ACCEPT|REJECT|DROP|LOG|ACCEPT_LOG|REJECT_NOLOG|DROP_NOLOG>
       <protocol[port<:port>[<,port>[:port]]*]> <ip/[mask]=>ip/[mask]>

       Use to specify how packets arriving from other zones are to be  treated.  If  protocol  or
       ports  and  ip/mask  is  not  specified,  then  ALL  is  assumed.  The  port specifies the
       destination port, and ip specifies the source and destination ip. The port  argument  must
       only be specified if the protocol is udp, tcp or icmp An example: A demilitarized zone may
       only accept HTTP requests from the internet (zone EXT). This would be specified by:

       FORWARD[0]="EXT ACCEPT tcp 80 0.0.0.0/0=>0.0.0.0/0"

       FORWARD[1]="ALL DROP ALL 0.0.0.0/0=>0.0.0.0/0"

   MARK[N]
       Syntax:      <zone|ALL>       <mark number>       <protocol[port<:port>[<,port>[:port]]*]>
       <ip/[mask]=>ip/[mask]>

       Use the MARK rules to set a MARK on packets passing through the firewall. This can then be
       used to determine how a packet is routed. The port argument must only be specified if  the
       protocol  is  udp,  tcp  or icmp If the source zone is ALL then all packets going into the
       zone are marked. If the source zone equals the zone-name of which the rule is in then only
       packets originating from the firewall are marked.

       Otherwise,  only  packets  routed  through the firewall are marked.  Example: Mark all tcp
       packets going into the zone with '1' and all udp packets with mark '2'.

       MARK[0]="ALL 1 tcp ALL 0.0.0.0/0=>0.0.0.0/0"

       MARK[1]="ALL 2 udp ALL 0.0.0.0/0=>0.0.0.0/0"

   REPLY_FOO
       Syntax: <zone> <type> <protocol [port[:port][<,port>[:port]]*]> <ip[/mask]=>ip[/mask]>

       Make special replies to packets. The type can be one of the following:

       icmp-net-unreachable,    icmp-host-unreachable,     icmp-port-unreachable,     icmp-proto-
       unreachable,  icmp-net-prohibited,  icmp-host-prohibited  or tcp-reset (Only valid for the
       TCP protocol).

       The zone argument specifies the source of the packet.

       This can be used, for  example,  to  disallow  authentication  requests,  but  instead  of
       dropping the packets, close the connection by sending a tcp-reset.

       REPLY_AUTH="EXT tcp-reset tcp auth 0.0.0.0/0=>0.0.0.0/0"

   MAC_DROP
       Syntax: [MAC_ADDRESS]*|[file]

       Disallow  any  communication  with  specified  MAC-addresses  in  this  zone.  Inserted on
       PREROUTING chain. If the value is a file, then each line in the file is treated as an  MAC
       address. Anything after a '#' is regarded as a comment and is ignored.

   IP_DROP
       Syntax: [IP/MASK]*|[file]

       Disallow  any  communication  with specified IP addresses in this zone.  If the value is a
       file, then each line in the file is treated as an ip address.  Anything  after  a  '#'  is
       regarded as a comment and is ignored.

   ECN_REMOVE
       Syntax: [IP/MASK]*|[file]

       Remove  the  ECN  bit  from  all packets destined to the specified servers (located in the
       zone). If the value is a file, then each line in the file is treated  as  an  ip  address.
       Anything after a '#' is regarded as a comment and is ignored.

   REDIRECT_FOO
       Syntax: <protocol[port[:port]]> <ip[/mask]=>ip[/mask]> <[ipaddr[,ipaddr]*]> [port]

       Alter the destination of packets.  The rule applies only for packets originating from this
       zone. Packets can be redirected to the firewall itself (127.0.0.1), to other zones or back
       into  the  zone  itself  (requires DYNAMIC==0 and GLOBAL==0). If packets are redirected to
       other zones, then remember to add a  FORWARD  rule  in  the  configuration  file  for  the
       destination  zone,  allowing  the  packets  to pass through. Please note, that redirecting
       packets back into the zone may cause serious network degradation.

       Example:

       REDIRECT_PROXY="tcp 80 0.0.0.0/0=>0.0.0.0/0 127.0.0.1 3128"

       All packets coming from the zone itself to port 80 are redirected to the  firewall  itself
       port 3128, and this line can be used to setup a transparent proxy.

   WATCH_IP
       Syntax: [IP]*|[file]

       Log  every  packet  coming  from or going to the specific IP addresses.  If the value is a
       file, then each line in the file is treated as an IP address.  Anything  after  a  '#'  is
       regarded as a comment and is ignored.

   SNAT[N]
       Syntax: <ZONE|ip> <protocol[port[:port][<,port>[:port]]*]> <ip[/mask]=>ip[/mask]>

       Change  the source address of a packet coming from this zone. If a ZONE is specified, then
       all packets are masqueraded to all ip addresses for the specified zone, specified  by  the
       IP  or  IP_EXTRA  directive,  in  a  round  robin  fashion. The last options specifies the
       protocol, port and original source and destination of the packets to be SNAT'ed.

       To use MASQUADING, where EXT is the zone for the internet use:

       SNAT[0]="EXT ALL 0.0.0.0/0=>0.0.0.0/0"

   LIMIT_FOO
       Syntax: <zone> <ACCEPT|REJECT|DROP|LOG|ACCEPT_LOG|REJECT_NOLOG|DROP_NOLOG> <limit>  <burt>
       <protocol[port<:port>[<,port>[:port]]*]> <ip[/mask]=>ip[/mask]>

       Limit number of packets. A LIMIT rule specifies how many packets are acceptable within the
       specified period of time. If more packets arrive, policy specifies how to handle these.

       zone: Is the zone from which the packet originates. This can be this zone itself.

       limit: Maximum average matching rate: specified as a number, with an  optional  ´/second´,
       ´/minute´, ´/hour´, or ´/day´ suffix.

       burst:  Maximum  initial  number  of packets to match: this number gets incremented by one
       every time the limit specified above is not reached, up to this number.

       protocol: The protocol: TCP|UDP|ICMP|ALL. This parameter is optional.  The  port  argument
       must only be specified if the protocol is udp, tcp or icmp

       ports:  If  protocol  is  tcp|udp:  A list of ports or a port range.  icmp: A list of icmp
       types separated by commas. This parameter is optional pending on the specified protocol.

       ip[/mask]=>ip[/mask] Specifies source address and optional destination address.  This  can
       only be specified if protocol is also specified.

       For example to limit number of echo requests (ping) from zone EXT, use:

       LIMIT_PING="EXT DROP 1/second 3 ICMP echo-request 0.0.0.0/0=>0.0.0.0/0"

   IPSET_FOO
       Syntax: <ip</mask>>[ip</mask>]*| <file>

       Specify  a  set  of  ip's  to be used in zone rules. Ip's specified can be either numbers,
       hostnames, networks or names of other ip sets (recursively). The name of the set  will  be
       the  name  occuring  after  IPSET_.  Ip sets is bound to a zone, and cannot be used across
       zones.  Currently, ip-sets can only be used in INPUT, OUTPUT, FORWARD, SNAT, REDIRECT  and
       MARK rules. If the ipset points to a file, then the file is read (relative to CONF_PATH ).
       The name of IP sets must not conflict with aliases defined in the file pointed to  by  the
       ALIASES directive in fiaif global configuration file.

       An example of the use of IP sets:

       IPSET_NAMESERVERS="1.2.3.4 1.2.3.5"

       INPUT[N]="ACCEPT tcp domain NAMESERVERS=>0.0.0.0/0"

       Which is equivalent to:

       INPUT[N]="ACCEPT tcp domain 1.2.3.4=>0.0.0.0/0"

       INPUT[N+1]="ACCEPT tcp domain 1.2.3.5=>0.0.0.0/0"

AUTHOR

       Anders Fugmann <anders(at)fugmann.net>

SEE ALSO

       fiaif(8), fiaif.conf(8), iptables(8), ifconfig(8)