MYSQL方面:
修改配置文件:
调整最大连接数:max_connections=500
打开慢查询:log-slow-queries=slowquery.log
long_query_time=1
调大最大错误连接数:max_connect_errors=500
APACHE方面:
启用mod_evasive模块,防止DDOS攻击,该模块需要网上去下载。配置文件如下:
LoadModule evasive20_module modules/mod_evasive20.so
<IfModule mod_evasive20.c>
#记录和存放黑名单的哈西表大小,如果服务器访问量很大,可以加大该值
DOSHashTableSize 3097
#同一个页面在同一时间内可以被同一个用户访问的次数,超过该数字就会被列为攻击,
#同一时间的数值可以在DosPageInterval参数中设置。
DOSPageCount 2
#同一个用户在同一个网站内可以同时打开的访问数,同一个时间的数值在DOSSiteInterval中设置。
DOSSiteCount 40
#设置DOSPageCount中时间长度标准,默认值为1。
DOSPageInterval 1
#DOSSiteInterval 2 设置DOSSiteCount中时间长度标准,默认值为1。
DOSSiteInterval 1
#被封时间间隔秒,这中间会收到 403 (Forbidden) 的返回。
DOSBlockingPeriod 10
#设置受到攻击时接收攻击信息提示的邮箱地址。
#DOSEmailNotify you@yourdomain.com
#受到攻击时Apache运行用户执行的系统命令
#DOSSystemCommand “su - someuser -c ‘/sbin/… %s …’”
#攻击日志存放目录,BSD上默认是 /tmp
</IfModule>
启动mod_security模块,做些安全保证。该模块也需要去网上单独下载。配置文件如下:
LoadModule evasive20_module modules/mod_evasive20.so
<IfModule mod_security.c>
# 打开过滤引擎开关。如果是Off,那么下面这些都不起作用
SecFilterEngine On
# 把设置传递给字目录
SecFilterInheritance Off
# 检查url编码
SecFilterCheckURLEncoding On
# 检测内容长度以避免堆溢出攻击
#SecFilterForceByteRange 32 126
# 日志的文件和位置。一定要先建立好目录,否则apache重新启动的时候会报错。
SecAuditLog /**/apache2/logs/audit_log
# debug的设置
#SecFilterDebugLog /**/apache2/logs/modsec_debug_log
#SecFilterDebugLevel 1
#当匹配chmod,wget等命令的时候,重新定向到一个特殊的页面,让攻击者知难而退
SecFilter chmod redirect:http://www.sina.com
SecFilter wget redirect:http://www.sina.com
#检测POST数据,注意,请甚用这个开关,可能会导致一些post页面无法访问。详细的信息,请察看www.modsecurity.org的文档,其中有详细的post编码要求。
#SecFilterScanPOST Off
# 缺省的动作
SecFilterDefaultAction "deny,log,status:406"
# 重新定向用户
#SecFilter xxx redirect:http://www.sina.com
# 防止操作系统关键词攻击
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请求
#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)"
#
#伪装服务器标识
SecServerSignature "Microsoft-IIS/6.0"
</IfModule>
启动文件压缩,缩小传输流量,这个是APACHE自带的,配置文件如下:
LoadModule deflate_module modules/mod_deflate.so
<IfModule mod_deflate.c>
#压缩的级别越高,压缩率越大,但是也越占用服务器CPU资源,这里设为5
DeflateCompressionLevel 5
#将html、文本、xml、php进行压缩
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-httpd-php
# 将html、htm、xml、php、css、js进行压缩
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>
配置错误日志和访问日志按天分割:
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>
其他些关键配置:
#Timeout:接收和发送前超时秒数
Timeout 300
#关闭稳固连接
#KeepAlive Off
#MaxKeepAliveRequests:在稳固连接期间允许的最大请求数
MaxKeepAliveRequests 100
#KeepAliveTimeout:在同一个连接上从同一台客户上接收请求的秒数
KeepAliveTimeout 5
# prefork MPM
# StartServers:启动时服务器启动的进程数
# MinSpareServers:保有的备用进程的最小数目
# MaxSpareServers:保有的备用进程的最大数目
# MaxClients:服务器允许启动的最大进程数
# MaxRequestsPerChild:一个服务进程允许的最大请求数
# MaxRequestPerChild 0
#如何确定APAACHE是工作在prefork模式之下?网上去查,不记得了。。。
<IfModule prefork.c>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
</IfModule>
防火墙的配置:
原则上只开放80端口,而且22端口只对管理员的IP开放,另外使服务器禁PING
将22端口只对管理员IP开放:
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -s 管理员IP -j ACCEPT
将80端口对所有人开放:
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
#防止同步包洪水
#--limit 1/s 限制syn并发数每秒1次,可以根据自己的需要修改
-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
服务器其他的一些参数配置和观察脚本:
服务器的禁ping
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
或者编辑/etc/sysctl文件,使用/sbin/sysctl -p 使配置生效
当前连接数的排序
netstat -nat|grep ":80"|awk '{print $5}' |awk -F: '{print $1}' | sort| uniq -c|sort -n
APACHE连接状态排序
netstat -nat|awk '{print awk $NF}'|sort|uniq -c|sort -n
统计访问数最多的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模块的日志,查看哪些时间段DDOS攻击比较多:
cat /var/log/messages |grep mod_evasive|gawk '{print $1,$2,$3}' | gawk -F: '{print $1}'| sort| uniq -c|sort -n【精确到小时】
cat /var/log/messages |grep mod_evasive|gawk '{print $1,$2,$3}' | gawk -F: '{print $1,$2}'| sort| uniq -c|sort -n【精确到分钟】
统计攻击最多的IP
cat /var/log/messages |grep mod_evasive|gawk '{print $8}' | sort| uniq -c|sort -n
统计apache日志中访问最多的IP
cat access_log.2010.08.05|gawk '{print $1}'|sort|uniq -c|sort -n
gawk -F 指定分隔符
sort 排序 uniq 去除相邻重复的行,并统计个数 sort -n 按照数字进行排序
比如我们在 /etc/hosts.allow中加入
all:192.168.1.
这样就会允许来自192.168.1.*域的所有的客户来访问。这只是举个例子,实际上,系统默认状态 下,都是能用这些网络服的
如果我们在 /etc/hosts.deny中加入,就限制了来自192.168.1.*域的所有的所有的IP。
all:192.168.1.
如果我们在 /etc/hosts.deny中加入
all:192.168.1.1,这样就限制了所有在192.168.1.1中的所有的用户的访问。
当hosts.allow和 host.deny相冲突时,以hosts.allow设置优化。
设置好后,要重新启动
# /etc/rc.d/init.d/xinetd restart
# /etc/rc.d/init.d/network restart
系统日志的检查:
二、 messages日志
首先说下我们最关注的系统/var/log/messages,这东东不仅是咱们服务器的系统日志,
很多时候它也做了许多服务的日志,这也是它被称为杂货铺的原因,值得重点关注,大家一般都喜欢用以下命令看最后十条日志
tail -n10 /var/log/messages
其实还可以将一段日志保存成文件,正用练下自己的awk、sed和grep水平;或者直接用vim来查看,
这也是算是一种经验之谈吧。我以前配置bind的主从复制,有
时因为权限的原因报错;
这时可以在一台报错的服务器上用命令tail -f /var/log/messages实时查看服务器的变化情况,
从中查找错误的蛛丝马迹;事实证明,效果很好,而且用于lvs+keepalived的排错效也不错,其它事例依此类推。
三、secure的用法
/var/log/secure:记录登入系统存取数据的文件,例如 pop3, ssh, telnet, ftp 等都会被记录,我们可以利用此文件找出不安全的登陆IP。
四、记录登陆者的数据
/var/log/wtmp:记录登入者的讯息数据,由于本文件已经被编码过(为二进制文件),
所以必须使用 last指令来取出文件的内容,你用cat等命令直接查看此文件是不行的。
五、lastlog记录系统时间
/var/log/lastlog : 记录每个使用者最近签入系统的时间, 因此当使用者签入时,
就会显示其上次签入的时间,您应该注意一下这个时间, 若不是您上次签入的时间,
表示您的帐号可能被人盗用了。 此档可用 /usr/bin/lastlog 指令读取(Freebsd下为/usr/sbin/lastlogin)。
六、用dmesg查看启动消息
dmesg提供了一个简单的方法查看系统启动信息。当Linux启动的时候,内核的信息被存入内核ring缓存当中,
dmesg可以显示缓存中的内容。默认情况下,dmesg打印内容到屏幕上面,当然你可以重定向输出到一个文件。
如果硬件损坏的话,在dmesg日志里是有显示的,可用以下命令来查看dmesg | grep error
七、服务器的邮件日志
服务器的邮件为/var/log/messages,如果要用专业的日志分析工具来分析的话,
我推荐用Awstats;由于公司的开发对邮件的要求比较低,所以我帮他们配置的就是最简单的sendmail,
有时看看邮件日志里的status状态来判断邮件到底有没有正确发送;在配置Nagios 服务器,
我也习惯用此日志来判断报警邮件到底有没有发送,如果对自己的shell水平足够自信,
也可以写脚本来收集邮件服务器的返回状态等,但专业的事情,建议还是由专业的工具来做,
特别是邮件负载比较大时,每天几百万条日志或上千万条日志不是开玩笑的。 本文出自:亿恩科技【www.enkj.com】
服务器租用/服务器托管中国五强!虚拟主机域名注册顶级提供商!15年品质保障!--亿恩科技[ENKJ.COM]
|