安裝mod_bw 和 mod_limitipconn 都非常簡單。

1、下載:

 

 

 

 

 

 

 

2.安裝

 

#tar -zxvf mod_limitipconn-0.22.tar.gz
#cd mod_limitipconn-0.22
#vi Makefile
修改:apxs = 「/usr/local/apache2/bin/apxs」 # 這裡是自己apache的apxs路徑,載入模組

 

或者

 

#/usr/local/apache2/bin/apxs -i -c -a mod_limitipconn.c 來載入模組
#make
#make install

 

#tar -xvf mod_bw-0.7.tgz
#cd mod_bw
#/usr/local/apache2/bin/apxs -i -c -a /home/kenami/mod_bw/mod_bw.c

 

下面用vi打開apache 的設定檔 HTTPd.conf

 

發現了以下兩行:

 

LoadModule limitipconn_module modules/mod_limitipconn.so
LoadModule bw_module modules/mod_bw.so

 

說明這兩個模組安裝成功

 

以下在HTTPd.conf 配置這兩個模組,我的配置如下:

 

1.找到ExtendedStatus On,如果前面有#號的話要把#號去掉,如果沒有這個選項需要自己手工添加;

 

<IfModule mod_limitipconn.c>
<Location /home/bo@znche.com/attachments/month _*> #需要控制的路徑
MaxConnPerIP 3 #限制的執行緒數
NoIPLimit index.htm #對此檔不做限制
</Location>
</IfModule>

 

在論壇的虛擬主機設定檔下面加上:

 

BandwidthModule On
ForceBandWidthModule On
Bandwidth all 10000 #限速10K
MinBandwidth all -1

 

測試了一下,一切正常,下載mp3的速度限制在10K一下,這樣就再也不用擔心大量的下載連結導致apache當機的問題了,當然以上方法不能阻止攻擊。




附上mod_bw配置說明:

 

Configuration Directives:
1 - BandWidthModule [On|Off]
這個 module 預設是關閉的,要將他開啟才能夠使用。

 

Example:
BandWidthModule On
2 - ForceBandWidthModule [On|Off]
這個 module 預設不會過濾每個需求。
如果您開啟他,他將處理過濾每個需求。

 

Example :
(正常的使用下,僅會過濾 text/html test/plain)
AddOutputFilterByType MOD_BW text/html text/plain

 

(開啟的狀況下)
ForceBandWidthModule On

 

3 - BandWidth [From] [bytes/s]
這邊有兩個參數。
From 是限制來源的位置,也就是該位置受限制。他可以是完整的 hostname、網功能變數名稱稱或 IP。可搭配遮罩使用,例如 192.168.0.0/24 or 192.168.0.0/255.255.255.0 。
另一個參數是限制的速率,以 bytes 每秒為單位;假如為 0,則不受限制。

 

Example :
BandWidth localhost 10240
BandWidth 192.168.218.5 0

 

( 依照設定的先後順序為排序準則。Order is relevant. First entries have precedence )

 

4 - MinBandWidth [From] [bytes/s]
這邊有兩個參數。
From 是限制來源的位置,也就是該位置受限制。他可以是完整的 hostname、網功能變數名稱稱或 IP。可搭配遮罩使用,例如 192.168.0.0/24 or 192.168.0.0/255.255.255.0 。
另一個參數每個連線限制的最小速率,以 bytes/s 為單位,-1 代表無限制。

 

Examples :
BandWidth all 102400
MinBandWidth all 50000

 

The example above, will have a top speed of 100kb for the 1? client. If more clients come, it will be splitted accordingly but
everyone will have at least 50kb (even if you have 50 clients)

 

BandWidth all 50000
MinBandWidth all -1

 

上面的例子說明每個連線有 50kb 的速度(不限制最小速度)

 

5 - LargeFileLimit [Type] [Minimum Size] [bytes/s]
顧名思義,這設定是專門用來限制大型檔案的。
Type 是指副檔名,可以使用 * 代表全部。也可使用 .tgz 、 .avi 等。
Minimun Size 單位是 kbytes/s,只要超過這個 Size 就被規範在這個設定的限速中。
最後一個參數就是被限制的速率囉!

 

Example :
LargeFileLimit .avi 500 10240

 

This limits .avi files over (or equal to) 500kb to 10kbytes/s

 

6 - BandWidthPacket [Size]
可能您不需要去設定這個參數!
預設值為 8192,適用于任何速度。
這個設定必須介於 1024 至 131072。
小的封包將使得速度變慢,且更耗費系統效能;相反亦是。

 

