亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: iptables 中mark的問題 [打印本頁]

作者: zkheartboy    時(shí)間: 2008-06-30 16:38
標(biāo)題: iptables 中mark的問題
我用string match模塊過濾數(shù)據(jù)的內(nèi)容,把找到的數(shù)據(jù)包--set-mark
比如:
iptables -t mangle -A PREROUTING -p tcp -m string --string "qq.com" --algo bm -j MARK --set-mark 1

怎么樣才能把整個(gè)連接的所有packet mark 都設(shè)成1
作者: ssffzz1    時(shí)間: 2008-07-01 16:51
不能,因?yàn)槟愕钠ヅ湟?guī)則不能匹配流的所有包。
但是用五元組的匹配的可以。
作者: zkheartboy    時(shí)間: 2008-07-01 22:27
這樣不行阿?
我想實(shí)現(xiàn)的是用string match判斷connection中的字符串,然后通過nat表redirect或者dnat到另外的地址上。但是nat表又只檢查一個(gè)連接的第一個(gè)packet。
請(qǐng)教一下有沒有別的解決方法阿?
作者: platinum    時(shí)間: 2008-07-02 07:10
用 CONNMARK 去把連接做個(gè)標(biāo)記
然后利用 CONNMARK 里面的 restore 參數(shù)將連接的標(biāo)記還原到該連接的每個(gè)數(shù)據(jù)包中
具體查看 CONNMARK 的文檔,也可以參考 ipp2p 的官方網(wǎng)站的文檔,ipp2p 就利用了這個(gè)原理
作者: zkheartboy    時(shí)間: 2008-07-02 18:37
我按照這個(gè)樓上的去寫了,結(jié)果nat表還是收不到阿,看看我的對(duì)不對(duì)

# Generated by iptables-save v1.3.8 on Wed Jul  2 18:28:33 2008
*raw
REROUTING ACCEPT [1444642:1095421177]
:OUTPUT ACCEPT [122363:62963106]
COMMIT
# Completed on Wed Jul  2 18:28:33 2008
# Generated by iptables-save v1.3.8 on Wed Jul  2 18:28:33 2008
*nat
REROUTING ACCEPT [91066:7446470]
OSTROUTING ACCEPT [93652:7634382]
:OUTPUT ACCEPT [3907:276342]
-A PREROUTING -p tcp -m mark --mark 0x5 -j REDIRECT --to-ports 3128
COMMIT
# Completed on Wed Jul  2 18:28:33 2008
# Generated by iptables-save v1.3.8 on Wed Jul  2 18:28:33 2008
*mangle
REROUTING ACCEPT [1444226:1095245188]
:INPUT ACCEPT [155701:60650041]
:FORWARD ACCEPT [1326023:1039108651]
:OUTPUT ACCEPT [122367:62964002]
OSTROUTING ACCEPT [1448390:1102072653]
-A PREROUTING -p tcp -m string --string "qq.com" --algo bm --to 65535 -j CONNMARK --set-mark 0x5
-A PREROUTING -p tcp -j CONNMARK --restore-mark
COMMIT
# Completed on Wed Jul  2 18:28:33 2008
# Generated by iptables-save v1.3.8 on Wed Jul  2 18:28:33 2008
*filter
:INPUT ACCEPT [155482:60580943]
:FORWARD ACCEPT [1326023:1039108651]
:OUTPUT ACCEPT [122368:62964598]
COMMIT
# Completed on Wed Jul  2 18:28:33 2008
作者: platinum    時(shí)間: 2008-07-03 15:49
貼 iptables-save -c
我需要知道數(shù)據(jù)包的匹配數(shù)量
另外,即使你這么做了也會(huì)出問題,這是后話,稍后再講
作者: zkheartboy    時(shí)間: 2008-07-03 17:23
# Generated by iptables-save v1.3.8 on Thu Jul  3 17:15:07 2008
*raw
REROUTING ACCEPT [2032031:1257459643]
:OUTPUT ACCEPT [325754:159521872]
COMMIT
# Completed on Thu Jul  3 17:15:07 2008
# Generated by iptables-save v1.3.8 on Thu Jul  3 17:15:07 2008
*nat
REROUTING ACCEPT [239238:19082230]
OSTROUTING ACCEPT [246183:19624829]
:OUTPUT ACCEPT [11644:821773]
[0:0] -A PREROUTING -p tcp -m mark --mark 0x5 -j REDIRECT --to-ports 3128
COMMIT
# Completed on Thu Jul  3 17:15:07 2008
# Generated by iptables-save v1.3.8 on Thu Jul  3 17:15:07 2008
*mangle
REROUTING ACCEPT [2031625:1257284174]
:INPUT ACCEPT [388392:150778056]
:FORWARD ACCEPT [1729874:1116104300]
:OUTPUT ACCEPT [325768:159523688]
OSTROUTING ACCEPT [2055642:1275627988]
[240:182268] -A PREROUTING -p tcp -m string --string "qq.com" --algo bm --to 65535 -j CONNMARK --set-mark 0x5
[2615:641996] -A PREROUTING -p tcp -j CONNMARK --restore-mark
COMMIT
# Completed on Thu Jul  3 17:15:07 2008
# Generated by iptables-save v1.3.8 on Thu Jul  3 17:15:07 2008
*filter
:INPUT ACCEPT [388183:150709478]
:FORWARD ACCEPT [1729875:1116104352]
:OUTPUT ACCEPT [325779:159525220]
COMMIT
# Completed on Thu Jul  3 17:15:07 2008

