Problem with Transparent Proxy and 2.6 IPSec

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello,

I am new to this list but not new to iptables.  I have used iptables for
several years and have had much success with it.  I want to present the
problem that I have and request comments on how I might resolve it.

I have been using a transparent proxy with squid and smtp for about a
year.  It has worked fine and I've been very happy with it.

The problem came when I dumped freeswan and gave ipsec in linux 2.6.4 a
try.  This ipsec has been, for the most part, more reliable and easier
to understand for me.

I first ran into a problem that has already been discussed on this list
(or maybe netfilter-devel?).  This problem is with transport mode in
ipsec.  So, I switched to tunnel mode.  For more on that problem do a
search on the list archives.

In tunnel mode, as you may know from previous postings, iptables sees
each packet twice.  First, as an esp packet.  Second, as the
de-encapsulated version of the packet.  This is good, I think, although
I would like a way to know that a packet was authenticated or encrypted
prior to its de-encapsulation.  However, that is the subject of a future
posting.

Anyway, most rules work for me.  I can SNAT these packets out onto the
global network, all my INPUT rules seem to work and things are generally
happy.  However, my transparent proxies do not work.  Does anyone know
why?

SOME INTERESTING OBSERVATIONS

Here is something that I observed running tcpdump on the two hosts at
the end of the tunnel.  This is part of the dump when trying to telnet
from cube to host mail --- names changed to protect the innocent --- on
port 25.  The nat box is called nat and the source machine is called
cube.  Here is the dump on the nat box side:

18:44:43.825043 cube > nat: ESP(spi=0x00000201,seq=0x532b) (DF) [tos 0x10]
18:44:43.825043 cube.39869 > mail.smtp: S 1307041850:1307041850(0) win 5840 <mss 1460,sackOK,timestamp 118540183 0,nop,wscale 0> (DF) [tos 0x10]
18:44:43.825292 mail > cube: ESP(spi=0x00000301,seq=0x54ca) (DF)
18:44:46.824219 cube > nat: ESP(spi=0x00000201,seq=0x532f) (DF) [tos 0x10]
18:44:46.824219 cube.39869 > mail.smtp: S 1307041850:1307041850(0) win 5840 <mss 1460,sackOK,timestamp 118543184 0,nop,wscale 0> (DF) [tos 0x10]

Here, I see the request to mail.smtp encapsulated in esp and then
de-encapsulated.  Then I see a mail > cube esp packet.  Then another
cube > nat packet.

On cube I see the following.

18:44:43.823985 mail > cube.39869: ESP(spi=0x00000301,seq=0xc06c) (DF)
18:44:43.823985 nat.smtp > cube.39869: S 4174872998:4174872998(0) ack 1307041851 win 5792 <mss 1460,sackOK,timestamp 186145512 118540183,nop,wscale 0> (DF)
18:44:46.823183 mail > cube.39869: ESP(spi=0x00000301,seq=0xc06d) (DF)
18:44:46.823183 nat.smtp > cube.39869: S 4174872998:4174872998(0) ack 1307041851 win 5792 <mss 1460,sackOK,timestamp 186148512 118540183,nop,wscale 0> (DF)

It looks to me like a response is being sent.  So, I'm not sure where
things might be breaking down.

MISC INFO ABOUT MY SETUP

I run a debian testing machine as my NAT and proxy.  Both the proxy and the
firewall are on the same machine because this is my home machine and I'm just
playing around with this stuff at the moment.  My other linux machines
communicate with this box through an ipsec tunnel.  Network analysis with
tcpdump comfirms this.  Currently, I have one windows machine that is allowed
to talk to this linux machine without ipsec.  This machine can still use the
transparent proxies without a problem.

# This shows the version of iptables that I am running.
nat:~> dpkg -l iptables
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed
|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad)
||/ Name       Version   Description
+++-============================================-=======================
ii  iptables   1.2.9-5   Linux kernel 2.4+ iptables administration tools

# Info on my kernel.  (I have tried all of the 2.6.x stable releases)
nat:~> uname -a
Linux nat 2.6.4 #1 Sun Mar 14 14:54:23 MST 2004 i686 GNU/Linux

# Here are the relavant iptables rules (iptables-save format.)
#   NOTE eth0 goes to the global internet, eth1 to my local net.

# Generated by iptables-save v1.2.9 on Tue Mar 16 10:51:20 2004
*nat
:PREROUTING ACCEPT [88:22304]
:POSTROUTING ACCEPT [98:14092]
:OUTPUT ACCEPT [139:17757]
-A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080
-A PREROUTING -i eth1 -p tcp -m tcp --dport 25 -j REDIRECT --to-ports 25
-A POSTROUTING -o eth0 -j SNAT --to-source 192.168.1.2
COMMIT

# Generated by iptables-save v1.2.9 on Tue Mar 16 10:51:20 2004
*filter
:INPUT DROP [72:21276]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [9217:2302627]
-A INPUT -p ah -j ACCEPT
-A INPUT -p esp -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -i eth1 -p tcp -m tcp --dport 8080 -j ACCEPT
-A FORWARD -i eth1 -o eth0 -j ACCEPT
-A FORWARD -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
COMMIT

OTHER INTERESTING ASIDES

Just as an aside, most of you are used to seeing this done with squid
but some may not be used to seeing it done with smtp.  It works great
and I love it.  Only my border machine needs to know about special rules
for routing certain mail (like routing mail to aol for instance).  My
desktop and laptop think they are delivering MX direct.

Thanks for taking the time to read this.
Carl Baldwin

Attachment: signature.asc
Description: Digital signature


[Index of Archives]     [Linux Netfilter Development]     [Linux Kernel Networking Development]     [Netem]     [Berkeley Packet Filter]     [Linux Kernel Development]     [Advanced Routing & Traffice Control]     [Bugtraq]

  Powered by Linux