11.29 限制user_agent

訪問控制 – user_agent目錄概要

  • user_agent能夠理解爲瀏覽器標識
  • 核心配置文件內容
<IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteCond %{HTTP_USER_AGENT}  .*curl.* [NC,OR]
        RewriteCond %{HTTP_USER_AGENT}  .*baidu.com.* [NC]
        RewriteRule  .*  -  [F]
    </IfModule>
  • curl -A "123123" 指定user_agent

經常使用知識介紹

  • 有時候,網站會受到一種叫 cc 攻擊,CC攻擊就是黑客,經過軟件,肉雞同時去訪問一個站點,超過服務器的併發,就會致使站點宕機;經過肉雞,軟件去訪問站點,就是普通的訪問,沒有什麼特殊的,只是讓站點超過併發致使嚴重超負荷而宕機,因此沒辦法去進行控制;所謂CC攻擊都會有一個規律的特徵,就是user_agent是一致的,好比同一個IP、同一個標識、同一個地址;遇到這種規律的user_agent頻繁訪問的狀況咱們就能夠斷定他就是CC攻擊,咱們就能夠經過限制他的user_agent 減輕服務器壓力,只須要讓他從正常訪問的200,限制爲403,就能減輕服務器的壓力,由於403僅僅是一個請求,只會使用到不多的帶寬,畢竟他沒有牽扯到php 和mysqlphp

  • cc攻擊html

    • 攻擊者藉助代理服務器生成指向受害主機的合法請求,實現DDOS和假裝就叫:CC(ChallengeCollapsar)。
    • CC主要是用來攻擊頁面的。你們都有這樣的經歷,就是在訪問論壇時,若是這個論壇比較大,訪問的人比較多,打開頁面的速度會比較慢,訪問的人越多,論壇的頁面越多,數據庫壓力就越大,被訪問的頻率也越高,佔用的系統資源也就至關可觀。
    • 一個靜態頁面不須要服務器多少資源,甚至能夠說直接從內存中讀出來發給你就能夠了,可是論壇就不同了,我看一個帖子,系統須要到數據庫中判斷我是否有讀帖子的權限,若是有,就讀出帖子裏面的內容,顯示出來——這裏至少訪問了2次數據庫,若是數據庫的數據容量有200MB大小,系統極可能就要在這200MB大小的數據空間搜索一遍,這須要多少的CPU資源和時間?若是我是查找一個關鍵字,那麼時間更加可觀,由於前面的搜索能夠限定在一個很小的範圍內,好比用戶權限只查用戶表,帖子內容只查帖子表,並且查到就能夠立刻中止查詢,而搜索確定會對全部的數據進行一次判斷,消耗的時間是至關的大。
    • CC就是充分利用了這個特色,模擬多個用戶(多少線程就是多少用戶)不停的進行訪問(訪問那些須要大量數據操做,就是須要大量CPU時間的頁面).這一點用一個通常的性能測試軟件就能夠作到大量模擬用戶併發。
  • 肉雞 (受黑客遠程控制的電腦)mysql

    • 肉雞也稱傀儡機,是指能夠被黑客遠程控制的機器。好比用」灰鴿子」等誘導客戶點擊或者電腦被黑客攻破或用戶電腦有漏洞被種植了木馬,黑客能夠隨意操縱它並利用它作任何事情。
    • 肉雞一般被用做DDOS攻擊。能夠是各類系統,如windows、linux、unix等,更能夠是一家公司、企業、學校甚至是政府軍隊的服務器。

訪問控制 – user_agent

  1. 打開虛擬主機配置文件
    • 在兩個條件中用OR作了一個鏈接符,理解起來就是 匹配第一條規則或者第二條規則;若是不加OR就是而且的意思,必須兩個條件同時匹配之後纔會執行
    • NC表示忽略大小寫,由於user_agent,可能會是大寫的,好比:Mozilla/5.0,他首字母就是大寫的
    • RewriteRule .* - [F] 這裏的F表示Forbidden
[root@hf-01 111.com]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf


<IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteCond %{HTTP_USER_AGENT}  .*curl.* [NC,OR]        //條件
        RewriteCond %{HTTP_USER_AGENT}  .*baidu.com.* [NC]        //條件
        RewriteRule  .*  -  [F]
    </IfModule>
  1. 而後檢查是否存在語法錯誤,並從新加載配置文件
