首页 | 新闻 | 交流 | 问吧 | 文档 | 手册 | 下载 | 博客

收藏此问题 发表新评论

高手请指点:用iptables做SNAT,如何把NAT日志取下来?

我公司近来要用一台服务器装AS5,然后用iptables实现SNAT,放在一个互联出口。
目前为止,我的NAT已经可以起来了,但是取日志总是达不到要求。

我写的配置很简单:

iptables -A FORWARD -j LOG --log-level debug

iptables -t nat  -A  POSTROUTING  -s 192.168.0.0/24 -o eth0  -j SNAT --to IP段

这两指令只能把SNAT之前的源目IP取下来,SNAT后的信息取不到了。

请教:
1,能不能用其它脚本,可以实现把SNAT的过程下来,例如:内网IP1----->公网IP1

2,或者用其它脚本把SNAT后的新地址信息取下来。
昵称: raulkang  时间: 2009-06-03 15:43:00
實現過程?

既然你都固定用 -j SNAT --to IP 語法,那 private 出去一定轉成該 IP 對 internet 上。若是這樣的話,您需要所謂過程的需求意義是...?

若你只是要所謂這台機器所有外連的 LOG,請改用 POSTROUTING 內來 -j LOG 的方式,你認為如何呢
昵称: kenduest  时间: 2009-06-03 16:51:00
我们的目的是想把SNAT过程中: 真实的源IP , SNAT后的假源 , 目的IP ,以及SNAT转换的时间 都取下来。这样做是为了日后的网络管理的,当如果某个IP访问了非法网站,可以用NAT的日志来追查。

朋友,如果按照你的想法“請改用 POSTROUTING 內來 -j LOG 的方式”
应该是这样做吧:
iptables -t nat  -A  POSTROUTING  -s 192.168.0.0/24 -o eth0  -j LOG --log-level debug

iptables -t nat  -A  POSTROUTING  -s 192.168.0.0/24 -o eth0  -j SNAT --to IP段

但是这样做的话,也只能取到SNAT前的源地址信息,SNAT后的新源地址取不下来了。
昵称: raulkang  时间: 2009-06-03 23:15:00
嗯?

  1. Jun  4 15:48:30 linux_nat kernel: IN=eth1 OUT=eth0 SRC=192.168.2.199 DST=61.219.13.131 LEN=48 TOS=0x00 PREC=0x00 TTL=127 ID=15126 DF PROTO=TCP SPT=1650 DPT=80 WINDOW=8192 RES=0x00 SYN URGP=0
复制代码


LOG 就已經紀錄資訊了
包含來源 private ip 與連結 destination ip,也包含 port 資訊與你要的時間了

至於透過那個真實 ip 出去的
您的機器對外 ip 不就那個固定的嗎
所以為何還要紀錄呢?

iptables 不提供您所謂的 LOG 這樣轉換資訊
所以你需要請自行客自化~
昵称: kenduest  时间: 2009-06-04 15:54:00
呵呵,是这样的。
举例说,假如新浪网站,向我们公司举报某时间,某IP(SNAT后的IP)在新浪网站上发表了非法信息,然后要求我公司查找出是那一台电脑所为。那我们就查不到了。因为我们确定不了此IP属于哪一台电脑。

所以,我们公司要求日志尽量可以记录到 SNAT前 和 SNAT后 的源IP地址信息。
昵称: raulkang  时间: 2009-06-04 16:06:00


QUOTE:
呵呵,是這樣的。
舉例說,假如新浪網站,向我們公司舉報某時間,某IP(SNAT後的IP)在新浪網站上發表了非法信息,然後要求我公司查找出是那一台電腦所為。那我們就查不到了。因為我們確定不了此IP屬於哪一台電腦。

所以,我們公司要求日誌儘量可以記錄到 SNAT前 和 SNAT後 的源IP地址信息



那為何這個會是問題呢?

既然知道時間,也知道對方去看那個網站,那就知道時間與目的 ip 資訊。既然如此的話,那個 log 不就可以看出是誰連結的嗎?您的疑問另我費解。

再者 web 的部份,你是否應該盡量使用 proxy 的方式,比方 transparent proxy 架構,明確的 proxy 的 log 內都有完整 HTTP request url 的資訊。
昵称: kenduest  时间: 2009-06-04 16:34:00
对,你说得也有道理。

不过,法律责任这东西要讲求证据的。假设有两个不同的用户在同一时间访问新浪网,当新浪网提供的信息是“源IP、目的IP和时间”,然后叫我们从日志中查看此人是谁?你可以知道新浪提供的源IP是由哪个用户转换过来的吗?

