Skip to content


nginx(tengine)无法获取自定义header头ns_clientip

如果你的web服务器前端有代理服务器或CDN时日志中的$remote_addr可能就不是客户端的真实ip了。
通常可以安装realip模块来解决。
代码也很简单

set_real_ip_from 192.168.1.0/24; 指定接收来自哪个前端发送的 IP head 可以是单个IP或者IP段
set_real_ip_from 192.168.2.1;
real_ip_header X-Real-IP; IP head 的对应参数。

注意:基本上网上教程都是使用“X-Real-IP”做head头,今天遇到了使用”ns_clientip”做header头的,怎么也获取不到。

先用”$http_ns_clientip” “$sent_http_clientip”在日志中尝了下无果。

log_format combined '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" "$http_ns_clientip" "$sent_http_clientip"';

一度怀疑前端没有带上header头,用tcp_dump确认了下确实带了。

tcpdump tcp port 80 -n -X -s 0

网上找了一圈,原来是对header name的字符做了限制,默认 underscores_in_headers 为off,表示如果header name中包含下划线,则忽略掉。
解决方法是在配置中http部分 增加underscores_in_headers on;
这下log和realip都可正常取值了。

参考:
http://nginx.org/en/docs/http/ngx_http_log_module.html
http://holy2010.blog.51cto.com/blog/1086044/1840481

Posted in Nginx.

Tagged with , .


阿里提示Discuz uc.key泄露导致代码注入漏洞uc.php的解决方法

文件路径:bbs/api/uc.php

1查找 updatebadwords 函数:

if(!API_UPDATEBADWORDS) {
            return API_RETURN_FORBIDDEN;
        }

        $data = array();
        if(is_array($post)) {
            foreach($post as $k => $v) {  
// 240 行左右      
//fix uc key
      if(substr($v[‘findpattern’], 0, 1) != ‘/’ || substr($v[‘findpattern’], -3) != ‘/is’) {
         $v[‘findpattern’] = ‘/’ . preg_quote($v[‘findpattern’], ‘/’) . ‘/is’;
      }
//end            
                $data[‘findpattern’][$k] = $v[‘findpattern’];
                $data[‘replace’][$k] = $v[‘replacement’];
            }
        }

2. 查找 updateapps 函数:
function updateapps($get, $post) {
        global $_G;

        if(!API_UPDATEAPPS) {
            return API_RETURN_FORBIDDEN;
        }
//280行左右,这里我看已删除了下行那行                
//$UC_API = $post[‘UC_API’];

        $UC_API = ”;
        if($post[‘UC_API’]) {
            $UC_API = str_replace(array(‘\”, ‘”‘, ‘\\’, “\0”, “\n”, “\r”), ”, $post[‘UC_API’]);
            unset($post[‘UC_API’]);
        }
//end
        $cachefile = DISCUZ_ROOT.’./uc_client/data/cache/apps.php’;

参考
https://bbs.aliyun.com/read/292308.html

Posted in 安全.

Tagged with .


关于ImageMagick存在远程代码执行高危漏洞的安全公告

近日,国家信息安全漏洞共享平台(CNVD)收录了ImageMagick远程代码执行漏洞(CNVD-2016-02721,对应CVE-2016-3714)。远程攻击者利用漏洞通过上传恶意构造的图像文件,可在目标服务器执行任意代码,进而获得网站服务器的控制权。由于有多种编程语言对ImageMagick提供调用支持且一些广泛应用的 Web中间件在部署中包含相关功能,对互联网站安全构成重大威胁。
一、漏洞情况分析
ImageMagick是一款开源的创建、编辑、合成图片的软件。可以读取、转换、写入多种格式的图片,遵守GPL许可协议,可运行于大多数的操作系统。
ImageMagick在MagickCore/constitute.c的ReadImage函数中解析图片,当图片地址以https://开头时,就会调用InvokeDelegate。MagickCore/delegate.c定义了委托,最终InvokeDelegate调用ExternalDelegateCommand执行命令。攻击者利用漏洞上传一个恶意图像到目标Web服务器上,程序解析图像后可执行嵌入的任意代码,进而可获取服务器端敏感信息,甚至获取服务器控制权限。
CNVD对该漏洞的综合评级为“高危”。
二、漏洞影响范围
漏洞影响ImageMagick 6.9.3-9及以下的所有版本。
ImageMagick在网站服务器中应用十分广泛,包括Perl、C++、PHP、Python、Ruby等主流编程语言都提供了ImageMagick扩展支持,且WordPress、Drupal等应用非常广泛的CMS系统软件也提供了ImageMagick选项,还包括其他调用了ImageMagick的库实现图片处理、渲染等功能的应用。此外,如果通过shell 中的convert 命令实现一些图片处理功能,也会受到此漏洞影响。
根据国内民间漏洞报告平台的收录情况,已经有多家知名互联网企业网站系统受到漏洞威胁的案例。
三、漏洞修复建议
目前,互联网上已经披露了该漏洞的利用代码,厂商尚未发布漏洞修复程序,预计近期在ImageMagick 7.0.1-1和6.9.3-10版本中修复该漏洞。CNVD建议相关用户关注厂商主页更新,及时下载使用,避免引发漏洞相关的网络安全事件。
在厂商发布新版本之前,建议采用如下措施:通过配置策略文件暂时禁用ImageMagick,可在 “/etc/ImageMagick/policy.xml” 文件中添加如下代码:

imagemagick

测试是否安全
wget https://github.com/ImageTragick/PoCs/archive/master.zip
unzip master.zip
cd PoCs
./test.sh

如果有漏洞会输出UNSAFE
user@host:~/code/PoCs$ ./test.sh
testing read
UNSAFE

testing delete
UNSAFE

testing http with local port: 44755
UNSAFE

testing http with nonce: a7DvBer2
UNSAFE

testing rce1
UNSAFE

testing rce2
UNSAFE

testing MSL
UNSAFE

安全输出
user@host:~/code/PoCs$ ./test.sh
testing read
SAFE

testing delete
SAFE

testing http with local port: 38663
SAFE

testing http with nonce: a7DyBeV7
SAFE

testing rce1
SAFE

testing rce2
SAFE

testing MSL
SAFE

升级ImageMagick.
当前最新版本为ImageMagick-7.0.2
wget http://www.imagemagick.org/download/ImageMagick.tar.gz
tar xvzf ImageMagick.tar.gz
cd ImageMagick-7.0.2
./configure
make
make install
ldconfig /usr/local/lib
/usr/local/bin/convert –version

附:参考链接:
https://imagetragick.com/ (漏洞信息专题网站)
https://github.com/ImageTragick/PoCs (本地漏洞检测脚本)

Exploit


http://www.cnvd.org.cn/flaw/show/CNVD-2016-02721
http://www.freebuf.com/vuls/103504.html

Posted in Imagemagick, 安全通告.

Tagged with , .


php重新编译安装gmp扩展

GMP是The GNU MP Bignum Library,是一个开源的数学运算库,它可以用于任意精度的数学运算,包括有符号整数、有理数和浮点数。它本身并没有精度限制,只取决于机器的硬件情况。

先尝试用动态库
http://www.ipython.me/centos/php-gmp-ext.html
yum install gmp-devel

wget http://nchc.dl.sourceforge.net/project/re2c/old/re2c-0.13.5.tar.gz -O “re2c-0.13.5.tar.gz”
tar zxvf re2c-0.13.5.tar.gz
cd re2c-0.13.5
./configure
make && make install

wget https://gmplib.org/download/gmp/archive/gmp-4.1.3.tar.bz2
tar jxvf gmp-4.1.3.tar.bz2
cd gmp-4.1.3

./configure –with-php-config=/opt/php/bin/php-config
make
make install

/opt/php/bin/phpize
recursion limit of 1024 exceeded, use -L t

一直出错…

重新编译个php
cd php安装目录
./configure –prefix=/opt/php-5.2.17gmp –with-config-file-path=/opt/php-5.2.17gmp/etc –with-mysql=/opt/mysql –with-mysqli=/opt/mysql/bin/mysql_config \
–with-iconv-dir=/usr/local –with-freetype-dir –with-jpeg-dir –with-png-dir –with-zlib –with-libxml-dir=/usr –disable-rpath \
–enable-discard-path –enable-safe-mode –enable-bcmath –enable-shmop –enable-sysvsem –enable-inline-optimization –with-curl \
–with-curlwrappers –enable-mbregex –enable-fastcgi –enable-fpm –enable-force-cgi-redirect –enable-mbstring –with-mcrypt \
–with-gd –enable-gd-native-ttf –with-openssl –with-mhash –enable-pcntl –enable-sockets –with-xmlrpc –enable-zip –enable-soap \
–enable-xml –enable-zend-multibyte –disable-debug –disable-ipv6 –with-gmp
make ZEND_EXTRA_LIBS=’-liconv’
make install

Posted in PHP.

Tagged with .


安装wkhtmltopdf让php在linux环境下给网站截屏

http://wkhtmltopdf.org/obsolete-downloads.html
新版本依赖包比较多,我是centos5.8系统,这里使用64位老版本,同时它还用windows下的版本
wget http://download.gna.org/wkhtmltopdf/obsolete/linux/wkhtmltoimage-0.10.0_rc2-static-amd64.tar.bz2

tar -jxvf wkhtmltoimage-0.10.0_rc2-static-amd64.tar.bz2

解压后就可使用
./wkhtmltoimage-amd64 –help

  1. Name:
  2.   wkhtmltoimage 0.10.0 rc2
  3.  
  4. Synopsis:
  5.   wkhtmltoimage [OPTIONS]... <input file> <output file>
  6.  
  7. Description:
  8.   Converts an HTML page into an image,
  9.  
  10. General Options:
  11.       --crop-h <int>                  Set height for croping
  12.       --crop-w <int>                  Set width for croping
  13.       --crop-x <int>                  Set x coordinate for croping
  14.       --crop-y <int>                  Set y coordinate for croping
  15.   -H, --extended-help                 Display more extensive help, detailing
  16.                                       less common command switches
  17.   -f, --format <format>               Output file format (default is jpg)
  18.       --height <int>                  Set screen height (default is calculated
  19.                                       from page content) (default 0)
  20.   -h, --help                          Display help
  21.       --quality <int>                 Output image quality (between 0 and 100)
  22.                                       (default 94)
  23.   -V, --version                       Output version information an exit
  24.       --width <int>                   Set screen width (default is 1024)
  25.                                       (default 1024)
  26.  
  27. Contact:
  28.   If you experience bugs or want to request new features please visit
  29.   <http://code.google.com/p/wkhtmltopdf/issues/list>, if you have any problems
  30.   or comments please feel free to contact me: <uuf6429@gmail.com>

./wkhtmltoimage-amd64 http://www.baidu.com baidu.jpg
Loading page (1/2)
Rendering (2/2)
Done

截一张1024*1024 质量为35的jpg图片
./wkhtmltoimage-amd64 –crop-h 1024 –crop-w 1024 –quality 35 http://blog.c1gstudio.com c1g.jpg

c1gstudio

和php结合
cp wkhtmltoimage-amd64 /opt/toolkits/
chown www:website /opt/toolkits/wkhtmltoimage-adm64
chmod 550 /opt/toolkits/wkhtmltoimage-adm64

vi /opt/php/etc/php.ini
open_basedir = “/opt/htdocs:/tmp/session:/tmp/upload:/opt/php/PEAR:/opt/php/lib/php:/opt/toolkits/”

重启phpfpm
/opt/php/sbin/php-fpm restart

vi test.php

Posted in Others.

Tagged with .


容易被忽略的HTTP_X_FORWARDED_FOR攻击

  1. function getIP() {
  2. if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
  3. $realip = $_SERVER['HTTP_X_FORWARDED_FOR'];
  4. } elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {
  5. $realip = $_SERVER['HTTP_CLIENT_IP'];
  6. } else {
  7. $realip = $_SERVER['REMOTE_ADDR'];
  8. }
  9. return $realip;
  10. }

这个是网上常见获取ip函数

其中x-forword-fox的值是可以被自定义改写的.

在firefox下通过Moify Headers插件或者用php的fsockopen()函数等方法来改写.

如果你需要将IP写入数据库并打开的错误输出,那么将HTTP_X_FORWARDED_FOR的值改成192.168.0.1′ or 1= 是可能会产生sql注射.

同样$_SERVER[“HTTP_USER_AGENT”],$_SERVER[“HTTP_ACCEPT_LANGUAGE”],$_SERVER[‘HTTP_REFERER’] 等http变量入库时也需做过滤

改进的获取ip函数

  1. if(getenv('HTTP_CLIENT_IP') &amp;&amp; strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {
  2. $OnlineIP = getenv('HTTP_CLIENT_IP');
  3. } elseif(getenv('HTTP_X_FORWARDED_FOR') &amp;&amp; strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {
  4. $OnlineIP = getenv('HTTP_X_FORWARDED_FOR');
  5. } elseif(getenv('REMOTE_ADDR') &amp;&amp; strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {
  6. $OnlineIP = getenv('REMOTE_ADDR');
  7. } elseif(isset($_SERVER['REMOTE_ADDR']) &amp;&amp; $_SERVER['REMOTE_ADDR'] &amp;&amp; strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {
  8. $OnlineIP = $_SERVER['REMOTE_ADDR'];
  9. }
  10. preg_match("/[\d\.]{7,15}/", $OnlineIP, $match);
  11. $OnlineIP = $match[0] ? $match[0] : 'unknown';
  12. unset($match);

参考:

http://www.jb51.net/article/37690.htm

http://zhangxugg-163-com.iteye.com/blog/1663687

Posted in PHP, 安全.

Tagged with , .


转 实用PHP安全编程好文 PHPer都应学习

文章所在专题列表如下:

  1. PHP安全编程:register_globals的安全性
  2. PHP安全编程:不要让不相关的人看到报错信息
  3. PHP安全编程:网站安全设计的一些原则
  4. PHP安全编程:可用性与数据跟踪
  5. PHP安全编程:过滤用户输入
  6. PHP安全编程:对输出要进行转义
  7. PHP安全编程:表单与数据安全
  8. PHP安全编程:从URL的语义进行攻击
  9. PHP安全编程:文件上传攻击的防御
  10. PHP安全编程:跨站脚本攻击的防御
  11. PHP安全编程:跨站请求伪造CSRF的防御
  12. PHP安全编程:关于表单欺骗提交
  13. PHP安全编程:HTTP请求欺骗
  14. PHP安全编程:不要暴露数据库访问权限
  15. PHP安全编程:防止SQL注入
  16. PHP安全编程:cookie暴露导致session被劫持
  17. PHP安全编程:session固定获取合法会话
  18. PHP安全编程:session劫持的防御
  19. PHP安全编程:防止源代码的暴露
  20. PHP安全编程:留心后门URL
  21. PHP安全编程:阻止文件名被操纵
  22. PHP安全编程:文件包含的代码注入攻击
  23. PHP安全编程:文件目录猜测漏洞
  24. PHP安全编程:打开远程文件的风险
  25. PHP安全编程:shell命令注入
  26. PHP安全编程:暴力破解攻击
  27. PHP安全编程:密码嗅探与重播攻击
  28. PHP安全编程:记住登录状态的安全做法
  29. PHP安全编程:共享主机的源码安全
  30. PHP安全编程:更优的会话数据安全
  31. PHP安全编程:会话数据注入
  32. PHP安全编程:主机文件目录浏览
  33. PHP安全编程:PHP的安全模式

Posted in PHP, 安全.

Tagged with , .


安装MySQL中间层 Atlas实现不改程序就能读写分离

Atlas是由 Qihoo 360, Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上,修改了大量bug,添加了很多功能特性。目前该项目在360公司内部得到了广泛应用,很多MySQL业务已经接入了Atlas平台,每天承载的读写请求数达几十亿条。

主要功能:
* 读写分离
* 从库负载均衡
* IP过滤
* SQL语句黑白名单
* 自动分表

Q & A
——————-
Q: 是否支持多字符集?
A: 这是我们对原版MySQL-Proxy的第一项改进,符合国情是必须的

Q: 自动读写分离挺好,但有时候我写完马上就想读,万一主从同步延迟怎么办?
A: SQL语句前增加 /*master*/ 就可以将读请求强制发往主库

Q: 主库宕机,读操作受影响么?
A: 在atlas中是不会的! 能问这样的问题, 说明你用过官方的mysql-proxy, 很遗憾官方版本并未解决这个问题

Q: 检测后端DB状态会阻塞正常请求么?
A: 不会, atlas中检测线程是异步进行检测的,即使有db宕机,也不会阻塞主流程。在atlas中没有什么异常会让主流程阻塞! 同上,官方版本也会让你失望

Q: 想下线一台DB, 又不想停掉mysql server, 怎么办?
A: 可以通过管理接口手动上下线后端db, atlas会优先考虑管理员的意愿

Q: 想给集群中增加一台DB, 不想影响线上正常访问可以吗?
A: 通过管理接口可以轻松实现

Q: 相比官方mysql-proxy, atlas还有哪些改进?
A: 这实在是个难以回答的问题,性能,稳定性,可靠性,易维护性,我们做过几十项的改进,下面会尽量列一些较大的改动

VS 官方MySQL-Proxy
——————-
1. 将主流程中所有Lua代码改为纯C实现,Lua仅用在管理接口
2. 重写网络模型、线程模型
3. 实现了真正意义的连接池
4. 优化了锁机制,性能提高数十倍
……

附名字来源:
Atlas,希腊神话中双肩撑天的巨人,普罗米修斯的兄弟,最高大强壮的神之一,因反抗宙斯失败而被罚顶天。我们期望这个系统能够脚踏后端DB,为前端应用撑起一片天。

一.安装dbproxy altas
https://github.com/Qihoo360/Atlas/wiki/Atlas%E7%9A%84%E5%AE%89%E8%A3%85

wget https://github.com/Qihoo360/Atlas/releases/download/2.2.1/Atlas-2.2.1.el5.x86_64.rpm
rpm –ivh Atlas-2.2.1.el5.x86_64.rpm

注意事项:

(1).Atlas只能安装运行在64位的系统上。

(2).Centos 5.X安装 Atlas-XX.el5.x86_64.rpm,Centos 6.X安装Atlas-XX.el6.x86_64.rpm。

(3).如果执行sudo rpm –i Atlas-XX.el6.x86_64.rpm,提示类似:“file /usr/local/mysql-proxy/bin/encrypt from install of Atlas-2.0.1-1.x86_64 conflicts with file from package Atlas-1.0.3-1.x86_64”错误,则表示该系统之前已经安装过Atlas-1.0.3-1.x86_64,需要执行:sudo rpm –e Atlas-1.0.3-1.x86_64,将之前安装的Atlas删除掉,再执行sudo rpm –i Atlas-XX.el6.x86_64.rpm安装新版本的Atlas。

(4).后端mysql版本应大于5.1,建议使用Mysql 5.6

二.配置文件修改
cd /usr/local/mysql-proxy/conf
cp tests.cnf dbproxy.cnf
vi dbproxy.cnf

Atlas运行需要依赖一个配置文件(test.cnf)。在运行Atlas之前,需要对该文件进行配置。Atlas的安装目录是/usr/local/mysql-proxy,进入安装目录下的conf目录,可以看到已经有一个名为test.cnf的默认配置文件,我们只需要修改里面的某些配置项,不需要从头写一个配置文件。

1.配置范例及说明如下:

[mysql-proxy]

(必备,默认值即可)管理接口的用户名

admin-username = user

(必备,默认值即可)管理接口的密码

admin-password = pwd

(必备,根据实际情况配置)主库的IP和端口

proxy-backend-addresses = 192.168.0.12:3306

(非必备,根据实际情况配置)从库的IP和端口,@后面的数字代表权重,用来作负载均衡,若省略则默认为1,可设置多项,用逗号分隔。如果想让主库也能分担读请求的话,只需要将主库信息加入到下面的配置项中。

proxy-read-only-backend-addresses = 192.168.0.12:3306@2,192.168.0.13:3306@4,192.168.0.14:3306@4

(必备,根据实际情况配置)用户名与其对应的加密过的MySQL密码,密码使用PREFIX/bin目录下的加密程序encrypt加密,用户名与密码之间用冒号分隔。主从数据库上需要先创建该用户并设置密码(用户名和密码在主从数据库上要一致)。比如用户名为myuser,密码为mypwd,执行./encrypt mypwd结果为HJBoxfRsjeI=。如果有多个用户用逗号分隔即可。则设置如下行所示:

pwds = dbproxy: /iZxz+0GRoA=

(必备,默认值即可)Atlas的运行方式,设为true时为守护进程方式,设为false时为前台方式,一般开发调试时设为false,线上运行时设为true

daemon = true

(必备,默认值即可)设置Atlas的运行方式,设为true时Atlas会启动两个进程,一个为monitor,一个为worker,monitor在worker意外退出后会自动将其重启,设为false时只有worker,没有monitor,一般开发调试时设为false,线上运行时设为true

keepalive = true

(必备,根据实际情况配置)工作线程数,推荐设置成系统的CPU核数的2至4倍

event-threads = 4

(必备,默认值即可)日志级别,分为message、warning、critical、error、debug五个级别

log-level = message

(必备,默认值即可)日志存放的路径

log-path = /usr/local/mysql-proxy/log

(必备,根据实际情况配置)SQL日志的开关,可设置为OFF、ON、REALTIME,OFF代表不记录SQL日志,ON代表记录SQL日志,该模式下日志刷新是基于缓冲区的,当日志填满缓冲区后,才将日志信息刷到磁盘。REALTIME用于调试,代表记录SQL日志且实时写入磁盘,默认为OFF

sql-log = OFF

(可选项,可不设置)慢日志输出设置。当设置了该参数时,则日志只输出执行时间超过sql-log-slow(单位:ms)的日志记录。不设置该参数则输出全部日志。

#sql-log-slow = 10

(可选项,可不设置)关闭不活跃的客户端连接设置。当设置了该参数时,Atlas会主动关闭经过’wait-timeout’时间后一直未活跃的连接。单位:秒

wait-timeout = 10

(必备,默认值即可)Atlas监听的工作接口IP和端口

proxy-address = 0.0.0.0:1234

(必备,默认值即可)Atlas监听的管理接口IP和端口 admin-address = 0.0.0.0:2345

(可选项,可不设置)分表设置,此例中person为库名,mt为表名,id为分表字段,3为子表数量,可设置多项,以逗号分隔,若不分表则不需要设置该项,子表需要事先建好,子表名称为表名_数字,数字范围为[0,子表数-1],如本例里,子表名称为mt_0、mt_1、mt_2

#tables = person.mt.id.3

(可选项,可不设置)默认字符集,若不设置该项,则默认字符集为latin1

#charset = utf8

(可选项,可不设置)允许连接Atlas的客户端的IP,可以是精确IP,也可以是IP段,以逗号分隔,若不设置该项则允许所有IP连接,否则只允许列表中的IP连接

client-ips = 127.0.0.1, 192.168.1

(可选项,极少需要)Atlas前面挂接的LVS的物理网卡的IP(注意不是虚IP),若有LVS且设置了client-ips则此项必须设置,否则可以不设置

#lvs-ips = 192.168.1.1

2. 重要配置说明

以下几项配置参数对性能和正常运行起到重要作用,需要正确设置。

(1)线程数

event-threads项设置,过小无法充分发挥多核CPU的性能,过大造成不必要的线程切换开销,推荐设置为CPU的核数。

(2)最小空闲连接数(2.x以上版本不需要该项,1.x版本需要)

min-idle-connections项设置,过小则在高并发下会有报错,过大虽然不报错但在测试时不容易看出读写分离效果,推荐设置为比客户端的并发峰值稍大,详见《配置参数详解》。上面的配置范例是针对Atlas 2.X版本,没有该选项。对于Atlas 1.X版本的配置文件,需要加入该配置选项。

3. 可选配置说明

以下几项可以设置,也可以使用默认值,区别不大。

(1)Atlas的工作端口

proxy-address项配置,例如proxy-address = 0.0.0.0:1234代表客户端应该使用1234这个端口连接Atlas来发送SQL请求。

(2)Atlas的管理端口

admin-address项配置,例如admin-address = 0.0.0.0:2345代表DBA应该使用2345这个端口连接Atlas来执行运维管理操作。

(3)管理接口的用户名和密码

admin-username项和admin-password项设置,这两项是用来进入Atlas的管理界面的,与后端连接的MySQL没有关系,所以可以任意设置,不需要MySQL在配置上做任何改动。

(4)日志级别

以log-level项配置,分为message、warning、critical、error、debug五个级别。

(5)日志路径

以log-path项配置,如log-path = /usr/local/mysql-proxy/log。

三. 给后端mysql增加访问用户
CREATE USER ‘dbproxy’@’192.168.0.11’ IDENTIFIED BY ‘***’;

GRANT USAGE ON * . * TO ‘dbproxy’@’192.168.0.11’ IDENTIFIED BY ‘***’ WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
GRANT SELECT , INSERT , UPDATE , DELETE , LOCK TABLES ON `c1gstudio` . * TO ‘dbproxy’@’192.168.0.11’;

加密密码
bin/encrypt 123456
/iZxz+0GRoA=

添加iptables
iptables
iptables -A INPUT -s 192.168.0.0/255.255.255.0 -p tcp -m tcp –dport 1234 -j ACCEPT

四.启动
1.启动dbproxy
cd /home/mysql/dbproxy/bin
./mysql-proxyd dbproxy start

# /usr/local/mysql-proxy/bin/mysql-proxyd dbproxy start
# /usr/local/mysql-proxy/bin/mysql-proxyd dbproxy stop
# /usr/local/mysql-proxy/bin/mysql-proxyd dbproxy restart

2.访问测试
mysql -udbproxy -h192.168.0.11 -P1234 -p
password
mysql-> show databases;
mysql> show variables like “server_id”;
+—————+——-+
| Variable_name | Value |
+—————+——-+
| server_id | 19 |
+—————+——-+
1 row in set (0.00 sec)

mysql> show variables like “server_id”;
+—————+——-+
| Variable_name | Value |
+—————+——-+
| server_id | 20 |
+—————+——-+
1 row in set (0.00 sec)

五、Atlas管理接口使用

# mysql -u管理用户 -p管理密码 -h127.0.0.1 -P管理端口
mysql -uadmin -h192.168.0.11 -P2345 -p
password
#查看管理语句参数:
mysql> select * from help;
+—————————-+———————————————————+
| command | description |
+—————————-+———————————————————+
| SELECT * FROM help | shows this help |
| SELECT * FROM backends | lists the backends and their state |
| SET OFFLINE $backend_id | offline backend server, $backend_id is backend_ndx’s id |
| SET ONLINE $backend_id | online backend server, … |
| ADD MASTER $backend | example: “add master 127.0.0.1:3306”, … |
| ADD SLAVE $backend | example: “add slave 127.0.0.1:3306”, … |
| REMOVE BACKEND $backend_id | example: “remove backend 1”, … |
| SELECT * FROM clients | lists the clients |
| ADD CLIENT $client | example: “add client 192.168.1.2”, … |
| REMOVE CLIENT $client | example: “remove client 192.168.1.2”, … |
| SELECT * FROM pwds | lists the pwds |
| ADD PWD $pwd | example: “add pwd user:raw_password”, … |
| ADD ENPWD $pwd | example: “add enpwd user:encrypted_password”, … |
| REMOVE PWD $pwd | example: “remove pwd user”, … |
| SAVE CONFIG | save the backends to config file |
| SELECT VERSION | display the version of Atlas |
+—————————-+———————————————————+
#查看DB状态:
mysql> select * from backends;
+————-+——————-+——-+——+
| backend_ndx | address | state | type |
+————-+——————-+——-+——+
| 1 | 192.168.0.12:3306 | up | rw |
| 2 | 192.168.0.12:3306 | up | ro |
| 3 | 192.168.0.13:3306 | up | ro |
| 4 | 192.168.0.14:3306 | up | ro |
+————-+——————-+——-+——+

六.性能测试结果
从Atlas处理三类SQL操作的QPS和完成每条SQL操作的时间对比来看,将event-threads参数设置为CPU个数的2-4倍较为合理。将event-threads参数设置为CPU个数的两倍时,带来的QPS提升较为明显,将其设置为CPU个数的四倍时,QPS也有提升但不是非常明显。对于处理每条SQL操作的时间,通过提高event-threads值是没有显著效果的。

所以我们建议使用者:如果追求Atlas处理SQL请求时的QPS,将event-threads值设置为CPU个数的2-4倍。如果追求Atlas处理SQL请求的完成时间,将event-threads值设置为CPU个数即可。

下文主要测试了通过Atlas转发SQL请求与直连DB发送SQL请求这两种情形下的性能差距,和event-threads值对Atlas的性能影响。从测试结果来看,Atlas性能表现较为优秀,并没有明显的性能下降。同时在测试中发现Atlas系统属于CPU密集型任务,相对于磁盘IO和内存占用率而言,Atlas对CPU消耗显得最为明显,所以建议在部署Atlas的时候需要优先考虑服务器的CPU性能。

https://github.com/Qihoo360/Atlas/wiki/Atlas%E7%9A%84%E6%80%A7%E8%83%BD%E6%B5%8B%E8%AF%95

Posted in 高可用/集群, haproxy/Atlas.


6月30日将迎来人类迎来史上第26次闰秒可引起部分linux系统重启

国际地球自转和参考坐标系统服务(IERS)将在格林威治时间2015年6月30日午夜增加一闰秒(维基百科关于闰秒的说明),由于Linux kernel和Posix关于NTP时间跳变的标准不同,将在2015年6月30日23:59:59 跳变到2015年7月1日后引起ntpd进程锁死,从而造成部分开启ntp服务的linux系统重启。

另外,群友“沈阳-任浩”补充几点说明关于调整闰秒可能导致 kernel hang 住的问题:
1. RHEL3/RHEL6所有系统不受该问题的影响。
2. RHEL4内核版本在kernel-2.6.9-89.EL (RHEL4.8)及以上,RHEL5内核版本在
kernel-2.6.18-164.el5(RHEL5.4)及以上的系统不受该问题的影响。
3. 其他RHEL4和RHEL5的系统有可能发生该问题,建议尽快升级至上述版本或更高
版本以规避该问题。

a. 若由于其他原因实在无法进行内核升级,且应用对时间的敏感度不是非常高,
容许有1秒钟的差值,有如下建议:
对于使用ntpd服务进行时间同步的RHEL,至少提前1天停止ntpd服务。并确保每台
机器上安装的tzdata的版本低于2011n-2(不 包含该版本)。
对于不使用ntpd服务进行时间同步的RHEL,确保每台机器上安装的tzdata的版本低
于2011n-2(不包含该版本)。
从而使系统不进行闰秒调整,待该事件完成之后,再可启动ntpd服务进行同步,或
者手动修改时间为正确时间。

提示:对于内部的以RHEL作为NTP服务器的系统,它是NTP服务器的同时,也是使用
ntpd服务与更上层NTP服务器进行时间同步的客户端, 故上述方法也适用于该系统。
b. 若由于其他原因实在无法进行内核升级,但应用对时间的敏感度非常高,不容
许有1秒钟的差值,则有可能发生kernel hang住的问题,尽管这个可能性是非常小的。
如果发生问题,可考虑重启该系统恢复。

根据这个情况,我有找到了相应的解决方法:
如果您的相关设备是使用Linux kernel 为2.6.18-164.e15以前的Linux系统,请做如下预防工作:
1、2012年6月28日当天(北京时间23点以前)先确认ntp服务已同步,然而关闭ntpd服务。
2、2012年7月2日(北京时间8点以后)当天开启ntpd服务,并确认ntp服务已同步。
对照上面的解决方法,我检测了我所有服务器(100多台,累死了),发现rhel5.4服务器的内核都为2.6.18-164.e15,但都没有开启ntp服务,而所有的SUSE Linux Enterprise Server 10 的linux系统里内核都是2.6.16.60-0.54.5-smp,就1台数据库服务器启动了ntp服务,下面演示我是如何如何的解决这个问题的:
1、先查看服务器是否有开启ntp服务,可以使用以下命令查询:
netstat -aunl|grep123 #由于123是ntp启动的端口,所有可以使用netstat来查看ntp的123端口,查看ntp服务是否启动;

ps -ef|grep ntp #查看ntp服务的进程是否在后台运行;

service ntp status #使用service来查看ntp服务的启动状态
下面是我使用这3中方法进行的检测结果

加载中…

可以看得我的服务器里ntp服务正在运行
关闭是方法如下:
直接杀掉ntp的进程,命令为:kill -9 $(ps -ef|grep ntp|grep -v grep|awk ‘{print $2}’);
使用service来关闭ntp,命令为:service ntp stop;
关闭后为了保证安全,还需要把ntp开机自动启动给关闭,命令为:chkconfig –level 345 ntp off;

Posted in 安全通告.

Tagged with .


PHP曝DOS漏洞可致CPU灌满 涉及多个PHP版本

近日,PHP被爆出存在远程DOS漏洞,若黑客利用该漏洞构造PoC发起连接,容易导致目标主机CPU被迅速消耗。此漏洞涉及众多PHP版本,因而影响范围极大。

漏洞产生的原因是PHP解析multipart/form-datahttp请求的body part请求头时,重复拷贝字符串导致DOS。而远程攻击者可以通过发送恶意构造的multipart/form-data请求,导致服务器CPU资源被耗尽,从而远程DOS服务器。

另据了解,在今年4月3日就有用户在PHP官网提交了PHP远程DoS漏洞(PHP Multipart/form-data remote dos Vulnerability),代号69364。由于该漏洞涉及PHP的众多版本,故其影响面较大,一经发布迅速引发多方面关注。此后,各种PoC已经在网络上流传。

此次漏洞具备如下特性:

1. 一旦被利用成功,可以在迅速消耗被攻击主机的 CPU 资源,从而达到 DoS 的目的;

2. PHP 在全球的部署量相当大,为攻击者提供了相当多可以攻击的目标;

3. PHP 官方目前仅给出了 5.4 及 5.5 版本的补丁

受此漏洞影响的软件及系统包括 PHP 的如下版本。

• PHP 5.0.0 – 5.0.5

• PHP 5.1.0 – 5.1.6

• PHP 5.2.0 – 5.2.17

• PHP 5.3.0 – 5.3.29

• PHP 5.4.0 – 5.4.40

• PHP 5.5.0 – 5.5.24

• PHP 5.6.0 – 5.6.8

根据绿盟漏洞检测数据显示,在提交了5596个网站中,有1400多个网站存在漏洞,中枪率约为25%。

截止到发稿为止,PHP官方已经提供了PHP 5.4.41、5.5.25、5.6.9 的补丁 ,而PHP 5.3版本补丁暂未提供,但有网友根据官方补丁,制作了PHP5.3 版本的”民间版”补丁:https://coding.net/u/simapple/p/oldphppatch/git

漏洞检测地址:https://portal.nsfocus.com/vulnerability/list/

Posted in 安全通告.

Tagged with , .