MYSQL方面:
修改配置文件:
調(diào)整最大連接數(shù):max_connections=500
打開慢查詢:log-slow-queries=slowquery.log
long_query_time=1
調(diào)大最大錯(cuò)誤連接數(shù):max_connect_errors=500
APACHE方面:
啟用mod_evasive模塊,防止DDOS攻擊,該模塊需要網(wǎng)上去下載。配置文件如下:
LoadModule evasive20_module modules/mod_evasive20.so
<IfModule mod_evasive20.c>
#記錄和存放黑名單的哈西表大小,如果服務(wù)器訪問量很大,可以加大該值
DOSHashTableSize 3097
#同一個(gè)頁面在同一時(shí)間內(nèi)可以被同一個(gè)用戶訪問的次數(shù),超過該數(shù)字就會(huì)被列為攻擊,
#同一時(shí)間的數(shù)值可以在DosPageInterval參數(shù)中設(shè)置。
DOSPageCount 2
#同一個(gè)用戶在同一個(gè)網(wǎng)站內(nèi)可以同時(shí)打開的訪問數(shù),同一個(gè)時(shí)間的數(shù)值在DOSSiteInterval中設(shè)置。
DOSSiteCount 40
#設(shè)置DOSPageCount中時(shí)間長度標(biāo)準(zhǔn),默認(rèn)值為1。
DOSPageInterval 1
#DOSSiteInterval 2 設(shè)置DOSSiteCount中時(shí)間長度標(biāo)準(zhǔn),默認(rèn)值為1。
DOSSiteInterval 1
#被封時(shí)間間隔秒,這中間會(huì)收到 403 (Forbidden) 的返回。
DOSBlockingPeriod 10
#設(shè)置受到攻擊時(shí)接收攻擊信息提示的郵箱地址。
#DOSEmailNotify you@yourdomain.com
#受到攻擊時(shí)Apache運(yùn)行用戶執(zhí)行的系統(tǒng)命令
#DOSSystemCommand “su - someuser -c ‘/sbin/… %s …’”
#攻擊日志存放目錄,BSD上默認(rèn)是 /tmp
</IfModule>
啟動(dòng)mod_security模塊,做些安全保證。該模塊也需要去網(wǎng)上單獨(dú)下載。配置文件如下:
LoadModule evasive20_module modules/mod_evasive20.so
<IfModule mod_security.c>
# 打開過濾引擎開關(guān)。如果是Off,那么下面這些都不起作用
SecFilterEngine On
# 把設(shè)置傳遞給字目錄
SecFilterInheritance Off
# 檢查url編碼
SecFilterCheckURLEncoding On
# 檢測(cè)內(nèi)容長度以避免堆溢出攻擊
#SecFilterForceByteRange 32 126
# 日志的文件和位置。一定要先建立好目錄,否則apache重新啟動(dòng)的時(shí)候會(huì)報(bào)錯(cuò)。
SecAuditLog /**/apache2/logs/audit_log
# debug的設(shè)置
#SecFilterDebugLog /**/apache2/logs/modsec_debug_log
#SecFilterDebugLevel 1
#當(dāng)匹配chmod,wget等命令的時(shí)候,重新定向到一個(gè)特殊的頁面,讓攻擊者知難而退
SecFilter chmod redirect:http://www.sina.com
SecFilter wget redirect:http://www.sina.com
#檢測(cè)POST數(shù)據(jù),注意,請(qǐng)甚用這個(gè)開關(guān),可能會(huì)導(dǎo)致一些post頁面無法訪問。詳細(xì)的信息,請(qǐng)察看www.modsecurity.org的文檔,其中有詳細(xì)的post編碼要求。
#SecFilterScanPOST Off
# 缺省的動(dòng)作
SecFilterDefaultAction "deny,log,status:406"
# 重新定向用戶
#SecFilter xxx redirect:http://www.sina.com
# 防止操作系統(tǒng)關(guān)鍵詞攻擊
SecFilter /etc/*passwd
SecFilter /bin/*sh
# 防止double dot攻擊
SecFilter "\.\./"
# 防止跨站腳本(CSS)攻擊
SecFilter "<( |\n)*script"
# Prevent XSS atacks (HTML/Javascript injection)
SecFilter "<(.|\n)+>"
# 防止sql注入式攻擊
SecFilter "delete[[:space:]]+from"
SecFilter "insert[[:space:]]+into"
SecFilter "select.+from"
#重定向exe和asp請(qǐng)求
#SecFilterSelective REQUEST_URI "\.exe" "redirect:http://www.google.com"
#SecFilterSelective REQUEST_URI "\.asp" "redirect:http://www.google.com"
#下面是限制了upload.php文件只能用來上傳jpeg.bmp和gif的圖片
#
#SecFilterInheritance On
#SecFilterSelective POST_PAYLOAD "!image/(jpeg|bmp|gif)"
#
#偽裝服務(wù)器標(biāo)識(shí)
SecServerSignature "Microsoft-IIS/6.0"
</IfModule>
啟動(dòng)文件壓縮,縮小傳輸流量,這個(gè)是APACHE自帶的,配置文件如下:
LoadModule deflate_module modules/mod_deflate.so
<IfModule mod_deflate.c>
#壓縮的級(jí)別越高,壓縮率越大,但是也越占用服務(wù)器CPU資源,這里設(shè)為5
DeflateCompressionLevel 5
#將html、文本、xml、php進(jìn)行壓縮
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-httpd-php
# 將html、htm、xml、php、css、js進(jìn)行壓縮
AddOutputFilter DEFLATE html htm xml php css js
</IfModule>
將某些非法IP列入黑名單:
<Directory "/ddd">
Order allow,deny
Allow from all
Deny from 192.168.1.1
</Directory>
配置錯(cuò)誤日志和訪問日志按天分割:
ErrorLog "|/***/apache2/bin/rotatelogs /***/apache2/logs/errorlog.%Y.%m.%d 86400"
<IfModule log_config_module>
#
# The following directives define some format nicknames for use with
# a CustomLog directive (see below).
#
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
<IfModule logio_module>
# You need to enable mod_logio.c to use %I and %O
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
</IfModule>
#
# The location and format of the access logfile (Common Logfile Format).
# If you do not define any access logfiles within a <VirtualHost>
# container, they will be logged here. Contrariwise, if you *do*
# define per-<VirtualHost> access logfiles, transactions will be
# logged therein and *not* in this file.
#
#CustomLog logs/access_log common
CustomLog "|/***/apache2/bin/rotatelogs -l /***/apache2/logs/access_log.%Y.%m.%d 86400" common
#
# If you prefer a logfile with access, agent, and referer information
# (Combined Logfile Format) you can use the following directive.
#
#CustomLog logs/access_log combined
</IfModule>
其他些關(guān)鍵配置:
#Timeout:接收和發(fā)送前超時(shí)秒數(shù)
Timeout 300
#關(guān)閉穩(wěn)固連接
#KeepAlive Off
#MaxKeepAliveRequests:在穩(wěn)固連接期間允許的最大請(qǐng)求數(shù)
MaxKeepAliveRequests 100
#KeepAliveTimeout:在同一個(gè)連接上從同一臺(tái)客戶上接收請(qǐng)求的秒數(shù)
KeepAliveTimeout 5
# prefork MPM
# StartServers:啟動(dòng)時(shí)服務(wù)器啟動(dòng)的進(jìn)程數(shù)
# MinSpareServers:保有的備用進(jìn)程的最小數(shù)目
# MaxSpareServers:保有的備用進(jìn)程的最大數(shù)目
# MaxClients:服務(wù)器允許啟動(dòng)的最大進(jìn)程數(shù)
# MaxRequestsPerChild:一個(gè)服務(wù)進(jìn)程允許的最大請(qǐng)求數(shù)
# MaxRequestPerChild 0
#如何確定APAACHE是工作在prefork模式之下?網(wǎng)上去查,不記得了。。。
<IfModule prefork.c>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
</IfModule>
防火墻的配置:
原則上只開放80端口,而且22端口只對(duì)管理員的IP開放,另外使服務(wù)器禁PING
將22端口只對(duì)管理員IP開放:
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -s 管理員IP -j ACCEPT
將80端口對(duì)所有人開放:
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
#防止同步包洪水
#--limit 1/s 限制syn并發(fā)數(shù)每秒1次,可以根據(jù)自己的需要修改
-A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
#防止各種端口掃描
-A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
#Ping洪水攻擊(Ping of Death)
-A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
#DDOS
-A INPUT -p icmp -m limit --limit 3/s -j LOG --log-level INFO --log-prefix "ICMP packet IN: "
-A INPUT -p icmp -m limit --limit 6/m -j ACCEPT
-A INPUT -p icmp -j DROP
服務(wù)器其他的一些參數(shù)配置和觀察腳本:
服務(wù)器的禁ping
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
或者編輯/etc/sysctl文件,使用/sbin/sysctl -p 使配置生效
當(dāng)前連接數(shù)的排序
netstat -nat|grep ":80"|awk '{print $5}' |awk -F: '{print $1}' | sort| uniq -c|sort -n
APACHE連接狀態(tài)排序
netstat -nat|awk '{print awk $NF}'|sort|uniq -c|sort -n
統(tǒng)計(jì)訪問數(shù)最多的IP
cat access_log.2010.08.05|gawk -F: '{print $1}' | sort| uniq -c|sort -n
cat access_log.2010.08.04|gawk -F: '{print $1}' | sort| uniq -c|sort -n
ps -ef|grep httpd|wc -l
netstat -na | grep :80 |grep ESTABLISHED |wc -l
利用apache的mod_evasive模塊的日志,查看哪些時(shí)間段DDOS攻擊比較多:
cat /var/log/messages |grep mod_evasive|gawk '{print $1,$2,$3}' | gawk -F: '{print $1}'| sort| uniq -c|sort -n【精確到小時(shí)】
cat /var/log/messages |grep mod_evasive|gawk '{print $1,$2,$3}' | gawk -F: '{print $1,$2}'| sort| uniq -c|sort -n【精確到分鐘】
統(tǒng)計(jì)攻擊最多的IP
cat /var/log/messages |grep mod_evasive|gawk '{print $8}' | sort| uniq -c|sort -n
統(tǒng)計(jì)apache日志中訪問最多的IP
cat access_log.2010.08.05|gawk '{print $1}'|sort|uniq -c|sort -n
gawk -F 指定分隔符
sort 排序 uniq 去除相鄰重復(fù)的行,并統(tǒng)計(jì)個(gè)數(shù) sort -n 按照數(shù)字進(jìn)行排序
比如我們?cè)?/etc/hosts.allow中加入
all:192.168.1.
這樣就會(huì)允許來自192.168.1.*域的所有的客戶來訪問。這只是舉個(gè)例子,實(shí)際上,系統(tǒng)默認(rèn)狀態(tài) 下,都是能用這些網(wǎng)絡(luò)服的
如果我們?cè)?/etc/hosts.deny中加入,就限制了來自192.168.1.*域的所有的所有的IP。
all:192.168.1.
如果我們?cè)?/etc/hosts.deny中加入
all:192.168.1.1,這樣就限制了所有在192.168.1.1中的所有的用戶的訪問。
當(dāng)hosts.allow和 host.deny相沖突時(shí),以hosts.allow設(shè)置優(yōu)化。
設(shè)置好后,要重新啟動(dòng)
# /etc/rc.d/init.d/xinetd restart
# /etc/rc.d/init.d/network restart
系統(tǒng)日志的檢查:
二、 messages日志
首先說下我們最關(guān)注的系統(tǒng)/var/log/messages,這東東不僅是咱們服務(wù)器的系統(tǒng)日志,
很多時(shí)候它也做了許多服務(wù)的日志,這也是它被稱為雜貨鋪的原因,值得重點(diǎn)關(guān)注,大家一般都喜歡用以下命令看最后十條日志
tail -n10 /var/log/messages
其實(shí)還可以將一段日志保存成文件,正用練下自己的awk、sed和grep水平;或者直接用vim來查看,
這也是算是一種經(jīng)驗(yàn)之談吧。我以前配置bind的主從復(fù)制,有
時(shí)因?yàn)闄?quán)限的原因報(bào)錯(cuò);
這時(shí)可以在一臺(tái)報(bào)錯(cuò)的服務(wù)器上用命令tail -f /var/log/messages實(shí)時(shí)查看服務(wù)器的變化情況,
從中查找錯(cuò)誤的蛛絲馬跡;事實(shí)證明,效果很好,而且用于lvs+keepalived的排錯(cuò)效也不錯(cuò),其它事例依此類推。
三、secure的用法
/var/log/secure:記錄登入系統(tǒng)存取數(shù)據(jù)的文件,例如 pop3, ssh, telnet, ftp 等都會(huì)被記錄,我們可以利用此文件找出不安全的登陸IP。
四、記錄登陸者的數(shù)據(jù)
/var/log/wtmp:記錄登入者的訊息數(shù)據(jù),由于本文件已經(jīng)被編碼過(為二進(jìn)制文件),
所以必須使用 last指令來取出文件的內(nèi)容,你用cat等命令直接查看此文件是不行的。
五、lastlog記錄系統(tǒng)時(shí)間
/var/log/lastlog : 記錄每個(gè)使用者最近簽入系統(tǒng)的時(shí)間, 因此當(dāng)使用者簽入時(shí),
就會(huì)顯示其上次簽入的時(shí)間,您應(yīng)該注意一下這個(gè)時(shí)間, 若不是您上次簽入的時(shí)間,
表示您的帳號(hào)可能被人盜用了。 此檔可用 /usr/bin/lastlog 指令讀取(Freebsd下為/usr/sbin/lastlogin)。
六、用dmesg查看啟動(dòng)消息
dmesg提供了一個(gè)簡單的方法查看系統(tǒng)啟動(dòng)信息。當(dāng)Linux啟動(dòng)的時(shí)候,內(nèi)核的信息被存入內(nèi)核ring緩存當(dāng)中,
dmesg可以顯示緩存中的內(nèi)容。默認(rèn)情況下,dmesg打印內(nèi)容到屏幕上面,當(dāng)然你可以重定向輸出到一個(gè)文件。
如果硬件損壞的話,在dmesg日志里是有顯示的,可用以下命令來查看dmesg | grep error
七、服務(wù)器的郵件日志
服務(wù)器的郵件為/var/log/messages,如果要用專業(yè)的日志分析工具來分析的話,
我推薦用Awstats;由于公司的開發(fā)對(duì)郵件的要求比較低,所以我?guī)退麄兣渲玫木褪亲詈唵蔚膕endmail,
有時(shí)看看郵件日志里的status狀態(tài)來判斷郵件到底有沒有正確發(fā)送;在配置Nagios 服務(wù)器,
我也習(xí)慣用此日志來判斷報(bào)警郵件到底有沒有發(fā)送,如果對(duì)自己的shell水平足夠自信,
也可以寫腳本來收集郵件服務(wù)器的返回狀態(tài)等,但專業(yè)的事情,建議還是由專業(yè)的工具來做,
特別是郵件負(fù)載比較大時(shí),每天幾百萬條日志或上千萬條日志不是開玩笑的。 本文出自:億恩科技【prubsntakaful.com】
服務(wù)器租用/服務(wù)器托管中國五強(qiáng)!虛擬主機(jī)域名注冊(cè)頂級(jí)提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM]
|