有个大佬晚上说他服务器被D了,大佬的服务器是我在负责运维,我记得我做过安全测试,前端cdn已经把后端的ip隐藏了。于是就在找原因。

QQ20190331-135248@2x.png
后来通过沟通知道,原来是新开的一个二级域名,直接指向了源服务器,bj.xxxxxx.xxx
通知大佬添加个cdn,域名做别名解析后,我就开始分析,这时候有人说nginx或者前端做一个代理,禁止ip直接访问,正好服务器是用的nginx。直接nginx.conf就可以禁止ip直接访问网站了。
QQ20190331-135305@2x.png
QQ20190331-135312@2x.png
主配置文件看到了vhost的配置文件
QQ20190331-135319@2x.png
找到配置文件后,!!!!先备份先备份先备份!!!!!!。
在按照正常的配置修改

server{
server_name _;
retrun 400;
}

发现主站也返回了400,无法访问。后来测试了一阵,(幸好是晚上。。。。。。线上服务器)
还是在主配置中修改server块。
QQ20190331-135326@2x.png
这里server_name直接填写的ip地址。
重启了下nginx -s reload,发现没有问题。功能实现了。
接下来是分析日志文件。
将日志文件down下来。最好不要再服务器弄,有时候日质量大对性能影响还是很大的。

开始我就怀疑是cc攻击。脱下来之后日志文件。

[bash]
root@knickers-ubuntu:/home/knickers/桌面# cat xxxxxx.log |awk '{print $1}'|sort|uniq -c|sort -nr|head -10
[/bash]

QQ20190331-135333@2x.png
上一条的命令是显示访问前10位的ip地址。用来查找攻击源。这里看到前三的ip访问量异常。

cat xxxxxx.log |awk '$4>="[02/Jan/2018:"' xxxxxxx.log|awk '{print $1}' |sort|uniq -c|sort -nr|head -10

QQ20190331-135343@2x.png
这条命令是分析2018/1/2日以后的攻击日志排行前十。可以看出,当天攻击的ip就是前三个了。
这里我通过iptables给这三台服务器ban掉。以后任何数据都drop。


iptables -I INPUT -s 61.160.245.190 -j DROP
iptables -I INPUT -s 61.174.50.66 -j DROP
iptables -I INPUT -s 180.97.172.9 -j DROP

至此,此次响应就到这,,,其实也不算响应,只不过是运维在服务器遭受攻击后一种分析路径。(日志分析还是比较重要的,不只是在排错过程中)
顺便再服务器用户目录下新建readme20180102.txt记录本次修改。(要有个好习惯)

QQ20190331-135351@2x.png
顺便追查了下61.160.245.xxx/61.174.50.xxx同属一个主机供应商,应该是服务器被攻击了。

# cat xxxx.log |awk '{print $1}'|sort|uniq -c > 1.txt

QQ20190331-135530@2x.png
可以看到同一B段的还是有些主机被用来做僵尸机了。
QQ20190331-135537@2x.png

情况是两台机器

master(10.14.2.155)
slave(10.14.2.236)
互相能ping通
QQ20190331-134708@2x.png
先关防火墙(仅限内网,外网不建议)

[root@localhost /]# chkconfig iptables off 
[root@localhost /]# service iptables stop
[root@localhost ~]# yum install mysql mysql-server  mysql-devel -y

两台机器安装mysql
安装完成,启动Mysql服务:

service mysqld start

一、创建同步资源:
修改mysql密码:

mysqladmin -u root password 'root'

创建同步用户 repl,密码123456

create user 'repl' identified by '123456';

用户建好后需要给其设置一些权限,比如写入查询建表登录等。
master命令:

grant all privileges on *.* to 'repl'@'*' with 
grant option;grant all privileges on *.* to 'repl'@'%' with grant option;
grant all privileges on *.* to 'repl'@'localhost' with grant option;
grant all privileges on *.* to 'repl'@'Master' with grant option;
flush privileges;

slave命令:

grant all privileges on *.* to 'repl'@'*' with grant option;
grant all privileges on *.* to 'repl'@'%' with grant option;
grant all privileges on *.* to 'repl'@'localhost' with grant option;
grant all privileges on *.* to 'repl'@'Slave' with grant option;
flush privileges;

QQ20190331-134723@2x.png

创建同步数据库:

create database repldb;
show databases;

QQ20190331-134730@2x.png
接下来测试创建用户登录Mysql

mysql -urepl -p123456

2、主从配置

修改master的mysql配置文件mycnf,在mysqld模块下添加如下选项(默认在/etc/my.cnf,找不到请find命令查找):

log-bin=mysql-bin #表示启用mysql二进制日志, 
#该项必须要启用,否则mysql主从不会生效。
max_binlog_size=500M #表示每个binlog文件最大大小,
#当此文件大小等于500M时,会自动生成一个新的日志文件。
#注意:一条记录不会写在2个日志文件中,所以有时日志文件会超过此大小。

server-id=1 #表示mysql服务器ID,该ID必须在该主从中是唯一的,
#默认是1,该ID可以自行自定义,但必须为数字。

binlog-do-db=repldb #表示需要同步的数据库名字,如果是多个数据库,就以此格式再写一行即可。
binlog-ignore-db=mysql #表示不需要同步的数据库名字,如果是多个数据库,就以此格式再写一行即可。
#如不加binlog-do-db和binlog-ignore-db,默认同步复制整个mysql数据库。

innodb_flush_log_at_trx_commit=1 #当MySQL的存储引擎是InnoDB时,表示每次事务提交时,刷出日志。
#虽然性能较慢,但是能够保证强一致性。
sync_binlog=1 #设置MySQL在每次事务提交后,执行一次磁盘同步指令,#将binlog_cache中的数据强制写入磁盘。