所以,我们才想要把SNAT的转换过程都取下来,像路由器NAT的debug信息那样就最好了。
NAT: s=192.168.0.100->192.168.1.2, d=192.168.1.11[1]
NAT*: s=192.168.1.11, d=192.168.1.2->192.168.0.100[1]
NAT: s=192.168.0.100->192.168.1.2, d=192.168.1.11[1]
NAT*: s=192.168.1.11, d=192.168.1.2->192.168.0.100[1]
昵称: raulkang  时间: 2009-06-04 17:16:00
我感覺與你溝通有代溝,您思考模式我不大能夠理解。

那個轉換過程沒有意義的....... 那種轉換過程你幫助啥呢?令人好奇。你有兩個內部 private ip 都同時瀏覽該網站,您的 debug 資訊可以查到... 怎樣的資訊?



QUOTE:
不过,法律责任这东西要讲求证据的。假设有两个不同的用户在同一时间访问新浪网,当新浪网提供的信息是“源IP、目的IP和时间”,然后叫我们从日志中查看此人是谁?你可以知道新浪提供的源IP是由哪个用户转换过来的吗?



那您的 debug 資訊又可以幫上啥忙呢?一點忙都幫不上。你只能夠知道哪兩個 ip 連線而已,你的 debug 資訊又看不出來是誰。

所以這個過程資訊似乎沒有實質意義的... 要明確的 web 存取資訊,請多利用 transparent proxy 的 proxy 瀏覽 url 紀錄比較實在。

而要實質確認是那個人?抱歉這個根本做不到,因為瀏覽網頁沒有所謂身份稽核機制 (你的內部網路可以確認你身份,與瀏覽目的網站時候還傳遞這次瀏覽是那個身份帳號),現有 internet 都是如此。實際法律問題,基本上初期就是確認實質的來源而已,而你用 nat 的方式,內部也只是簡單確認 ip 來源位置是誰使用而已,簡單縮小確認範圍。

拉回來若你的所謂 router debug 資訊可以讓你 "知道實際是哪個人",那你就用該設備當 nat router 吧,這樣不是更是省事嗎?只是真的這樣就可以嗎... 這是令人懷疑的。
昵称: kenduest  时间: 2009-06-04 17:50:00
首先,“源IP1----->源IP2,目的IP,时间”给我提供的意义是肯定有的,至于意义有多太,这个也不好确定。当然如果碰上像朋友你这种网络高手的话,一点意义都没有,随便来点技术就可以绕过NAT服务器了。
其次,我们公司做互联网出口的,政府要求我们提供这类的日志信息,我们必须提供,否则没得捞。这点,你应该可以明白。
然后,当然,用路由器来做NAT服务器一下子就可以取到NAT的日志了。但是每个公司的具体情况不同,我们公司目前选择了用linux系统来做NAT服务器,所以只能向这个方向努力。当然,我也希望公司采购一台像cisco12416的路由器回来,我写个简单的配置就可以完成所有功能了,但成本可能要上百万了。这点,我想你也可以理解。
最后,我不能确定这个方向最终能不能实现,但是要尝试过才知道,才好跟公司反映。同时也很感谢朋友你一直以来对我的帮助。
昵称: raulkang  时间: 2009-06-04 23:07:00
嗯?

基本上不要把 cisco router 想成多高級
因為您實際需求不是這種單純 router 可以解決的議題
若實際上有這樣單純
那許多追查的事情就變得很簡單...
實際上並沒有,不是嗎?

還有我一直對於您在 nat 的認知打一個問號
不管任何設備只是提供於 nat 提供當 ip 偽裝而已
所以您的實際需求問題與 nat 怎樣紀錄沒有關係

當然也許我可能真的搞不清楚情況?
請其他朋友幫忙說說吧
昵称: kenduest  时间: 2009-06-04 23:57:00
linux内log输出的内容确实只能是源地址和目标地址两个,SNAT后的ip无法取到,如果要输出SNAT后的IP,要修改内核的代码
昵称: ippen  时间: 2009-06-08 12:59:00
呵呵,我用了另外一种方法:
iptables -t nat  -A  PREROUTING  -i eth0   -j LOG --log-level debug --log-prefix "back SNAT:"
//在返回的包中记录日志,勉强可以记录到一些SNAT后的信息。

Jun  5 11:35:59 localhost kernel: back SNAT:IN=eth0 OUT= MAC=00:15:17:4b:7f:48:00:09:7c:a3:8f:59:08:00 SRC=122.148.186.126 DST=119.45.X.X LEN=131 TOS=0x10 PREC=0x80 TTL=41 ID=64976 PROTO=UDP SPT=50000 DPT=1024 LEN=111
//DST=119.45.X.X ,为SNAT转换后的地址
昵称: raulkang  时间: 2009-06-08 13:41:00


