mirror of
https://gitlab.com/shorewall/code.git
synced 2024-11-27 01:53:27 +01:00
24721e01b6
Signed-off-by: Tom Eastep <teastep@shorewall.net>
239 lines
8.7 KiB
XML
239 lines
8.7 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
|
|
"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
|
|
<refentry>
|
|
<refmeta>
|
|
<refentrytitle>shorewall-nat</refentrytitle>
|
|
|
|
<manvolnum>5</manvolnum>
|
|
|
|
<refmiscinfo>Configuration Files</refmiscinfo>
|
|
</refmeta>
|
|
|
|
<refnamediv>
|
|
<refname>nat</refname>
|
|
|
|
<refpurpose>Shorewall one-to-one NAT file</refpurpose>
|
|
</refnamediv>
|
|
|
|
<refsynopsisdiv>
|
|
<cmdsynopsis>
|
|
<command>/etc/shorewall/nat</command>
|
|
</cmdsynopsis>
|
|
</refsynopsisdiv>
|
|
|
|
<refsect1>
|
|
<title>Description</title>
|
|
|
|
<para>This file is used to define one-to-one Network Address Translation
|
|
(NAT).</para>
|
|
|
|
<warning>
|
|
<para>If all you want to do is simple port forwarding, do NOT use this
|
|
file. See <ulink
|
|
url="/FAQ.htm#faq1">http://www.shorewall.net/FAQ.htm#faq1</ulink>. Also,
|
|
in many cases, Proxy ARP (<ulink
|
|
url="/manpages/shorewall-proxyarp.html">shorewall-proxyarp</ulink>(5))
|
|
is a better solution that one-to-one NAT.</para>
|
|
</warning>
|
|
|
|
<para>The columns in the file are as follows (where the column name is
|
|
followed by a different name in parentheses, the different name is used in
|
|
the alternate specification syntax).</para>
|
|
|
|
<variablelist>
|
|
<varlistentry>
|
|
<term><emphasis role="bold">EXTERNAL</emphasis> -
|
|
{<emphasis>address</emphasis>|[?]COMMENT}</term>
|
|
|
|
<listitem>
|
|
<para>External IP Address - this should NOT be the primary IP
|
|
address of the interface named in the next column and must not be a
|
|
DNS Name.</para>
|
|
|
|
<para>If you put COMMENT in this column, the rest of the line will
|
|
be attached as a comment to the Netfilter rule(s) generated by the
|
|
following entries in the file. The comment will appear delimited by
|
|
"/* ... */" in the output of "shorewall show nat"</para>
|
|
|
|
<para>To stop the comment from being attached to further rules,
|
|
simply include COMMENT on a line by itself.</para>
|
|
|
|
<note>
|
|
<para>Beginning with Shorewall 4.5.11, ?COMMENT is a synonym for
|
|
COMMENT and is preferred.</para>
|
|
</note>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><emphasis role="bold">INTERFACE</emphasis> -
|
|
<emphasis>interfacelist</emphasis>[<emphasis
|
|
role="bold">:</emphasis>[<emphasis>digit</emphasis>]]</term>
|
|
|
|
<listitem>
|
|
<para>Interfaces that have the <emphasis
|
|
role="bold">EXTERNAL</emphasis> address. If ADD_IP_ALIASES=Yes in
|
|
<ulink
|
|
url="/manpages/shorewall.conf.html">shorewall.conf</ulink>(5),
|
|
Shorewall will automatically add the EXTERNAL address to this
|
|
interface. Also if ADD_IP_ALIASES=Yes, you may follow the interface
|
|
name with ":" and a <emphasis>digit</emphasis> to indicate that you
|
|
want Shorewall to add the alias with this name (e.g., "eth0:0").
|
|
That allows you to see the alias with ifconfig. <emphasis
|
|
role="bold">That is the only thing that this name is good for -- you
|
|
cannot use it anywhere else in your Shorewall configuration.
|
|
</emphasis></para>
|
|
|
|
<para>Each interface must match an entry in <ulink
|
|
url="/manpages/shorewall-interfaces.html">shorewall-interfaces</ulink>(5).
|
|
Shorewall allows loose matches to wildcard entries in <ulink
|
|
url="/manpages/shorewall-interfaces.html">shorewall-interfaces</ulink>(5).
|
|
For example, <filename class="devicefile">ppp0</filename> in this
|
|
file will match a <ulink
|
|
url="/manpages/shorewall-interfaces.html">shorewall-interfaces</ulink>(5)
|
|
entry that defines <filename
|
|
class="devicefile">ppp+</filename>.</para>
|
|
|
|
<para>If you want to override ADD_IP_ALIASES=Yes for a particular
|
|
entry, follow the interface name with ":" and no digit (e.g.,
|
|
"eth0:").</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><emphasis role="bold">INTERNAL</emphasis> -
|
|
<emphasis>address</emphasis></term>
|
|
|
|
<listitem>
|
|
<para>Internal Address (must not be a DNS Name).</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><emphasis role="bold">ALL INTERFACES</emphasis> (allints) -
|
|
[<emphasis role="bold">Yes</emphasis>|<emphasis
|
|
role="bold">No</emphasis>]</term>
|
|
|
|
<listitem>
|
|
<para>If Yes or yes, NAT will be effective from all hosts. If No or
|
|
no (or left empty) then NAT will be effective only through the
|
|
interface named in the <emphasis role="bold">INTERFACE</emphasis>
|
|
column.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><emphasis role="bold">LOCAL</emphasis> - [<emphasis
|
|
role="bold">Yes</emphasis>|<emphasis role="bold">No</emphasis>]</term>
|
|
|
|
<listitem>
|
|
<para>If <emphasis role="bold">Yes</emphasis> or <emphasis
|
|
role="bold">yes</emphasis>, NAT will be effective from the firewall
|
|
system</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
</variablelist>
|
|
</refsect1>
|
|
|
|
<refsect1>
|
|
<title>RESTRICTIONS</title>
|
|
|
|
<para>DNAT rules always preempt one-to-one NAT rules. This has subtile
|
|
consequences when there are sub-zones on an
|
|
<replaceable>interface</replaceable>. Consider the following:</para>
|
|
|
|
<para><filename>/etc/shorewall/zones</filename>:</para>
|
|
|
|
<programlisting>#ZONE TYPE OPTIONS IN OUT
|
|
# OPTIONS OPTIONS
|
|
fw firewall
|
|
net ipv4
|
|
loc ipv4
|
|
smc:net ipv4</programlisting>
|
|
|
|
<para><filename>/etc/shorewall/interfaces</filename>:</para>
|
|
|
|
<programlisting>#ZONE INTERFACE OPTIONS
|
|
net eth0 dhcp,tcpflags,nosmurfs,routefilter,logmartians,sourceroute=0
|
|
loc eth1 tcpflags,nosmurfs,routefilter,logmartians</programlisting>
|
|
|
|
<para><filename>/etc/shorewall/hosts</filename>:</para>
|
|
|
|
<programlisting>#ZONE HOST(S) OPTIONS
|
|
smc eth0:10.1.10.0/24</programlisting>
|
|
|
|
<para><filename>/etc/shorewall/nat</filename>:</para>
|
|
|
|
<programlisting>#EXTERNAL INTERFACE INTERNAL ALL LOCAL
|
|
# INTERFACES
|
|
10.1.10.100 eth0 172.20.1.100
|
|
</programlisting>
|
|
|
|
<para>Note that the EXTERNAL address is in the <emphasis
|
|
role="bold">smc</emphasis> zone.</para>
|
|
|
|
<para><filename>/etc/shorewall/rules</filename>:</para>
|
|
|
|
<programlisting>#ACTION SOURCE DEST PROTO DEST SOURCE ORIGINAL RATE USER/ MARK CONNLIMIT TIME HEADERS SWITCH HELPER
|
|
# PORT PORT(S) DEST LIMIT GROUP
|
|
?SECTION ALL
|
|
?SECTION ESTABLISHED
|
|
?SECTION RELATED
|
|
?SECTION INVALID
|
|
?SECTION UNTRACKED
|
|
?SECTION NEW
|
|
...
|
|
DNAT net loc:172.20.1.4 tcp 80</programlisting>
|
|
|
|
<para>For the one-to-one NAT to work correctly in this configuration, one
|
|
of two approaches can be taken:</para>
|
|
|
|
<orderedlist>
|
|
<listitem>
|
|
<para>Define a CONTINUE policy with <emphasis
|
|
role="bold">smc</emphasis> as the SOURCE zone (preferred):</para>
|
|
|
|
<programlisting>#SOURCE DEST POLICY LOG LEVEL LIMIT:BURST
|
|
<emphasis role="bold">smc $FW CONTINUE</emphasis>
|
|
loc net ACCEPT
|
|
net all DROP info
|
|
# THE FOLLOWING POLICY MUST BE LAST
|
|
all all REJECT info
|
|
</programlisting>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>Set IMPLICIT_CONTINUE=Yes in <ulink
|
|
url="manpages/shorewall.conf.html">shorewall.conf(5)</ulink>.</para>
|
|
</listitem>
|
|
</orderedlist>
|
|
</refsect1>
|
|
|
|
<refsect1>
|
|
<title>FILES</title>
|
|
|
|
<para>/etc/shorewall/nat</para>
|
|
</refsect1>
|
|
|
|
<refsect1>
|
|
<title>See ALSO</title>
|
|
|
|
<para><ulink
|
|
url="/NAT.htm">http://www.shorewall.net/NAT.htm</ulink></para>
|
|
|
|
<para><ulink
|
|
url="/configuration_file_basics.htm#Pairs">http://www.shorewall.net/configuration_file_basics.htm#Pairs</ulink></para>
|
|
|
|
<para>shorewall(8), shorewall-accounting(5), shorewall-actions(5),
|
|
shorewall-blacklist(5), shorewall-hosts(5), shorewall_interfaces(5),
|
|
shorewall-ipsets(5), shorewall-maclist(5), shorewall-masq(5),
|
|
shorewall-netmap(5), shorewall-params(5), shorewall-policy(5),
|
|
shorewall-providers(5), shorewall-proxyarp(5), shorewall-rtrules(5),
|
|
shorewall-routestopped(5), shorewall-rules(5), shorewall.conf(5),
|
|
shorewall-secmarks(5), shorewall-tcclasses(5), shorewall-tcdevices(5),
|
|
shorewall-mangle(5), shorewall-tos(5), shorewall-tunnels(5),
|
|
shorewall-zones(5)</para>
|
|
</refsect1>
|
|
</refentry>
|