我上過qq.com這個(gè)網(wǎng)站。

這個(gè)東西不能很好的實(shí)現(xiàn)嗎?
作者: platinum    時(shí)間: 2008-07-03 17:37
你應(yīng)該用 -j CONNMARK --set-mark 0x5 來設(shè)置
匹配的時(shí)候用 -m connmark --mark 0x5 來重定向
但是,匹配的內(nèi)容并非連接的全部,同理,重定向的內(nèi)容也不是連接的全部
因此,即使重定向了,這個(gè)重定向過去的數(shù)據(jù)也會(huì)被對(duì)端認(rèn)為是非法的
作者: zkheartboy    時(shí)間: 2008-07-03 18:44
還是匹配不到阿。

我就是想要把整個(gè)連接所有的包都mark上,因?yàn)閚at表只檢查連接的第一個(gè)包,同連接后面的包都做相同的處理了,我想也是用connmark匹配不到的原因把。
不知道還有沒有其他的辦法,我都試過好幾種匹配了。
我現(xiàn)在還是沒有理解到--save-mark和--restore-mark 的意義,是把整個(gè)連接所有包的mark拷貝,還是只拷貝匹配到的那個(gè)包。
作者: platinum    時(shí)間: 2008-07-03 22:38

  1. 50         ct = nf_ct_get(*pskb, &ctinfo);
  2. 51         if (ct) {
  3. 52                 switch(markinfo->mode) {
  4. 53                 case XT_CONNMARK_SET:
  5. 54                         newmark = (ct->mark & ~markinfo->mask) | markinfo->mark;
  6. 55                         if (newmark != ct->mark) {
  7. 56                                 ct->mark = newmark;
  8. 57                                 nf_conntrack_event_cache(IPCT_MARK, *pskb);
  9. 58                         }
  10. 59                         break;
  11. 60                 case XT_CONNMARK_SAVE:
  12. 61                         newmark = (ct->mark & ~markinfo->mask) |
  13. 62                                   ((*pskb)->mark & markinfo->mask);
  14. 63                         if (ct->mark != newmark) {
  15. 64                                 ct->mark = newmark;
  16. 65                                 nf_conntrack_event_cache(IPCT_MARK, *pskb);
  17. 66                         }
  18. 67                         break;
  19. 68                 case XT_CONNMARK_RESTORE:
  20. 69                         mark = (*pskb)->mark;
  21. 70                         diff = (ct->mark ^ mark) & markinfo->mask;
  22. 71                         (*pskb)->mark = mark ^ diff;
  23. 72                         break;
  24. 73                 }
  25. 74         }
  26. 75
  27. 76         return XT_CONTINUE;
復(fù)制代碼

從代碼看,restore 是把連接的標(biāo)記寫到包的標(biāo)記里面,save 則正相反
另外你沒看懂我上面講的,即使你匹配到了,轉(zhuǎn)向了,但你轉(zhuǎn)向過去的東西也不能被認(rèn)可
nat 表只處理連接最開始的包,而你匹配到的絕對(duì)不是連接最開始,所以你永遠(yuǎn)匹配不到,這是其一
其二,前面說過了,TCP 連接是有三次握手的,即使 nat 是處理所有包,但你只把從匹配到開始以后的包轉(zhuǎn)換過去,連接也不會(huì)被認(rèn)可,因?yàn)?TCP 沒有建立