7 - BandWidthError [Error]
這個選項是用來自訂個人化錯誤訊息的。
在預設的情況下,超過最大連線時,這個 module 將會丟出 503 HTTP_SERVICE_UNAVAILABLE 回應。
對於大部分的人來說,他們會困擾著錯誤訊息,不知道為什麼會這樣。
你可以自訂一個錯誤訊息的頁面,去解釋在什麼情況下會發生這種問題。
但有時候錯誤號碼 503 是不適用這個地方的。
所以你可以自訂一個錯誤號碼從 300 至 599。
( 有關 HTTP 錯誤訊息可參考下列 Reference: HTTP Protocol Error Codes)
在自訂錯誤編碼時請注意,要使用尚未被定義的號碼!

 

測試的時候,我們使用錯誤號碼 510(510尚未被定義)

 

And Example, with Personalized Error Page :

 

ErrorDocument 510 /errors/maxconexceeded.html
BandWidthError 510
注意:有時候自訂錯誤編碼可能會有問題。但在大部分的情況下,作者已修復。

 

8 - MaxConnection [From] [Max]
這個設定有兩個參數。
From 是限制來源的位置,也就是該位置受限制。他可以是完整的 hostname、網功能變數名稱稱或 IP。可搭配遮罩使用,例如 192.168.0.0/24 or 192.168.0.0/255.255.255.0 。
第二個參數是設定最大的連線數量。假如連線超過這個數量,Apache 將丟出 503 Service Temporarily Unavailable 的訊息。

 

在設定這個參數之前,需先指定 BandWidth 值。
他不需要設定的太低,您可以設定為無限制。

 

Example :
BandWidth all 0
MaxConnection all 20
or
BandWidth all 0
BandWidth 192.168.0.0/24 10240
MaxConnection all 20
MaxConnection 192.168.0.0/24 5



示範區:
這個 module 設定可安插在 virtual host 或 directory,看你要設定在 HTTPd.conf 或 .htaccess 皆可!
不過使用 .htaccess 別忘了把 HTTPd.conf 裡的 下的 AllowOverride 設為 ALL 。
1. 限制每個連線為 10kb/s

 

BandwidthModule On
ForceBandWidthModule On
Bandwidth all 10240
MinBandwidth all -1
Servername www.example.com

 

2. 限制每一個連線為 100 kb/s,最小的速率為 50kb/s,且當檔案超過 500 kb 即限速為 50kb/s

 

BandwidthModule On
ForceBandWidthModule On
Bandwidth all 1024000
MinBandwidth all 50000
LargeFileLimit * 500 50000
Servername www.example.com

 

3. 限制副檔名為 avi & mpeg 的檔案為 20 kb/s

 

BandwidthModule On
ForceBandWidthModule On
LargeFileLimit .avi 1 20000
LargeFileLimit .mpg 1 20000
Servername www.example.com

 

4. 當檔案(mime)為 text 格式,限制速度為 5kb/s

BandwidthModule On
AddOutputFilterByType MOD_BW text/html text/plain
Bandwidth all 5000
Servername www.example.com






AddType application/x-rar .rar .iso #添加自訂minetype,控制iso和rar的下載

