tproxy摘抄

Linux TPROXY

利用iptables TPROXY target,可以在skb進(jìn)入到協(xié)議棧之前孝情,將skb關(guān)聯(lián)到一個(gè)本地監(jiān)聽的socket蚤蔓,并且設(shè)置skb的fwmark页畦。可以利用fwmark配置高級(jí)路由功能將非本地流量送到本地lo interface焊唬,從而能進(jìn)入本地協(xié)議棧的處理。skb隨后通過ip_rcv進(jìn)入本地協(xié)議棧處理后看靠,可以直接利用已關(guān)聯(lián)的socket進(jìn)行處理赶促,而不需像普通的處理流程那樣,使用skb中的tcp 4-tuples來查找listening socket或者established socket挟炬。這樣可以把去往任意目的IP和目的端口的skb鸥滨,關(guān)聯(lián)到本地代理程序監(jiān)聽的socket上。本地代理程序通過accept返回的socket中包含的local address和local port仍然為原始連接的信息谤祖。關(guān)聯(lián)到哪個(gè)本地監(jiān)聽的socket婿滓,可以通過on-port和on-ip option來指定,并且本地監(jiān)聽的socket需要設(shè)置IP_TRANSPARENT option泊脐,否則TPROXY target會(huì)當(dāng)做找不到指定的本地socket空幻,將skb丟棄。

使用TPROXY的三個(gè)步驟:

  1. 配置代理程序容客,確定程序監(jiān)聽的IP地址和端口秕铛,確保監(jiān)聽socket已打開IP_TRANSPARENT選項(xiàng)。這里程序監(jiān)聽的IP地址可以是

A:0.0.0.0

B: 127.0.0.1

C: 任意本地接口的IP地址

D: 其它IP地址

   選擇使用哪種IP來監(jiān)聽缩挑,都是可以的但两,只要TPROXY target配置中的on-ip配置匹配就好了。
  1. 配置iptables規(guī)則供置,將需要透明代理的流量使用TPROXY target谨湘。使用on-port,on-ip參數(shù),指定透明代理監(jiān)聽的socket紧阔;使用--tproxy-mark設(shè)置使用透明代理流量的fwmark坊罢。
  2. 配置高級(jí)路由,將使用透明代理的流量送到本地lo接口擅耽。

FAQ

Question1:已匹配iptables規(guī)則活孩,使用TPROXY target的報(bào)文,還會(huì)繼續(xù)匹配后續(xù)規(guī)則么乖仇?

Answer1:不會(huì)憾儒。TPROXY target返回NF_DROP(報(bào)文不能匹配找到本地已設(shè)置IP_TRANSPARENT option的established或者listening socket)或者NF_ACCEPT(報(bào)文可以匹配找到本地已設(shè)置IP_TRANSPARENT option的established或者listening socket)

Question2:TPROXY target對(duì)已建立連接的報(bào)文生效么?

Answer2:生效乃沙。TPROXY target checks whether there is an established socket for the incoming skb (using the tcp 4-tuples in the skb to search the established sockets), if there is a such socket and the socket has set IP_TRANSPARENT, it sets the fwmark for the skb and associates the skb with the socket and return NF_ACCEPT. If no established socket found, it looks for listening socket using laddr and lport. It checks the configured ip address with --on-ip option, the dev ip, and the destination ip of the skb one by one, and the first non-zero one will be used as the laddr. The port configured with --on-port option will be used as lport, if not configured, the destination port of the skb is used as lport. If a listening socket is matched, and the socket has enabled IP_TRANSPARENT, it sets the mark/mask for the skb and associates the skb with the socket and returns NF_ACCEPT. Otherwise it returns NF_DROP.

Question3:既然TPROXY target對(duì)已經(jīng)建立連接的報(bào)文也生效起趾,那么Linux kernel文檔https://www.kernel.org/doc/Documentation/networking/tproxy.txt中,下面這段配置是必須的么警儒?

iptables -t mangle -N DIVERT

//代表這個(gè)pacekt屬于本地的某個(gè)socket則直接路由到lo是完全正常的训裆,性能也高

iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT

iptables -t mangle -A DIVERT -j MARK --set-mark 1

iptables -t mangle -A DIVERT -j ACCEPT

Answer3:不是必須的,但加些配置性能稍微會(huì)提高些蜀铲。對(duì)于可以匹配本地Established的報(bào)文缭保,設(shè)置fwmark,配合高級(jí)路由配置確保這些報(bào)文在路由結(jié)束時(shí)可以送到本地的lo接口蝙茶。這些報(bào)文不會(huì)再經(jīng)過TPROXY target處理艺骂。(MARK target性能會(huì)略高于TPROXY target)

另外這個(gè)配置在調(diào)試過程中也會(huì)更安全一些,對(duì)于報(bào)文屬于某個(gè)已經(jīng)建立的連接(包括到本地的連接隆夯,如ssh)將直接accept钳恕,不會(huì)走到TPROXY的規(guī)則。比如通過ssh登錄到一臺(tái)機(jī)器增加規(guī)則使用TPROXY target蹄衷,但是配置時(shí)忘記exclude本地流量忧额,這樣包括ssh到這臺(tái)機(jī)器的報(bào)文也將使用TPROXY target,而TPROXY target發(fā)現(xiàn)ssh的報(bào)文能匹配上本地established的socket愧口,但是該socket未設(shè)置IP_TRANSPARENT睦番,則會(huì)返回NF_DROP,導(dǎo)致ssh連接斷開。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末耍属,一起剝皮案震驚了整個(gè)濱河市托嚣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌厚骗,老刑警劉巖示启,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異领舰,居然都是意外死亡夫嗓,警方通過查閱死者的電腦和手機(jī)迟螺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來舍咖,“玉大人矩父,你說我怎么就攤上這事∨琶梗” “怎么了浙垫?”我有些...
    開封第一講書人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長郑诺。 經(jīng)常有香客問我,道長杉武,這世上最難降的妖魔是什么辙诞? 我笑而不...
    開封第一講書人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮轻抱,結(jié)果婚禮上飞涂,老公的妹妹穿的比我還像新娘。我一直安慰自己祈搜,他們只是感情好较店,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著容燕,像睡著了一般梁呈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蘸秘,一...
    開封第一講書人閱讀 49,046評(píng)論 1 285
  • 那天官卡,我揣著相機(jī)與錄音,去河邊找鬼醋虏。 笑死寻咒,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的颈嚼。 我是一名探鬼主播毛秘,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼阻课!你這毒婦竟也來了叫挟?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤限煞,失蹤者是張志新(化名)和其女友劉穎霞揉,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體晰骑,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡适秩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年绊序,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片秽荞。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡骤公,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出扬跋,到底是詐尸還是另有隱情阶捆,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布钦听,位于F島的核電站洒试,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏朴上。R本人自食惡果不足惜垒棋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望痪宰。 院中可真熱鬧叼架,春花似錦、人聲如沸衣撬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽具练。三九已至乍构,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間扛点,已是汗流浹背蜡吧。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留占键,地道東北人昔善。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像畔乙,于是被迫代替她去往敵國和親君仆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容