一烤礁、rp_filter參數(shù)介紹
rp_filter參數(shù)用于控制系統(tǒng)是否開啟對數(shù)據(jù)包源地址的校驗(yàn)绿店。
首先看一下Linux內(nèi)核文檔documentation/networking/ip-sysctl.txt中的描述:
rp_filter - INTEGER
0 - No source validation.
1 - Strict mode as defined in RFC3704 Strict Reverse Path
Each incoming packet is tested against the FIB and if the interface
is not the best reverse path the packet check will fail.
By default failed packets are discarded.
2 - Loose mode as defined in RFC3704 Loose Reverse Path
Each incoming packet's source address is also tested against the FIB
and if the source address is not reachable via any interface
the packet check will fail.
Current recommended practice in RFC3704 is to enable strict mode
to prevent IP spoofing from DDos attacks. If using asymmetric routing
or other complicated routing, then loose mode is recommended.
The max value from conf/{all,interface}/rp_filter is used
when doing source validation on the {interface}.
Default value is 0. Note that some distributions enable itin startup scripts.
即rp_filter參數(shù)有三個值定血,0、1雨让、2尸变,具體含義:
0:不開啟源地址校驗(yàn)。
1:開啟嚴(yán)格的反向路徑校驗(yàn)艇棕。對每個進(jìn)來的數(shù)據(jù)包蝌戒,校驗(yàn)其反向路徑是否是最佳路徑。如果反向路徑不是最佳路徑沼琉,則直接丟棄該數(shù)據(jù)包北苟。
2:開啟松散的反向路徑校驗(yàn)。對每個進(jìn)來的數(shù)據(jù)包打瘪,校驗(yàn)其源地址是否可達(dá)友鼻,即反向路徑是否能通(通過任意網(wǎng)口),如果反向路徑不同闺骚,則直接丟棄該數(shù)據(jù)包彩扔。
二、rp_filter參數(shù)示例
假設(shè)機(jī)器有2個網(wǎng)口:
eth0: 192.168.1.100
eth1:200.153.1.122
數(shù)據(jù)包源IP:10.75.153.98僻爽,目的IP:200.153.1.122
系統(tǒng)路由表配置為:
[root@localhost?~]#?route?-n
Kernel?IP?routing?table
Destination?????Gateway?????????Genmask?????????Flags?Metric?Ref????Use?Iface
default ? ?? 192.168.1.234 ? ?? 0.0.0.0 ?? UG ?? 0????? 0??????? 0 eth0
192.168.120.0???0.0.0.0?????????255.255.255.0???U?????0??????0????????0?eth0
10.75.153.98? ??0.0.0.0?????????255.255.255.0???U?????0??????0????????0?eth0
系統(tǒng)rp_filter參數(shù)的配置為:
[root@localhost?~]#?sysctl -a | grep rp_filter
net.ipv4.conf.all.rp_filter=1
net.ipv4.conf.default.rp_filter=1
如上所示虫碉,數(shù)據(jù)包發(fā)到了eth1網(wǎng)卡,如果這時候開啟了rp_filter參數(shù)胸梆,并配置為1敦捧,則系統(tǒng)會嚴(yán)格校驗(yàn)數(shù)據(jù)包的反向路徑。從路由表中可以看出碰镜,返回響應(yīng)時數(shù)據(jù)包要從eth0網(wǎng)卡出兢卵,即請求數(shù)據(jù)包進(jìn)的網(wǎng)卡和響應(yīng)數(shù)據(jù)包出的網(wǎng)卡不是同一個網(wǎng)卡,這時候系統(tǒng)會判斷該反向路徑不是最佳路徑绪颖,而直接丟棄該請求數(shù)據(jù)包秽荤。(業(yè)務(wù)進(jìn)程也收不到該請求數(shù)據(jù)包)
解決辦法:
1.修改路由表,使響應(yīng)數(shù)據(jù)包從eth1出,即保證請求數(shù)據(jù)包進(jìn)的網(wǎng)卡和響應(yīng)數(shù)據(jù)包出的網(wǎng)卡為同一個網(wǎng)卡王滤。
2.關(guān)閉rp_filter參數(shù)。(注意all和default的參數(shù)都要改)
1)修改/etc/sysctl.conf文件滓鸠,然后sysctl -p刷新到內(nèi)存雁乡。
2)使用sysctl -w直接寫入內(nèi)存:sysctl -w net.ipv4.conf.all.rp_filter=0
3)修改/proc文件系統(tǒng):?echo "0">/proc/sys/net/ipv4/conf/all/rp_filter
三、開啟rp_filter參數(shù)的作用
1. 減少DDoS攻擊
校驗(yàn)數(shù)據(jù)包的反向路徑糜俗,如果反向路徑不合適踱稍,則直接丟棄數(shù)據(jù)包,避免過多的無效連接消耗系統(tǒng)資源悠抹。
2. 防止IP Spoofing
校驗(yàn)數(shù)據(jù)包的反向路徑珠月,如果客戶端偽造的源IP地址對應(yīng)的反向路徑不在路由表中,或者反向路徑不是最佳路徑楔敌,則直接丟棄數(shù)據(jù)包啤挎,不會向偽造IP的客戶端回復(fù)響應(yīng)蹲堂。
Ps:兩種常見的非法攻擊手段:
1. DDos攻擊(Distribute Deny of Service)
分布式拒絕服務(wù)攻擊翅娶。通過構(gòu)造大量的無用數(shù)據(jù)包向目標(biāo)服務(wù)發(fā)起請求,占用目標(biāo)服務(wù)主機(jī)大量的資源吞加,還可能造成網(wǎng)絡(luò)擁塞勺卢,進(jìn)而影響到正常用戶的訪問伙判。
2. IP Spoofing(IP欺騙)
IP Spoofing指一個客戶端通過偽造源IP,冒充另外一個客戶端與目標(biāo)服務(wù)進(jìn)行通信黑忱,從而達(dá)到某些不可告人的秘密宴抚。