ExtendedStatus On # 把前面的注釋去掉
LoadModule limitipconn_module modules/mod_limitipconn.so
< IfModule mod_limitipconn.c >
< Location / >
MaxConnPerIP 5
NoIPLimit image/*
< /Location >

< Location /upload >
MaxConnPerIP 1 #upload資料夾限制下載
OnlyIPLimit audio/mpeg video/* application/x-rar #只對音訊視頻檔,自訂 minetype檔起作用
< / Location >
< / IfModule >

$mimetypes = array(
'ez' => 'application/andrew-inset',
'hqx' => 'application/mac-binhex40',
'cpt' => 'application/mac-compactpro',
'doc' => 'application/msword',
'bin' => 'application/octet-stream',
'dms' => 'application/octet-stream',
'lha' => 'application/octet-stream',
'lzh' => 'application/octet-stream',
'exe' => 'application/octet-stream',
'class' => 'application/octet-stream',
'so' => 'application/octet-stream',
'dll' => 'application/octet-stream',
'oda' => 'application/oda',
'pdf' => 'application/pdf',
'ai' => 'application/postscript',
'eps' => 'application/postscript',
'ps' => 'application/postscript',
'smi' => 'application/smil',
'smil' => 'application/smil',
'mif' => 'application/vnd.mif',
'xls' => 'application/vnd.ms-excel',
'ppt' => 'application/vnd.ms-powerpoint',
'wbxml' => 'application/vnd.wap.wbxml',
'wmlc' => 'application/vnd.wap.wmlc',
'wmlsc' => 'application/vnd.wap.wmlscriptc',
'bcpio' => 'application/x-bcpio',
'vcd' => 'application/x-cdlink',
'pgn' => 'application/x-chess-pgn',
'cpio' => 'application/x-cpio',
'csh' => 'application/x-csh',
'dcr' => 'application/x-director',
'dir' => 'application/x-director',
'dxr' => 'application/x-director',
'dvi' => 'application/x-dvi',
'spl' => 'application/x-futuresplash',
'gtar' => 'application/x-gtar',
'hdf' => 'application/x-hdf',
'js' => 'application/x-javascript',
'skp' => 'application/x-koan',
'skd' => 'application/x-koan',
'skt' => 'application/x-koan',
'skm' => 'application/x-koan',
'latex' => 'application/x-latex',
'nc' => 'application/x-netcdf',
'cdf' => 'application/x-netcdf',
'sh' => 'application/x-sh',
'shar' => 'application/x-shar',
'swf' => 'application/x-shockwave-flash',
'sit' => 'application/x-stuffit',
'sv4cpio' => 'application/x-sv4cpio',
'sv4crc' => 'application/x-sv4crc',
'tar' => 'application/x-tar',
'tcl' => 'application/x-tcl',
'tex' => 'application/x-tex',
'texinfo' => 'application/x-texinfo',
'texi' => 'application/x-texinfo',
't' => 'application/x-troff',
'tr' => 'application/x-troff',
'roff' => 'application/x-troff',
'man' => 'application/x-troff-man',
'me' => 'application/x-troff-me',
'ms' => 'application/x-troff-ms',
'ustar' => 'application/x-ustar',
'src' => 'application/x-wais-source',
'xhtml' => 'application/xhtml+xml',
'xht' => 'application/xhtml+xml',
'zip' => 'application/zip',
'au' => 'audio/basic',
'snd' => 'audio/basic',
'mid' => 'audio/midi',
'midi' => 'audio/midi',
'kar' => 'audio/midi',
'mpga' => 'audio/mpeg',
'mp2' => 'audio/mpeg',
'mp3' => 'audio/mpeg',
'aif' => 'audio/x-aiff',
'aiff' => 'audio/x-aiff',
'aifc' => 'audio/x-aiff',
'm3u' => 'audio/x-mpegurl',
'ram' => 'audio/x-pn-realaudio',
'rm' => 'audio/x-pn-realaudio',
'rpm' => 'audio/x-pn-realaudio-plugin',
'ra' => 'audio/x-realaudio',
'wav' => 'audio/x-wav',
'pdb' => 'chemical/x-pdb',
'xyz' => 'chemical/x-xyz',
'bmp' => 'image/bmp',
'gif' => 'image/gif',
'ief' => 'image/ief',
'jpeg' => 'image/jpeg',
'jpg' => 'image/jpeg',
'jpe' => 'image/jpeg',
'png' => 'image/png',
'tiff' => 'image/tiff',
'tif' => 'image/tiff',
'djvu' => 'image/vnd.djvu',
'djv' => 'image/vnd.djvu',
'wbmp' => 'image/vnd.wap.wbmp',
'ras' => 'image/x-cmu-raster',
'pnm' => 'image/x-portable-anymap',
'pbm' => 'image/x-portable-bitmap',
'pgm' => 'image/x-portable-graymap',
'ppm' => 'image/x-portable-pixmap',
'rgb' => 'image/x-rgb',
'xbm' => 'image/x-xbitmap',
'xpm' => 'image/x-xpixmap',
'xwd' => 'image/x-xwindowdump',
'igs' => 'model/iges',
'iges' => 'model/iges',
'msh' => 'model/mesh',
'mesh' => 'model/mesh',
'silo' => 'model/mesh',
'wrl' => 'model/vrml',
'vrml' => 'model/vrml',
'css' => 'text/css',
'html' => 'text/html',
'htm' => 'text/html',
'asc' => 'text/plain',
'txt' => 'text/plain',
'rtx' => 'text/richtext',
'rtf' => 'text/rtf',
'sgml' => 'text/sgml',
'sgm' => 'text/sgml',
'tsv' => 'text/tab-separated-values',
'wml' => 'text/vnd.wap.wml',
'wmls' => 'text/vnd.wap.wmlscript',
'etx' => 'text/x-setext',
'xsl' => 'text/xml',
'xml' => 'text/xml',
'mpeg' => 'video/mpeg',
'mpg' => 'video/mpeg',
'mpe' => 'video/mpeg',
'qt' => 'video/quicktime',
'mov' => 'video/quicktime',
'mxu' => 'video/vnd.mpegurl',
'avi' => 'video/x-msvideo',
'movie' => 'video/x-sgi-movie',
'ice' => 'x-conference/x-cooltalk',
);







<IfModule mod_limitipconn.c>

# Set a server-wide limit of 10 simultaneous downloads per IP,
# no matter what.
MaxConnPerIP 10
<Location /somewhere>
# This section affects all files under http://your.server/somewhere
MaxConnPerIP 3
# exempting images from the connection limit is often a good
# idea if your web page has lots of inline images, since these
# pages often generate a flurry of concurrent image requests
NoIPLimit image/*
</Location>

<Directory /home/*/public_html>
# This section affects all files under /home/*/public_html
MaxConnPerIP 1
# In this case, all MIME types other than audio/mpeg and video*
# are exempt from the limit check
OnlyIPLimit audio/mpeg video
</Directory>
</IfModule>










