月度归档:2017年03月

iMobiTrax 3.8安装激活

iMobiTrax是一款Mobile Tracking Tool,用于追踪移动广告流量,常用于Mobile Media Buy领域。由于安装比较复杂,授权也比较昂贵,这里给出安装方法。破解方法参考自这篇文章:《iMobiTrax3.8 解除登陆验证的方法

  • 系统环境:CentOS 7
  • 软件环境:LNMP

安装基础组件

首先安装MySQL,由于CentOS 7中默认的MySQL源被移除,这里有两种方式解决,安装Mariadb替换MySQL,或者使用rpm包安装MySQL。这里使用后者

wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
rpm -ivh mysql-community-release-el7-5.noarch.rpm
yum update
yum install mysql-server
systemctl enable mysqld
systemctl start mysqld

此时的MySQL是未经初始化的,root处于无密码保护状态,匿名登录等也处于开放状态,所以需要配置,执行以下命令,按提示操作

mysql_secure_installation

重启mysqld

systemctl restart mysqld

然后安装nginx,这一步比较简单,直接yum安装即可

yum install nginx

接下来,安装php以及php扩展。这里安装的php版本为5.4(经测试,iMobiTrax不兼容php 7.0):

yum install php-fpm php-mcrypt php-curl php-cli php-mysql php-gd php-intl php-xsl php-mbstring

这里还有一个扩展需要手动安装:ioncube_reloader

首先,下载ioncube_loaders: 下载地址,下载完成后,得到一个.tar.gz的压缩包

ioncube_loaders_lin_x86-64.tar.gz

解压后,里面有很多的.so文件,其中以5.4为后缀的就是我们需要的php5.4插件

ioncube_loader_lin_5.4.so

接下来,将这个.so文件放入php的扩展库中:

cp ioncube_loader_lin_5.4.so /usr/lib64/php/modules/
chmod 755 /usr/lib64/php/modules/ioncube_loader_lin_5.4.so

然后再/etc/php.ini中添加这个插件路径

zend_extension=/usr/lib64/php/modules/ioncube_loader_lin_5.4.so

重启php-fpm

systemctl restart php-fpm

至此,基础组件安装完成。

配置

接下来进行软件和网站配置。首先修改/etc/php-fpm.d/www.conf。按照以下内容修改:

listen = /var/run/php-fpm/php-fpm.sock

listen.owner = nobody
listen.group = nobody

user = nginx
group = nginx

修改/etc/php.ini,按照以下内容修改

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = Asia/Shanghai

修改session文件夹权限

chgrp ngxin /var/lib/php/session
chomd -R 733 /var/lib/php/session

下面,配置MySQL

修改/etc/my.conf文件,关闭Strict Mod。具体为将sql_mod修改为如下:

# Recommended in standard MySQL setup
sql_mod=''

然后,登录mysql,创建表

mysql -u root -p
> create database imobitrax;

最后,配置Nginx。(以下使用www.domain.com代替你的域名,111.222.111.222代替你服务器的IP)。

首先,下载iMobiTrax的安装包(下载地址),下载解压后,得到imobitrax_3.8_install文件夹,将其中的Upload文件夹复制并重命名为www.domain.com,放在/var/www/目录下。现在目录结构和内容如下:

