[TriLUG] IPTables - disable NAT for a specific source/destination

Ron Kelley via TriLUG trilug at trilug.org
Wed Jun 6 11:15:39 EDT 2018


Thanks Aaron.  By chance, did the PDF diagram make it through the email alias?  I got a message stating the email awaits moderator approval.

As for the return path, you are correct.  We will add a static route on the 172.16 host to ensure it knows how to get back to the 192.168 VM.

Here are the iptable commands we are currently using. 

-------------------------
/sbin/iptables -F  -t nat
/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
/sbin/iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
/sbin/iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport ssh -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
/sbin/iptables -I INPUT -i eth1 -p udp --dport 67:68 --sport 67:68 -j ACCEPT

/sbin/iptables -t nat -A PREROUTING -s 172.16.100.10 -p tcp --dport 2211 -j DNAT --to-destination 192.168.100.11:22
/sbin/iptables -t nat -A PREROUTING -s 172.16.100.10 -p tcp --dport 2212 -j DNAT --to-destination 192.168.100.12:22
/sbin/iptables -t nat -A PREROUTING -s 172.16.100.10 -p tcp --dport 2213 -j DNAT --to-destination 192.168.100.13:22
/sbin/iptables -t nat -A PREROUTING -s 172.16.100.10 -p tcp --dport 2214 -j DNAT --to-destination 192.168.100.14:22
/sbin/iptables -t nat -A PREROUTING -s 172.16.100.10 -p tcp --dport 2215 -j DNAT --to-destination 192.168.100.15:22

/sbin/iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8811 -j DNAT --to-destination 192.168.100.11:80
/sbin/iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8812 -j DNAT --to-destination 192.168.100.12:80
/sbin/iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8813 -j DNAT --to-destination 192.168.100.13:80
/sbin/iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8814 -j DNAT --to-destination 192.168.100.14:80
/sbin/iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8815 -j DNAT --to-destination 192.168.100.15:80

-------------------------

As you can see, we have two sets of DNAT rules: one for ssh (top DNAT rules) and one for web traffic (bottom DNAT rules).  The goal is to insert a command that provides a connection from 192.168.100.13 to 172.16.100.13 w/out NAT.

From your example below, it seems I might need this command:
------------
/sbin/iptables -I POSTROUTING 1 -s 192.168.100.13 -d 172.16.100.13 -j RETURN
------------

If correct, where should we put this rule?  Above/below the PREROUTING rules or somewhere else?

Hope this makes it more clear.

Thanks for the assistance!


-Ron



> On Jun 6, 2018, at 11:05 AM, Aaron Joyner via TriLUG <trilug at trilug.org> wrote:
> 
> There's a simple answer to your question, but read on, because there is
> another problem you are likely to stumble on.  Packages traverse an
> iptables chain until they hit a terminating action, typically one of
> ACCEPT, DROP, or RETURN.  You can use this behavior to stop processing of
> the NAT table's POSTROUTING chain before it encounters the target which
> would apply the MASQUERADE behavior, only for that host.  Site-unseen, you
> can probably put insert a rule in position 1 to achieve that effect:
> 
> $ SRCIP = 192.168.100.42 # The IP in 192.168.100.0/24 that should not be
> translated
> $ iptables -I POSTROUTING 1 -s $SRCIP -j RETURN
> 
> Assuming you want $SRCIP to also be able to reach the internet through this
> NAT gatweay, you likely also want to add "-d 172.16.100.0/24" to that
> command, so that it doesn't NAT only when talking to hosts in that subnet.
> 
> This will get your packet from $SRCIP to the hosts in the 172.16.100.0/24
> subnet... but it's unlikely they know how to route back to $SRCIP.  You'll
> also need a route on hosts in the 172.16.100.0/24 subnet to direct their
> traffic to 192.168.100.0/24 (including response packets) to the gateway
> IP.  Assuming the gateway's IP is 172.16.100.1, that would look like this:
> 
> $ ip route add 192.168.100.0/24 via 172.16.100.1
> 
> Aaron S. Joyner
> 
> On Wed, Jun 6, 2018 at 9:14 AM, Brian Henning via TriLUG <trilug at trilug.org>
> wrote:
> 
>> I think there may be some confusion of terms going on here.
>> 
>> A "firewall" decides what packets to allow through or not.
>> A "router" handles modifying envelope data to get packets along to the
>> next hop.
>> 
>> NAT is a routing function.  iptables does both firewalling and routing.
>> 
>> Perhaps Huan is guessing your intent correctly (a DMZ), but that's not
>> what I'm getting from your description.
>> 
>> Can you describe the intent some more, perhaps give an example situation
>> where NAT is not what you want?
>> 
>> Cheers,
>> -Brian
>> 
>> 
>> -----Original Message-----
>> From: TriLUG [mailto:trilug-bounces+bhenning=pineresearch.com at trilug.org]
>> On Behalf Of Ron Kelley via TriLUG
>> Sent: Wednesday, June 06, 2018 8:24 AM
>> To: Triangle Linux Users Group General Discussion <trilug at trilug.org>
>> Subject: [TriLUG] IPTables - disable NAT for a specific source/destination
>> 
>> Greetings all,
>> 
>> I have a test bed running using IPTables on a RHEL 7 server (a “firewall”
>> machine).  This machine provides NAT services for an inside network to an
>> outside network.  For my test, the outside network has the IP space of
>> 172.16.100/0/24, and the inside network has the IP space of
>> 192.168.100.0/24.  The firewall has two IP Addresses:  172.16.100.10
>> (outside) and 192.168.100.1 (inside).
>> 
>> As you might expect, all VMs on the inside network go through the
>> firewall, and their source IP gets NAT’d to the 172.16.100.10 IP.  All
>> working well.
>> 
>> However, I have a unique requirement for one of the inside VMs to go
>> through the firewall w/out a NAT address.  Essentially, this particular
>> machine needs a “no nat” statement in the IPTables rules.  In this case,
>> the firewall is simply a router.
>> 
>> I have searched google for any sort of “no nat” example but can’t find
>> it.  Does anyone have a sample they can share?
>> 
>> 
>> Thanks,
>> 
>> -Ron
>> --
>> This message was sent to: Brian <bhenning at pineresearch.com> To
>> unsubscribe, send a blank message to trilug-leave at trilug.org from that
>> address.
>> TriLUG mailing list : https://www.trilug.org/mailman/listinfo/trilug
>> Unsubscribe or edit options on the web  : https://www.trilug.org/
>> mailman/options/trilug/bhenning%40pineresearch.com
>> Welcome to TriLUG: https://trilug.org/welcome
>> --
>> This message was sent to: Aaron S. Joyner <aaron at joyner.ws>
>> To unsubscribe, send a blank message to trilug-leave at trilug.org from that
>> address.
>> TriLUG mailing list : https://www.trilug.org/mailman/listinfo/trilug
>> Unsubscribe or edit options on the web  : https://www.trilug.org/
>> mailman/options/trilug/aaron%40joyner.ws
>> Welcome to TriLUG: https://trilug.org/welcome
>> 
> -- 
> This message was sent to: Ron Kelley <rkelleyrtp at gmail.com>
> To unsubscribe, send a blank message to trilug-leave at trilug.org from that address.
> TriLUG mailing list : https://www.trilug.org/mailman/listinfo/trilug
> Unsubscribe or edit options on the web	: https://www.trilug.org/mailman/options/trilug/rkelleyrtp%40gmail.com
> Welcome to TriLUG: https://trilug.org/welcome



More information about the TriLUG mailing list