AddType application/x-rar .rar .iso #添加自訂minetype,控制iso和rar的下載

ExtendedStatus On # 把前面的注釋去掉
LoadModule limitipconn_module modules/mod_limitipconn.so
< IfModule mod_limitipconn.c >
< Location / >
MaxConnPerIP 5
NoIPLimit image/*
< /Location >

< Location /upload >
MaxConnPerIP 1 #upload資料夾限制下載
OnlyIPLimit audio/mpeg video/* application/x-rar #只對音訊視頻檔,自訂 minetype檔起作用
< / Location >
< / IfModule >

$mimetypes = array(
'ez' => 'application/andrew-inset',
'hqx' => 'application/mac-binhex40',
'cpt' => 'application/mac-compactpro',
'doc' => 'application/msword',
'bin' => 'application/octet-stream',
'dms' => 'application/octet-stream',
'lha' => 'application/octet-stream',
'lzh' => 'application/octet-stream',
'exe' => 'application/octet-stream',
'class' => 'application/octet-stream',
'so' => 'application/octet-stream',
'dll' => 'application/octet-stream',
'oda' => 'application/oda',
'pdf' => 'application/pdf',
'ai' => 'application/postscript',
'eps' => 'application/postscript',
'ps' => 'application/postscript',
'smi' => 'application/smil',
'smil' => 'application/smil',
'mif' => 'application/vnd.mif',
'xls' => 'application/vnd.ms-excel',
'ppt' => 'application/vnd.ms-powerpoint',
'wbxml' => 'application/vnd.wap.wbxml',
'wmlc' => 'application/vnd.wap.wmlc',
'wmlsc' => 'application/vnd.wap.wmlscriptc',
'bcpio' => 'application/x-bcpio',
'vcd' => 'application/x-cdlink',
'pgn' => 'application/x-chess-pgn',
'cpio' => 'application/x-cpio',
'csh' => 'application/x-csh',
'dcr' => 'application/x-director',
'dir' => 'application/x-director',
'dxr' => 'application/x-director',
'dvi' => 'application/x-dvi',
'spl' => 'application/x-futuresplash',
'gtar' => 'application/x-gtar',
'hdf' => 'application/x-hdf',
'js' => 'application/x-javascript',
'skp' => 'application/x-koan',
'skd' => 'application/x-koan',
'skt' => 'application/x-koan',
'skm' => 'application/x-koan',
'latex' => 'application/x-latex',
'nc' => 'application/x-netcdf',
'cdf' => 'application/x-netcdf',
    'sh'        => 'application/x-sh', 
    'shar'        => 'application/x-shar', 
    'swf'        => 'application/x-shockwave-flash', 
    'sit'        => 'application/x-stuffit', 
    'sv4cpio'    => 'application/x-sv4cpio', 
    'sv4crc'    => 'application/x-sv4crc', 
    'tar'        => 'application/x-tar', 
    'tcl'        => 'application/x-tcl', 
    'tex'        => 'application/x-tex', 
    'texinfo'    => 'application/x-texinfo', 
    'texi'        => 'application/x-texinfo', 
    't'            => 'application/x-troff', 
    'tr'        => 'application/x-troff', 
    'roff'        => 'application/x-troff', 
    'man'        => 'application/x-troff-man', 
    'me'        => 'application/x-troff-me', 
    'ms'        => 'application/x-troff-ms', 
    'ustar'        => 'application/x-ustar', 
    'src'        => 'application/x-wais-source', 
    'xhtml'        => 'application/xhtml+xml', 
    'xht'        => 'application/xhtml+xml', 
    'zip'        => 'application/zip', 
    'au'        => 'audio/basic', 
    'snd'        => 'audio/basic', 
    'mid'        => 'audio/midi', 
    'midi'        => 'audio/midi', 
    'kar'        => 'audio/midi', 
    'mpga'        => 'audio/mpeg', 
    'mp2'        => 'audio/mpeg', 
    'mp3'        => 'audio/mpeg', 
    'aif'        => 'audio/x-aiff', 
    'aiff'        => 'audio/x-aiff', 
    'aifc'        => 'audio/x-aiff', 
    'm3u'        => 'audio/x-mpegurl', 
    'ram'        => 'audio/x-pn-realaudio', 
    'rm'        => 'audio/x-pn-realaudio', 
    'rpm'        => 'audio/x-pn-realaudio-plugin', 
    'ra'        => 'audio/x-realaudio', 
    'wav'        => 'audio/x-wav', 
    'pdb'        => 'chemical/x-pdb', 
    'xyz'        => 'chemical/x-xyz', 
    'bmp'        => 'image/bmp', 
    'gif'        => 'image/gif', 
    'ief'        => 'image/ief', 
    'jpeg'        => 'image/jpeg', 
    'jpg'        => 'image/jpeg', 
    'jpe'        => 'image/jpeg', 
    'png'        => 'image/png', 
    'tiff'        => 'image/tiff', 
    'tif'        => 'image/tiff', 
    'djvu'        => 'image/vnd.djvu', 
    'djv'        => 'image/vnd.djvu', 
    'wbmp'        => 'image/vnd.wap.wbmp', 
    'ras'        => 'image/x-cmu-raster', 
    'pnm'        => 'image/x-portable-anymap', 
    'pbm'        => 'image/x-portable-bitmap', 
    'pgm'        => 'image/x-portable-graymap', 
    'ppm'        => 'image/x-portable-pixmap', 
    'rgb'        => 'image/x-rgb', 
    'xbm'        => 'image/x-xbitmap', 
    'xpm'        => 'image/x-xpixmap', 
    'xwd'        => 'image/x-xwindowdump', 
    'igs'        => 'model/iges', 
    'iges'        => 'model/iges', 
    'msh'        => 'model/mesh', 
    'mesh'        => 'model/mesh', 
    'silo'        => 'model/mesh', 
    'wrl'        => 'model/vrml', 
    'vrml'        => 'model/vrml', 
    'css'        => 'text/css', 
    'html'        => 'text/html', 
    'htm'        => 'text/html', 
    'asc'        => 'text/plain', 
    'txt'        => 'text/plain', 
    'rtx'        => 'text/richtext', 
    'rtf'        => 'text/rtf', 
    'sgml'        => 'text/sgml', 
    'sgm'        => 'text/sgml', 
    'tsv'        => 'text/tab-separated-values', 
    'wml'        => 'text/vnd.wap.wml', 
    'wmls'        => 'text/vnd.wap.wmlscript', 
    'etx'        => 'text/x-setext', 
    'xsl'        => 'text/xml', 
    'xml'        => 'text/xml', 
    'mpeg'        => 'video/mpeg', 
    'mpg'        => 'video/mpeg', 
    'mpe'        => 'video/mpeg', 
    'qt'        => 'video/quicktime', 
    'mov'        => 'video/quicktime', 
    'mxu'        => 'video/vnd.mpegurl', 
    'avi'        => 'video/x-msvideo', 
    'movie'        => 'video/x-sgi-movie', 
    'ice'        => 'x-conference/x-cooltalk', 
);  
 
 
轉貼 自 http://fecbob.pixnet.net/blog/post/38248031-apache-限制併發連接數和下載速度-的配置
arrow
arrow
    文章標籤
    apache
    全站熱搜
    創作者介紹
    創作者 cxz012069 的頭像
    cxz012069

    PHP 學習手札

    cxz012069 發表在 痞客邦 留言(0) 人氣()