[root@centos ~]# cd /var/www/www.domain.com/
[root@centos www.domain.com]# ls -la
total 276
drwxr-xr-x  7 root root  4096 Mar 14 17:05 .
drwxr-xr-x  6 root root  4096 Mar 14 17:05 ..
drwxr-xr-x 10 root root  4096 Mar 14 17:13 account
drwxr-xr-x  8 root root  4096 Mar 14 17:04 app
-rw-r--r--  1 root root 65956 Mar 14 17:04 click2.php
-rw-r--r--  1 root root 66029 Mar 14 17:04 click.php
-rw-r--r--  1 root root  9345 Mar 14 17:04 ctrack.php
-rw-r--r--  1 root root  2172 Mar 14 17:04 error.php
-rw-r--r--  1 root root  1150 Mar 14 17:04 favicon.ico
-rw-r--r--  1 root root  4368 Mar 14 17:04 fpx.php
-rw-r--r--  1 root root 39987 Mar 14 17:04 go.php
drwxr-xr-x  4 root root  4096 Mar 14 17:04 images
-rw-r--r--  1 root root  2172 Mar 14 17:04 index.php
-rw-r--r--  1 root root  4887 Mar 14 17:04 ipx.php
drwxr-xr-x  2 root root  4096 Mar 14 17:04 jump
-rw-r--r--  1 root root 13722 Mar 14 17:04 lp_track.php
-rw-r--r--  1 root root  4903 Mar 14 17:04 next.php
-rw-r--r--  1 root root  4952 Mar 14 17:04 track.php

修改./account/mt/mt_config.php

<?PHP
include ('mt_auth.php');
$database   = 'imobitrax'; // database name
$user_name  = 'root'; // database user name
$password   = 'MYSQL_PASSWORD'; // database password for defined user name
$server     = 'localhost'; // host server name. Default values are localhost or 127.0.0.1 Normally will not have to be changed...**CASE SENSITIVE
$port       = 3306; // port 3306 is default. Change only if you know what you are doing...
$ipOverride = '127.0.0.1'; // overrides the ip address for localhost. It is very rare that this will need to be changed. Do so only if told by support.

然后,编辑/etc/nginx/nginx.conf,注释掉其中的server字段

#    server {
#        listen       80 default_server;
#        listen       [::]:80 default_server;
....
#    }

在/etc/nginx/conf.d/中,添加自己的server配置。新建/etc/nginx/conf.d/domain.conf

server {
        listen 80;
        server_name www.domain.com;
        root /var/www/www.domain.com;

        index index.php index.html;

        location / {
               try_files $uri $uri/ =404;
        }

        location ~ \.php$ {
                try_files $uri =404;
                fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
        }
}

重启使以上配置生效

systemctl restart php-fpm
systemctl restart nginx
systemctl restart mysql

激活破解

在/var/www/www.domain.com/目录下,依次创建文件夹

mkdir -p /var/www/www.domain.com/~imobi/license

在这个文件夹中,新建api2.php,内容如下:

<?php
echo '{"info1":"%07%B5-%3C%D7%F5%87%A7","info2":"%07%B5-%3C%D7%F5%87%A7","iVersion":"3.7","iDate":"1411404810","dVersion":"1.4","dDate":"1352822617","info":"rc%A1%9F%3C%A7%F4%EC%F0%27%EB%B3%3A%83%F2%11"}';
?>

然后,在浏览器中访问

http://111.222.111.222/~imobi/license/api2.php

如果显示内容为

{"info1":"%07%B5-%3C%D7%F5%87%A7","info2":"%07%B5-%3C%D7%F5%87%A7","iVersion":"3.7","iDate":"1411404810","dVersion":"1.4","dDate":"1352822617","info":"rc%A1%9F%3C%A7%F4%EC%F0%27%EB%B3%3A%83%F2%11"}

则配置正确。

下面在iptables中加入转发规则,将激活请求的服务器修改为自身。首先清除之前的规则

iptables -F
iptables -t nat -F

然后加入新规则

iptables -t nat -AOUTPUT -d 50.28.102.240 -j DNAT --to 111.222.111.222

使用以下,命令查看规则

iptables -L -t nat

如果在Chain OUTPUT中只有以下规则,则配置正确

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
DNAT       all  --  anywhere             50.28.102.240        to:111.222.111.222

持久化规则

service iptables save

至此,激活准备完成。

安装

在完成了以上内容后,安装就十分简单了,直接访问以下地址,按说明完成即可

http://www.domain.com/account/install.php

常见错误

  • The form could not be submitted. Click here to try again

这个错误是由session引起的。请检查两个配置。1、nginx配置中的server_name字段使用的是带有www的域名还是不带www的域名。和网站访问的域名一致即可;2、php的session文件夹权限是否可写。

如果还是无法确认,请查看以下两个日志

/var/log/php-fpm/error.log
/var/log/nginx/error.log
  • This domain(www.xxx.com) is not licensed to run iMobiTrax

这个错误表示激活失败。首先访问如下链接,看看是否正确显示

http://服务器IP地址/~imobi/license/api2.php

如果不正确显示,请检查nginx配置。可以参考上文中的配置;如果正确显示,那一定是iptables的转发规则出错了,依次执行以下即可:

iptables -F
iptables -t nat -F
iptables -t nat -AOUTPUT -d 50.28.102.240 -j DNAT --to 服务器IP地址

PHP 7手动添加Module最佳实践

从php5转到php7后,有部分module并没有直接整合,所以无法通过类似下面的方式安装:

apt-get install php7.0-xxx

遇到这种情况,我们就需要手动下载module并配置了。下面以ioncube扩展为例,说明手动添加module的最佳实践。

首先,下载ioncube_loaders: 下载地址,下载完成后,得到一个.tar.gz的压缩包

/root/downloads/ioncube_loaders_lin_x86-64.tar.gz

解压后,里面有很多的.so文件,其中以7.0为后缀的就是我们需要的php7.0插件

ioncube_loader_lin_7.0.so

接下来,将这个.so文件放入php的扩展库中:

cp ioncube_loader_lin_7.0.so /usr/lib/php/20151012/

默认的位置是/usr/lib/php/20151012/,如果找不到这个位置,可以用find命令找找其他的.so文件的地址:

find / -name 'gd.so' -print

接下来,在mod-available新建配置文件:

vim /etc/php/7.0/mods-available/ioncube_loader.ini

内容如下:

; configuration for php ioncube_loader module
; priority=10
zend_extension=ioncube_loader_lin_7.0.so

注意两点

  1. ioncube是zend扩展,所以这里用的是zend_extension而不是extension
  2. 插件需要优先加载,所以priority需要设置为10

接下来启用插件,cd到apache2配置目录,创建软链接

cd /etc/php/7.0/apache2/conf.d/
ln -s /etc/php/7.0/mods-available/ioncube_loader.ini 10-ioncube_loader.ini

重启apache2生效:

service apache2 restart

《Spring Boot实战》读书笔记01

还是大学毕设的时候接触过Spring MVC,那时候使用的框架是Spring、Struts2、Mybatis。当时就已经感觉配置起来实在太过麻烦,为了完成一个hello world,在不熟悉的情况下花了一天才把环境勉强搭好。对比世界上最好的语言php,门槛高了太多。以至于之后我第一年工作用php简直不要太舒服。

不过,由于新的工作环境,我又得拾起当年那套java体系,好在技术不断迭代,类似ruby on rails的Spring Boot出现了,据说能减少很多的配置成本。既然准备学习,一本好书是必要的,所以我选择的普遍推荐的《Spring Boot实战》(PDF下载)

首先,安装spring boot cli,书中提到了多种安装方式,由于我是以Windows作为开发环境,所以选择了下载压缩包。这里给出下载地址,在这个页面中选择最新的spring boot cli版本下载即可。我选择的是:

http://repo.spring.io/release/org/springframework/boot/spring-boot-cli/1.5.2.RELEASE/spring-boot-cli-1.5.2.RELEASE-bin.zip

然后添加以下环境变量

在cmd输入spring命令,正确返回版本信息即为成功。

spring --version

IDE我选择的是书中推荐的IntelliJ IDEA,开始下载的Community版本,但是安装后才发现Community版本并不支持Spring Boot。所以还是下载了Ultimate版。很想支持正版,无奈价格实在超出负担,所以选择了自建激活服务器,不是关键内容,这里就不具体说方法了,给个传送门

大概描述就是启动一个授权服务器,然后用supervisor维持服务。贴一个supervisor配置文件:

# /etc/supervisor/conf.d/intellijserver.conf

[program:intellijserver]
command=/usr/bin/intellijserver
autostart=true
autorestart=true
user=root
log_stderr=true
logfile=/var/log/intellijserver.log

考虑到可能使用数据库,我起了一个ubuntu server,安装了mysql-server。

环境已经搞定,下面开始我的第一个spring boot应用。按照书中的方法,创建一个readinglist的应用,创建时选择Spring Initializr:

组件勾选Web、Thymeleaf、JPA、H2

然后,第一个应用就创建成功了

总得来说,虽然还是无法和php、python这种脚本语言相比,但是Spring Boot确实简化了不少操作。

CentOS 7配置pptpd

安装所需要的服务组件

yum install -y ppp pptpd 
yum install -y iptables iptables-services

首先配置/etc/ppp/options.pptpd文件,找到网络和路由设置,我们设置ms-dns为8.8.8.8和8.8.4.4

# Network and Routing

# If pppd is acting as a server for Microsoft Windows clients, this
# option allows pppd to supply one or two DNS (Domain Name Server)
# addresses to the clients.  The first instance of this option
# specifies the primary DNS address; the second instance (if given)
# specifies the secondary DNS address.
ms-dns 8.8.8.8
ms-dns 8.8.4.4

接下来,创建PPTP的用户,编辑/etc/ppp/chap-secrets

# Secrets for authentication using CHAP
# client        server  secret                  IP addresses
your_username * your_password *

接下来修改/etc/pptpd.conf,去除localip和remoteip

# (Recommended)
localip 192.168.0.1
remoteip 192.168.0.234-238,192.168.0.245

接下来,编辑/etc/sysctl.conf文件,允许IP forwarding,添加net.ipv4.ip_forward=1到文件结尾

# System default settings live in /usr/lib/sysctl.d/00-system.conf.
# To override those settings, enter new settings here, or in an /etc/sysctl.d/<name>.conf file
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv4.ip_forward=1

使配置生效

sysctl -p
systemctl restart pptpd.service
systemctl enable pptpd.service

至此,pptpd的配置就完成了,接下来使用iptables配置转发规则。首先关闭firewalld

systemctl stop firewalld
systemctl mask firewalld

添加iptables规则

iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 1723 -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j MASQUERADE

保存规则

service iptables save
service iptables start

iptables简单规则性能测试

近日,收到一个需求,需要对iptables的性能进行测试,确定是否能够在一些场景替换掉硬件防火墙(F5)。由于测试在内网进行,这里仅贴出测试方案和测试结果。

测试方案

首先使用脚本生成6w个左右的iptables黑名单规则

#!/usr/bin/env python2.7

with open('./ips.txt', 'w') as f:
    for x in range(100,101):
        for y in range(255):
            for z in range(255):
                f.write('iptables -I INPUT -s '+'192.'+str(x)+'.'+str(y)+'.'+str(z)+' -j DROP\n')

生成的规则如下

iptables -I INPUT -s 192.100.0.1 -j DROP
...
255x255 ips
...
iptables -I INPUT -s 192.100.255.255 -j DROP

将这些规则写入到被测服务器的iptables中。

然后在LoadRunner中建立测试ip池,地址范围为192.100.0.1 ~ 192.100.1.255共计510个。使用LR以100个的并发选择测试ip池中的ip对被测服务器进行访问。

测试结果

  1. 测试ip池中的所有访问请求均得到超时返回。即防火墙有效
  2. 测试过程中,使用top命令观察系统负载抖动<0.01。即未产生较高负载
  3. 使用黑名单以外的ip访问被测服务器80端口,得到httpd的正确返回。即未影响到正常服务。

局限性

  • 仅对简单的drop规则
  • 仅测试简单的连接
  • 仅测试静态页面
  • 规模较小

CentOS 7保存iptables规则

使用iptables命令生成的防火墙规则在reboot后会丢失,为了防止这种情况发生,我们需要保存已经生成的规则。

首先关闭firewalld

systemctl disable firewalld

