From: Joel Newkirk <netfilter@newkirk.us>
To: Subba Rao <subba3@cablespeed.com>, netfilter@lists.netfilter.org
Subject: Re: Help with Masquerading
Date: Sun, 5 Jan 2003 14:00:34 -0500 [thread overview]
Message-ID: <200301051400.34941.netfilter@newkirk.us> (raw)
In-Reply-To: <3E184D14.10102@cablespeed.com>
On Sunday 05 January 2003 10:19 am, Subba Rao wrote:
> Hi
>
> My system is running kernel 2.4.20 with iptables compiled into the
> kernel. The system has 2 interfaces. ETH0 is connected to the Internet
> (via cablemodem) and ETH1 is connected to my home LAN which has only
> one W2K laptop.
>
> My W2K is configured with the Linux system as the gateway. Both
> systems can ping each other.
> However my laptop is not able to go out to the Internet.
>
> I am desperately trying to make my W2K laptop connect to the Internet.
>
> Please let me know how to make this work.
>
> Thank you in advance.
>
> Subba Rao
> subba3@cablespeed.com
>
> #!/bin/sh
>
> echo "Starting Firewall....."
>
> INTERNAL_NET="10.0.0.0/24"
>
> INTERNET=`ifconfig eth0 | grep inet | cut -d : -f 2 | cut -d \ -f 1`
This is extracting the IP address of your external connection from the
output of 'ifconfig eth0' - Are you on a dynamic IP with a long
lease-time? If so you may get away with using this with SNAT. If
you're on a static IP this is unnecessary, just use the actual IP in the
script. If your IP changes fairly frequently, don't bother with this
and just use MASQUERADE target.
> # Flush the tables
> /usr/sbin/iptables -F INPUT
> /usr/sbin/iptables -F OUTPUT
> /usr/sbin/iptables -F FORWARD
> /usr/sbin/iptables -t nat -F
>
> # Set default policies for packet entering this box
>
> iptables -P INPUT DROP
> iptables -P OUTPUT ACCEPT
> iptables -P FORWARD ACCEPT
Set FORWARD policy to DROP as well. The only things you want this box to
forward are those you explicitly allow. Try using these rules for a
start:
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth1 -p tcp --dport 80 -j ACCEPT
iptables -A FORWARD -i eth1 -p udp --dport 53 -j ACCEPT
these should allow the laptop to browse the web. For other services,
like email, add appropriate rules for the needed ports. The first rule
here accepts any packet that is part of and ESTABLISHED connection, or
RELATED to one, regardless of it's source. The remainder allow
explicitly defined connections from the LAN to be forwarded to the
internet. With these three rules the laptop can connect out, but the
internet cannot connect in, only respond to a connection initiated by
the laptop.
> # Allow some packets in but accept all those on the internal interface
> /usr/sbin/iptables -A INPUT -i lo -j ACCEPT
> /usr/sbin/iptables -A INPUT -i eth0 -j ACCEPT
> /usr/sbin/iptables -A INPUT -i eth1 -j ACCEPT
The second one means anyone on the internet can connect to your firewall
box on any port, bypassing the DROP policy you set. Bad idea. The
third means any connection from local network to the firewall machine
directly is accepted, which is OK since only your laptop is on the local
network, but is a bad idea for a large network.
> # Masquerade internal system with the public IP address
>
> iptables -t nat -A POSTROUTING -d $INTERNAL_NET -o $INTERNET -j ACCEPT
> iptables -t nat -A POSTROUTING -o $INTERNET -s $INTERNAL_NET -j
> MASQUERADE
First rule here is bad.
A - Destination IP of local network should never be going out internet
connection, so it should never match anything.
B - If your intention is to ACCEPT anything from internet going TO local
network, you shouldn't because:
C - PREROUTING and POSTROUTING chains of NAT table are for NAT only, not
filtering, so you should just rely on accept policy. Only time you
should ACCEPT in a NAT chain rule is if you want to bypass a later rule,
IE you can ACCEPT specific traffic, then NAT whatever remains.
D - INTERNET is set to be the IP address of eth1, your external
connection. "-o" and "-i" matches are for interfaces, not IPs, so you
should use something like "-o eth1" or "-i eth0" here.
Second rule here is bad as well, for reason D above. Also, you are using
MASQUERADE target, which is fine if you have a dynamic IP, but you are
going to the trouble of determining your public IP at the start, which
leads me to think you intend to use it directly in a SNAT. If you are
on dynamic IP stick with MASQUERADE, if static IP use "-j SNAT --to
$INTERNET", based on your assignment above, or better yet just assign
the IP in the script instead of extracting it from the output of
'ifconfig eth1' at the top.
> # Block inbound connections
>
> /usr/sbin/iptables -A INPUT -i eth0 -p tcp --syn -j DROP
>
> echo 1 > /proc/sys/net/ipv4/ip_forward
> echo 1 > /proc/sys/net/ipv4/tcp_syncookies
The first one here turns on forwarding, but if you're using MASQUERADE
target you need to enable dynamic IP tracking as well, with:
echo "1" > /proc/sys/net/ipv4/ip_dynaddr
j
prev parent reply other threads:[~2003-01-05 19:00 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-01-05 15:19 Help with Masquerading Subba Rao
2003-01-05 16:06 ` Rob Sterenborg
2003-01-05 19:00 ` Joel Newkirk [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200301051400.34941.netfilter@newkirk.us \
--to=netfilter@newkirk.us \
--cc=netfilter@lists.netfilter.org \
--cc=subba3@cablespeed.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox