始创于2000年 股票代码:831685
咨询热线:0371-60135900 注册有礼 登录
  • 挂牌上市企业
  • 60秒人工响应
  • 99.99%连通率
  • 7*24h人工
  • 故障100倍补偿
您的位置: 网站首页 > 帮助中心>文章内容

LINUX下APACHE+MYSQL服务器安全的一些配置

发布时间:  2012/7/3 18:13:48

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]

  • 您可能在找
  • 亿恩北京公司:
  • 经营性ICP/ISP证:京B2-20150015
  • 亿恩郑州公司:
  • 经营性ICP/ISP/IDC证:豫B1.B2-20060070
  • 亿恩南昌公司:
  • 经营性ICP/ISP证:赣B2-20080012
  • 服务器/云主机 24小时售后服务电话:0371-60135900
  • 虚拟主机/智能建站 24小时售后服务电话:0371-60135900
  • 专注服务器托管17年
    扫扫关注-微信公众号
    0371-60135900
    Copyright© 1999-2019 ENKJ All Rights Reserved 亿恩科技 版权所有  地址:郑州市高新区翠竹街1号总部企业基地亿恩大厦  法律顾问:河南亚太人律师事务所郝建锋、杜慧月律师   京公网安备41019702002023号
      1
     
     
     
     

    0371-60135900
    7*24小时客服服务热线