自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Linux socket設(shè)置mark的必要性

系統(tǒng) Linux
Linux的Netfilter鉤子點(diǎn)的位置會(huì)導(dǎo)致一些奇怪的問(wèn)題,比如本機(jī)發(fā)出的包無(wú)法使用基于mark的策略路由,這是因?yàn)閙ark一般是在Netfilter中進(jìn)行的,而Linux的路由處在OUTPUT鉤子點(diǎn)之前,因此這是一個(gè)順序倒置的問(wèn)題,如何來(lái)解決呢?只能在路由之前打上mark,而我們知道,對(duì)于外部進(jìn)入的包,mark是在PREROUTING進(jìn)行的,因此對(duì)于外部進(jìn)入的包,策略路由是好使的,對(duì)于本機(jī)發(fā)出的包,路由之前只能是socket層了,那為何不能在傳輸層做呢?因?yàn)橐粊?lái)傳輸層比較雜,二來(lái)很多協(xié)議直接走到IP層,比如OSPF之類(lèi)的,三來(lái)很多傳輸層協(xié)議也需要路由查找,比如TC

Linux的Netfilter鉤子點(diǎn)的位置會(huì)導(dǎo)致一些奇怪的問(wèn)題,比如本機(jī)發(fā)出的包無(wú)法使用基于mark的策略路由,這是因?yàn)閙ark一般是在Netfilter中進(jìn)行的,而Linux的路由處在OUTPUT鉤子點(diǎn)之前,因此這是一個(gè)順序倒置的問(wèn)題,如何來(lái)解決呢?只能在路由之前打上mark,而我們知道,對(duì)于外部進(jìn)入的包,mark是在PREROUTING進(jìn)行的,因此對(duì)于外部進(jìn)入的包,策略路由是好使的,對(duì)于本機(jī)發(fā)出的包,路由之前只能是socket層了,那為何不能在傳輸層做呢?因?yàn)橐粊?lái)傳輸層比較雜,二來(lái)很多協(xié)議直接走到IP層,比如OSPF之類(lèi)的,三來(lái)很多傳輸層協(xié)議也需要路由查找,比如TCP在connect的時(shí)候就需要查找路由以確定源IP地址(如果沒(méi)有bind的話)。

幸運(yùn)的是,Linux的socket支持SO_MARK這樣一個(gè)option,可以很方便的使用:

mark = 100;

setsockopt(client_socket, SOL_SOCKET, SO_MARK, &mark, sizeof(mark));

1.對(duì)TRACK的影響

雖然raw表是數(shù)據(jù)包經(jīng)過(guò)的第一個(gè)表,使用SO_MARK仍然可以在整個(gè)raw表起作用之前做點(diǎn)mark,從而使得一個(gè)特定socket發(fā)出的包統(tǒng)統(tǒng)NOTRACK:

iptables -t raw -A OUTPUT -m mark --mark 100 -j NOTRACK

如果不這樣的話,就需要:

iptables -t raw -A OUTPUT [-s xxxx] [-d yyyy] [-p tcp|udp [--sport X] [--dport Y] ... -j MARK --set-mark 100

...[一大堆和上面類(lèi)似的規(guī)則]

iptables -t raw -A OUTPUT -m mark --mark 100 -j NOTRACK

正如在PREROUTING上的raw表需要做的那樣。我們得意于OUTPUT上面是socket,是應(yīng)用程序的世界,而PREROUTING以下則是內(nèi)核以及驅(qū)動(dòng)的世界了,后者太雜太亂,不便做更多的事,而前者則是我們可以掌控的范圍。

2.對(duì)策略路由的影響

SO_MARK最大的受益者就是策略路由了,如果我們這是以下的路由:

ip rule add fwmark 100 table abc

ip route add 1.2.3.4/32 via 192.168.0.254 table abc

ip route del 1.2.3.4/32 table main

不設(shè)置SO_MARK的情況下,所有的訪問(wèn)1.2.3.4的流量將因?yàn)闆](méi)有路由而被丟棄,因?yàn)樵谶M(jìn)入PREROUTING前首先要查找路由,而此時(shí)還沒(méi)有打上mark,因而不會(huì)匹配到abc策略表中的那條路由,而main表中的對(duì)應(yīng)路由我們已經(jīng)刪除了...但是如果我們?cè)趹?yīng)用程序中加入:

mark = 100;

setsockopt(client_socket, SOL_SOCKET, SO_MARK, &mark, sizeof(mark));

訪問(wèn)就可以正常了,因?yàn)樵诓檎衣酚傻臅r(shí)候,已經(jīng)有這個(gè)mark了。

【編輯推薦】

  1. Linux之父訪談 諾基亞不該死磕WP發(fā)展安卓更好
  2. 詳解四種級(jí)別Linux服務(wù)器入侵地
  3. 微軟Azure平臺(tái)上的Linux服務(wù)
責(zé)任編輯:Yeva 來(lái)源: Linux社區(qū)
相關(guān)推薦

2023-05-31 10:02:29

人工智能

2014-02-17 09:37:31

亞馬遜WorkSpacesVDI

2011-11-08 21:19:25

2009-12-11 09:36:02

PHP數(shù)據(jù)緩存類(lèi)

2010-06-24 16:38:20

綜合布線

2022-02-13 00:29:57

云安全云計(jì)算安全

2024-08-29 15:14:52

2018-10-17 10:46:54

區(qū)塊鏈互操作性比特幣

2023-09-14 15:58:34

C++表達(dá)式

2011-06-14 10:20:20

URL標(biāo)準(zhǔn)化

2011-12-13 20:36:26

Android

2020-05-20 07:00:00

DevOps端點(diǎn)檢測(cè)網(wǎng)絡(luò)攻擊

2021-01-21 21:07:03

信息安全漏洞治理

2015-04-16 14:00:55

新浪云SAE序列化

2009-09-01 16:20:27

C#單元測(cè)試

2017-12-12 10:45:50

機(jī)房空調(diào)防雷

2021-10-24 08:39:07

攻擊面管理網(wǎng)絡(luò)攻擊黑客

2021-08-31 11:29:55

無(wú)服務(wù)器服務(wù)器云計(jì)算

2012-09-17 09:50:50

2011-04-28 14:18:35

雙面打印
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)