[ 本帖最后由 platinum 于 2008-7-3 22:49 編輯 ]
作者: zkheartboy    時(shí)間: 2008-07-03 22:55
我就是想把整個(gè)連接都mark阿,這樣才能匹配整個(gè)連接的數(shù)據(jù)包,謝謝樓上了。
不知道還有沒有其他辦法
作者: zkheartboy    時(shí)間: 2008-07-03 22:58
利用上面的表,我在filter表上做了一下實(shí)驗(yàn),用mark可以匹配到數(shù)據(jù)包,不過加上-m state --state NEW 就匹配不到了,說明沒有把整個(gè)連接的數(shù)據(jù)包都mark上。
作者: platinum    時(shí)間: 2008-07-03 23:03
原帖由 zkheartboy 于 2008-7-3 22:55 發(fā)表
我就是想把整個(gè)連接都mark阿,這樣才能匹配整個(gè)連接的數(shù)據(jù)包,謝謝樓上了。
不知道還有沒有其他辦法

不知道我是不是沒講明白,還是我沒有理解你的需求,你通過七層匹配然后轉(zhuǎn)向的這個(gè)想法不可能實(shí)現(xiàn)的
作者: platinum    時(shí)間: 2008-07-03 23:06
原帖由 zkheartboy 于 2008-7-3 22:58 發(fā)表
利用上面的表,我在filter表上做了一下實(shí)驗(yàn),用mark可以匹配到數(shù)據(jù)包,不過加上-m state --state NEW 就匹配不到了,說明沒有把整個(gè)連接的數(shù)據(jù)包都mark上。

試驗(yàn)沒錯(cuò),但結(jié)論是錯(cuò)的
你只對(duì)該連接的一個(gè)包做了 MARK,之后該連接的后續(xù)所有包都有 MARK 了,難道還不算是連接的數(shù)據(jù)包都 MARK 了啊?
我之所以說你無法實(shí)現(xiàn),原因在于你匹配 qq.com 的時(shí)候已經(jīng)晚了,已經(jīng)錯(cuò)過了連接的起始位置!
作者: zkheartboy    時(shí)間: 2008-07-03 23:33
原帖由 platinum 于 2008-7-3 23:03 發(fā)表

不知道我是不是沒講明白,還是我沒有理解你的需求,你通過七層匹配然后轉(zhuǎn)向的這個(gè)想法不可能實(shí)現(xiàn)的



謝謝指導(dǎo),我的需求就是你說的七層匹配轉(zhuǎn)向。我是想把用戶請(qǐng)求的網(wǎng)址重定向到我給的文件
看來在iptables里面是不能實(shí)現(xiàn)了,只能用squid的重定向功能了。
作者: platinum    時(shí)間: 2008-07-04 07:13
其實(shí)就是想記錄用戶的 URL 吧?
這個(gè)可能需要用 squid 的功能來實(shí)現(xiàn)了,就是把所有網(wǎng)頁都轉(zhuǎn)到 squid 去識(shí)別
另一個(gè)方法是自己用 libpcap 庫寫一個(gè)監(jiān)聽程序,自己分析
作者: zkheartboy    時(shí)間: 2008-07-04 16:03
呵呵,只是把用戶請(qǐng)求的網(wǎng)址改一下,返回我想給他的文件,不用記錄url。
如果能用iptables實(shí)現(xiàn)就可以實(shí)現(xiàn)透明的防火墻,用了squid就只有在防火墻上設(shè)置一個(gè)對(duì)外的ip了。
作者: platinum    時(shí)間: 2008-07-04 16:55
需要自己編程了,其實(shí)也不難,參考 ipt_TTL.c 就行,需要注意的是要重新計(jì)算校驗(yàn)和
作者: neten    時(shí)間: 2008-07-05 15:28
路過,學(xué)習(xí)了!
作者: hao_開心    時(shí)間: 2008-07-09 13:43
學(xué)了不少 偶也看看去




歡迎光臨 Chinaunix (http://www.72891.cn/) Powered by Discuz! X3.2