然后安装iptables-services,虽然不安装就能执行命令,但是如果要作为service则需要安装这个包

yum install iptables-services

使iptables服务生效(随系统启动):

systemctl enable iptables

然后,用下面的命令就可以保存之前的规则了

service iptables save

参考:

serverfault: Centos 7 save iptables settings

CentOS 7修改主机名

执行hostnamectl命令,可以看见主机信息:

[root@lixxxx-xx ~]# hostnamectl
   Static hostname: localhost.localdomain
Transient hostname: lixxxx-xx.members.linode.com
         Icon name: computer-vm
           Chassis: vm
        Machine ID: 4f09fa5fdd3642fa85221d7c11370603
           Boot ID: c49ea73c7c5d4dfa9b0aa0d47d9318ef
    Virtualization: kvm
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 4.10.1-1.el7.elrepo.x86_64
      Architecture: x86-64

要修改主机名,只需执行以下命令(例如将主机名修改为“centos”)

hostnamectl set-hostname centos

重启生效

Linode CentOS 7应用BBR算法

在之前的文章《在Linode上应用BBR算法》中,介绍了如何在Linode VPS上更新内核应用BBR算法。那篇文章中使用的是Ubuntu 16.04。这里把CentOS 7该如何操作进行介绍。方法基本相同,所以其中步骤就简单描述了。

首先更新内核(el7地址):

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
yum --enablerepo=elrepo-kernel install kernel-ml -y

在执行最后一条命令时,可能出现如下报错,

grubby fatal error: unable to find a suitable template

但最终会显示安装完成:

Installed:
  kernel-ml.x86_64 0:4.10.1-1.el7.elrepo
Complete!

出现这个错误的原因是grub没有生成对应的配置文件,导致配置出错。只需再执行以下命令即可,命令以及输出如下:

[root@centos ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-4.10.1-1.el7.elrepo.x86_64
Found initrd image: /boot/initramfs-4.10.1-1.el7.elrepo.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-514.10.2.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-514.10.2.el7.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-514.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-514.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-4f09fa5fdd3642fa85221d7c11370603
Found initrd image: /boot/initramfs-0-rescue-4f09fa5fdd3642fa85221d7c11370603.img
done

现在再查看一下现在的grub配置

[root@centos ~]# egrep ^menuentry /etc/grub2.cfg | cut -f 2 -d \'
CentOS Linux (4.10.1-1.el7.elrepo.x86_64) 7 (Core)
CentOS Linux (3.10.0-514.10.2.el7.x86_64) 7 (Core)
CentOS Linux (3.10.0-514.el7.x86_64) 7 (Core)
CentOS Linux (0-rescue-4f09fa5fdd3642fa85221d7c11370603) 7 (Core)

第一个就是刚刚添加的新内核,现在把它设置为默认。

grub2-set-default 0

“0”表示选择第一个配置文件。

接下来,将linode主机中的启动方式修改为grub2,具体的方法在之前的文章里有详细描述,这里就不重复了。重启:

reboot

重启后,查看是否已经更新为新的内核

[root@centos ~]# uname -r
4.10.1-1.el7.elrepo.x86_64

此时,再按照前篇文章所说,执行

echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
sysctl -p

确认bbr已经配置成功后,监测是否运行

[root@centos ~]# lsmod |grep bbr
tcp_bbr                16384  0

出现以上tcp_bbr服务信息即已成功。

参考:

Windows 10启用内置Linux Bash

Windows10内置的是一个Beta的Ubuntu 14.04 LTS,用户可以从控制面板的程序的启用组件来启用他,然后进Bash命令行体验。

步骤一,开启开发人员模式

打开“设置”

选择“更新和安全”

开启“开发人员模式”

步骤二,启用Linux Bash功能

搜索进入“程序和功能”面板:

选择“左侧的启用或关闭Windows功能”选项

选中以下选项,并确定

完成后,重启电脑。

步骤三,下载Bash

打开Powershell或者cmd,执行bash命令,系统会提示下载