All of lore.kernel.org
 help / color / mirror / Atom feed
From: Grant Taylor <gtaylor@riverviewtech.net>
To: Mail List - Netfilter <netfilter@vger.kernel.org>
Subject: Re: iptables NAT logging
Date: Fri, 02 Nov 2007 09:59:47 -0500	[thread overview]
Message-ID: <472B3B63.7000203@riverviewtech.net> (raw)
In-Reply-To: <472AE429.1060906@bristol.ac.uk>

On 11/02/07 03:47, Jonathan Gazeley wrote:
> My NAT solution is implemented in iptables and works fine. The logging 
> partially works but the problem is this: I am logging pre NAT, and my 
> log shows the internal IP and port, and the destination IP and its port. 
> But it does not show the port used by the NAT box to talk to the 
> external IP. Logging post NAT would never detect any packets. If I was 
> able to long pre and post NAT I would be able to log all the information 
> I need.

Ugh, this could be problematic.  If I understand you correctly, you 
essentially need to log the following information.  I also suspect that 
it needs to be per connection NOT per packet.  Correct?

Internal Source IP
Internal Source Port
External Source IP (post NAT)
External Source Port (post NAT)
External Destination IP
External Destination Port
Protocol

I'm not sure if you will want to log the IP level protocol or not, but 
it may be a good thing to do.

I would suggest that you do this logging in the NAT table so that you 
only log the initial packet and not each and every packet that passes 
through.

I'm presuming that you are already logging when the connection 
initiates.  Do you also want to log when the connection terminates?

I unfortunately don't have access to a Linux box doing NATing at the 
moment to know for sure.  However I suspect that some of the external 
information you are needing can be obtained from the connection tracking 
/ NATing sub system.  You may need to use some sort of user space 
process or write a match extension and / or a target that will grab the 
external post nat information that you need.

I would also suggest that you find an optimal way to store the logged 
information.  I don't think that a TCPDump file, or a libcap output file 
will suffice because normally they only refer to two sets of IP and 
Port, not three like you need.

Another option that may work is to mark each packet in some fashion and 
log it before and after NATing.  However seeing as how dynamic things 
are I think it would be very impractical to ""mark packets in the 
traditional sense.

Thinking about the last idea... If you could somehow augment the LOG 
target to also include the connection tracking information (ID if you 
will) you could probably log pre and post NAT and then just have 
multiple records that you would need to pull to correlate your 
information, say connection tracking ID, source IP, source port, 
destination IP, and destination port both before and after.  This way 
you would have everything that you need.

I still feel like your best solution is going to be the first idea, work 
with the connection tracking sub system.



Grant. . . .

  parent reply	other threads:[~2007-11-02 14:59 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-11-02  8:47 iptables NAT logging Jonathan Gazeley
2007-11-02  9:33 ` G.W. Haywood
2007-11-02  9:36 ` Martijn Lievaart
2007-11-02 14:59 ` Grant Taylor [this message]
2007-11-04  1:46   ` 李伟华
2007-11-06 16:38   ` Jonathan Gazeley
2007-11-06 18:07     ` Grant Taylor
2007-11-07  0:53       ` Philip Craig
2007-11-07  2:29         ` Grant Taylor
2007-11-07  3:01           ` Philip Craig
2007-11-07  3:06             ` Grant Taylor
2007-11-05  0:43 ` Philip Craig

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=472B3B63.7000203@riverviewtech.net \
    --to=gtaylor@riverviewtech.net \
    --cc=netfilter@vger.kernel.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.