#最后面两个参数可以根据实际生产环境对数据一致性的刚醒需求程度来决定是否添加。 

为了让备份机器同步时能够通过repl身份登录主节点,需要在master一root登录mysql ,给slave的用户赋予replication slave权限:

mysql -uroot -p
grant replication slave,file on *.* to 'repl'@'10.14.2.236' identified by '123456';
flush privileges;
use mysql;
select user,repl_slave_priv from user where user='repl';

查看权限
QQ20190331-134744@2x.png
配置后重启mysql

service mysqld restart

接下来锁住Master的表,禁止写权限,并记录日志文件名和起始位置、

flush tables with read lock;
show master status;
show master status\G;

QQ20190331-134752@2x.png
接下来操作是Slave端
修改slave的my.cnf:

server-id=2
replicate-do-db=repldb
replicate-ignore-db=mysql

重启mysql:service mysqld restart

mysql -uroot -p
show slave status;
show slave status\G;

在Slave执行下面命令。创建Slave到Master的Replication:

slave  stop;
CHANGE MASTER TO MASTER_HOST='10.14.2.155',MASTER_USER='repl',MASTER_PASSWORD='123456',MASTER_PORT=3306,MASTER_CONNECT_RETRY=60,MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=106;
slave start;
show slave status\G;

QQ20190331-134801@2x.png
在执行 CHANGE MASTER TO 语句之前,一定要先执行 SLAVE STOP 指令。MASTER_HOST 表示需要进行同步的 MySQL 库所在的主机名,可以写 IP 地址,也可以填写 HOSTNAME。MASTER_LOG_FILE 和 MASTER_LOG_POS 一定要和在 Master 端执行show master status 命令的结果保持一致,否则无法同步。最后需要执行 SLAVE START 指令,开始主从同步。
3、接下来在master执行解锁:unlock tables;
三、测试主从复制:
1、在master登录并在其中创建表test,并插入数据,然后查看slave中数据是否存在。
master:

mysql -uroot -p
use repldb;
create table test(tc1 int, tc2 int);
insert into test values(1,2);
insert into test values(3,4);

QQ20190331-134812@2x.png
slave:

mysql -uroot -p
use repldb;
select * from test;

可以看到,数据已经同步过来了。
QQ20190331-134822@2x.png

利用python-pxssh实现ssh暴力破解,昨天的文章中完成了利用pexpect来执行登录ssh的操作,今天利用pxssh来进行暴力破解,pxssh是一个在pexpect库中的专用脚本,不需要单独安装,有的python版本可以直接import pxssh,有的则需要from pexpect import pxssh 来进行包含,这个根据各自版本进行修改。我的是后者的方式。
源码如下:(存在word中了。。。。代码就成两行,就截图了)

QQ20190331-133949@2x.png
QQ20190331-134100@2x.png
QQ20190331-134114@2x.png
QQ20190331-134124@2x.png

上课需要用c++,老师统一使用vs,Mac系统表示捉急,于是想了下比较流行的docker,顺便平时还能联系下linux知识,不然的话平时也不经常用linux了,首先是mac安装docker,(其实docker machine的原理是通过vbox模拟了一个存在docker环境的系统,在通过ssh连接)。
这里我推荐使用docker toolbox,因为还能有vbox自由度比较高。

QQ20190331-133544@2x.png

从这里下载安装过程就不多写了,都一样。
接下来打开
QQ20190331-133550@2x.png
会提示创建一个虚拟机和下载一个iso镜像,这时候推荐能够fq,否则的话会下载很久。boot2docker.iso这个文件。
https://cdn.v2ex.com/docker/boot2docker.iso
这是一个国内镜像,mv到指定目录下,这样就可以防止下载超时了。
在打开docker terminal后,关闭窗口,不要着急使用。
这里我们打开Mac自带的shell和vbox
会看到有一个名称为defautl的虚拟机,开启它。
QQ20190331-133559@2x.png
然后,在shell端输入

[bash]
ssh docker@192.168.99.100
[/bash]

密码是tcuser

这样就可以直接连上了,可以看得出来就是一个集成docker的linux,
QQ20190331-133609@2x.png
我pull了一个python集成环境的镜像,创建一个容器。
https://c.163.com/hub#/m/home/
网易蜂巢镜像公共仓库速度都不错

[bash]
docker run –t –i yourimages /bin/bash
docker exec –it xxxxxxxx /bin/bash
[/bash]

QQ20190331-133621@2x.png
QQ20190331-133631@2x.png
上面第一个命令是创建一个容器,第二条命令时当按control+d推出后能够重新连接进入同一容器的命令。
平时一些常用的命令:

[bash]
docker ps –a
docker rm xxxxxxxx
docker images
docker rmi xxxxxxx
[/bash]

Python的tab补全功能,这样在卡法过程中能省下很多事情,代码转自一个别人的blog,就当做纪录了。http://www.cnblogs.com/xiaoyanger/p/5900580.html

Vi tab.py

[python]
#!/usr/bin/python
# python tab file
  
import sys
import readline
import rlcompleter
import atexit
import os
# tab completion
readline.parse_and_bind('tab: complete')
# history file
histfile = os.path.join(os.environ['HOME'], '.pythonhistory')
try:
    readline.read_history_file(histfile)
except IOError:
    pass
atexit.register(readline.write_history_file, histfile)
del os, histfile, readline, rlcompleter
[/python]

查看python目录

[bash]
python
import sys
sys.path
[/bash]

mv到目标路径

[bash]
mv tab.py /usr/local/lib/python2.7/
[/bash]

这样在以后写程序过程中import tab就能使用了。