[root@hf-01 111.com]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@hf-01 111.com]# /usr/local/apache2.4/bin/apachectl graceful
[root@hf-01 111.com]#
  1. 去訪問的時候,會顯示403,這是由於限制了user_agent
[root@hf-01 111.com]# curl -x127.0.0.1:80 '111.com/upload/123.php' -I
HTTP/1.1 403 Forbidden
Date: Tue, 26 Dec 2017 20:52:15 GMT
Server: Apache/2.4.29 (Unix) PHP/5.6.30
Content-Type: text/html; charset=iso-8859-1

[root@hf-01 111.com]# curl -x127.0.0.1:80 '111.com/123.php' -I
HTTP/1.1 403 Forbidden
Date: Tue, 26 Dec 2017 20:53:30 GMT
Server: Apache/2.4.29 (Unix) PHP/5.6.30
Content-Type: text/html; charset=iso-8859-1

[root@hf-01 111.com]#
  1. 查看訪問日誌
[root@hf-01 logs]# tail -5 /usr/local/apache2.4/logs/123.com-access_20171227.log
192.168.74.1 - - [27/Dec/2017:04:32:09 +0800] "GET /123.php HTTP/1.1" 200 7 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0"
192.168.74.1 - - [27/Dec/2017:04:32:10 +0800] "GET /123.php HTTP/1.1" 200 7 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0"
192.168.74.1 - - [27/Dec/2017:04:32:17 +0800] "GET /upload/123.php HTTP/1.1" 403 223 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0"
127.0.0.1 - - [27/Dec/2017:04:52:15 +0800] "HEAD HTTP://111.com/upload/123.php HTTP/1.1" 403 - "-" "curl/7.29.0"
127.0.0.1 - - [27/Dec/2017:04:53:30 +0800] "HEAD HTTP://111.com/123.php HTTP/1.1" 403 - "-" "curl/7.29.0"
[root@hf-01 logs]#
  1. 測試是不是由於user_agent纔會被信任的
  2. 首先自定義user_agent
  • curl -A參數,去自定義
模擬user_agent,去訪問會看到狀態碼爲200 能夠正常訪問
[root@hf-01 111.com]# curl -A "hanfeng hanfeng" -x127.0.0.1:80 '111.com/123.php' -I
HTTP/1.1 200 OK
Date: Tue, 26 Dec 2017 21:17:47 GMT
Server: Apache/2.4.29 (Unix) PHP/5.6.30
X-Powered-By: PHP/5.6.30
Content-Type: text/html; charset=UTF-8

[root@hf-01 111.com]# curl -A "hanfeng hanfeng" -x127.0.0.1:80 '111.com/123.php'
123.php[root@hf-01 111.com]# 
[root@hf-01 111.com]#
  1. 查看訪問日誌,會看到user_agent是hanfeng hanfeng
[root@hf-01 111.com]# !tail
tail -5 /usr/local/apache2.4/logs/123.com-access_20171227.log
192.168.74.1 - - [27/Dec/2017:04:32:17 +0800] "GET /upload/123.php HTTP/1.1" 403 223 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0"
127.0.0.1 - - [27/Dec/2017:04:52:15 +0800] "HEAD HTTP://111.com/upload/123.php HTTP/1.1" 403 - "-" "curl/7.29.0"
127.0.0.1 - - [27/Dec/2017:04:53:30 +0800] "HEAD HTTP://111.com/123.php HTTP/1.1" 403 - "-" "curl/7.29.0"
127.0.0.1 - - [27/Dec/2017:05:17:47 +0800] "HEAD HTTP://111.com/123.php HTTP/1.1" 200 - "-" "hanfeng hanfeng"
127.0.0.1 - - [27/Dec/2017:05:19:40 +0800] "GET HTTP://111.com/123.php HTTP/1.1" 200 7 "-" "hanfeng hanfeng"
[root@hf-01 111.com]#

curl命令

  • curl命令是一個利用URL規則在命令行下工做的文件傳輸工具
    • -A ,指定user-agent,設置用戶代理髮送給服務器
    • -e ,指定referer,就是來源網址
    • -I ,僅僅查看它的狀態碼
    • -x ,在指定的端口上使用HTTP代理
相關文章
相關標籤/搜索