QUOTE:
原帖由 raulkang 于 2009-6-8 13:41 发表
呵呵,我用了另外一种方法:
iptables -t nat  -A  PREROUTING  -i eth0   -j LOG --log-level debug --log-prefix "back SNAT:"
//在返回的包中记录日志,勉强可以记录到一些SNAT后的信息。

Jun  5 11:3 ...



进出都要log,而且还要两边核对数据,挺繁琐的
昵称: ippen  时间: 2009-06-08 13:44:00
你说得很对,我也在考虑这个问题。一进一出,日志量增倍了。这个方法不是长久之计。

朋友,你说的“要修改内核的代码”这个操作复杂吗?
内核方面的东西,我没搞过。请说一下大概的思路好吗?
昵称: raulkang  时间: 2009-06-08 16:04:00


QUOTE:
原帖由 raulkang 于 2009-6-8 16:04 发表
你说得很对,我也在考虑这个问题。一进一出,日志量增倍了。这个方法不是长久之计。



請用 -j ULOG,然後裝個 ulog daemon,可以指定把 log 儲存到 mysql db 這類環境。
昵称: kenduest  时间: 2009-06-10 12:57:00
改内核有点复杂,在这里就不好说了,要改的话,要看内核网络部分
给大家看看我服务器上输出的log
协议 状态    开始时间      结束时间      源IP                    源端口 目的IP             目的端口 NAT后IP        NAT后端口
TCP CLOSE 1244728954 1244728954 220.xxx.xxx.153 57220 222.92.86.90 16818 xxx.91.xxx.38 57220
昵称: ippen  时间: 2009-06-11 22:08:00
ippen
你的log格式是iptables输出的吗?需要修改内核吗?我也正想需要这样的东西
昵称: gunjack  时间: 2009-07-13 21:36:00
建议还是按前面那位老兄的意见,加个透明代理算了,可以有很详细的日志,又简单
昵称: 一路狂笑  时间: 2009-07-13 22:01:00


QUOTE:
原帖由 kenduest 于 2009-6-4 17:50 发表
我感覺與你溝通有代溝,您思考模式我不大能夠理解。

那個轉換過程沒有意義的....... 那種轉換過程你幫助啥呢?令人好奇。你有兩個內部 private ip 都同時瀏覽該網站,您的 debug 資訊可以查到... 怎樣的資訊 ...



kenduest
透明代理确实可以明确的知道用户访问的URL地址,但是我估计他的用户量肯定很大,用透明代理可能支撑不下来,另外如果用一个IP来做nat,确实LOG不需要知道转换后的IP,但是如果用10个IP来做nat的话,raulkang 兄说的就有道理了,因为如果有转换后的IP信息的话,查找的准确度可以提高10倍,同样的道理如果是128个地址呢?准确度可以大大的提高了。
昵称: gunjack  时间: 2009-07-13 22:15:00


QUOTE:
原帖由 gunjack 于 2009-7-13 21:36 发表
ippen
你的log格式是iptables输出的吗?需要修改内核吗?我也正想需要这样的东西



不是iptables 输出的,是修改了iptables模块,直接用printk输出的
昵称: ippen  时间: 2009-07-15 17:12:00
能否共享一下怎么修改的吗?我这边修改了不行,可能没做对。
昵称: gunjack  时间: 2009-09-06 16:53:00


QUOTE:
原帖由 kenduest 于 2009-6-4 17:50 发表
我感覺與你溝通有代溝,您思考模式我不大能夠理解。

那個轉換過程沒有意義的....... 那種轉換過程你幫助啥呢?令人好奇。你有兩個內部 private ip 都同時瀏覽該網站,您的 debug 資訊可以查到... 怎樣的資訊 ...


你不知道很多大陆公司的管理模式,很多公司不是每台电脑都能上网的,一般只是安排几个专门的机器上网,然后大家平时都挤在那几台机器上查资料或者上网,另外一些台湾和韩国的公司好像也实行这么变态的管理制度,只有一些欧美或者一些海归人士办的公司有一定的人情味,人人都能在自己的电脑上网和查找资料,他说的好像就是那种情况,还好我不是在那样的公司。
昵称: phoenixson  时间: 2009-09-06 18:54:00
ippen 兄,什么时候能把你的iptables的日志编译公布。兄弟们都等着你的大作呢。呵呵。我用的你编译的内核很好用。日志每天1.4G左右。
昵称: nw207  时间: 2009-12-17 15:19:00
我也需要输入转换后的地址,能否提供一份,谢谢
昵称: wab830  时间: 2010-08-04 17:58:00
我也需要输入转换后的地址,能否提供一份,谢谢
邮箱wab830@163.com
昵称: wab830  时间: 2010-08-04 17:59:00
@raulkang @ippen @nw207 求联系方式 求编译的内核步骤
昵称: ballack  时间: 2013-07-29 16:28:14