ELK日志集成

ELK介绍

  • Logstash负责从每台机器抓取日志数据,对数据进行格式转换和处理后,输出到Elasticsearch中存储。
  • Elasticsearch是一个分布式搜索引擎和分析引擎,用于数据存储,可提供实时的数据查询。
  • Kibana是一个数据可视化服务,根据用户的操作从Elasticsearch中查询数据,形成相应的分析结果,以图表的形式展现给用户。

阅读剩余部分 –

CentOS安全检查工具:chkrootkit,rkhunter

1. rootkit检查

Rootkit是一种特殊的恶意软件,它的功能是在安装目标上隐藏自身及指定的文件、进程和网络链接等信息,比较多见到的是Rootkit一般都和木马、后门等其他恶意程序结合使用。
可以使用chkrootkit来检查
官网http://www.chkrootkit.org

下载安装:

wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz
tar zxvf chkrootkit.tar.gz
cd chkrootkit-0.50
make sense
./chkrootkit

2.黑客入侵后会植入一些木马程序,会替换部分系统命令

使用Rootkit Hunter 检查

wget http://cznic.dl.sourceforge.net/project/rkhunter/rkhunter/1.4.2/rkhunter-1.4.2.tar.gz
tar zxvf rkhunter-1.4.2.tar.gz 
cd rkhunter-1.4.2 
./installer.sh --install 
rkhunter -c

3.RPM check 检查

系统完整性也可以通过rpm自带的-Va来校验检查所有的rpm软件包,有哪些被篡改了,防止rpm也被替换,上传一个安全干净稳定版本rpm二进制到服务器上进行检查:

rpm -Va > rpm.log

如果一切均校验正常将不会产生任何输出。如果有不一致的地方,就会显示出来。输出格式是8位长字符串, c 用以指配置文件, 接着是文件名. 8位字符的每一个 用以表示文件与RPM数据库中一种属性的比较结果 。. (点) 表示测试通过。.下面的字符表示对RPM软件包进行的某种测试失败:

显示字符错误源

5 MD5 校验码
S 文件尺寸
L 符号连接
T 文件修改日期 
D 设备 
U 用户 
G 用户组 
M 模式e (包括权限和文件类型)

Docker 版本升级

在CentOS中,yum安装最高版本为1.5,所以,我们需要从官网下载最新的升级
CentOS中docker升级版本非常简单

wget https://get.docker.io/builds/Linux/x86_64/docker-latest -O docker

mv -f docker /usr/bin/docker

chmod  +x  /usr/bin/docker

service docker  restart

chkconfig docker on

Nginx配置个性二级域名

最近需要配置下个性化二级域名.
效果:
访问的URL http://custom.insoz.com
实际的URL http://www.insoz.com/auth/custom

我们的做法就是通过服务器配置,将访问的url转换为实际的url

下面我们来用nginx配置。配置如下:

server {
        listen       80;
        server_name  *.insoz.com;
        if ( $host ~* (\b(?!www\b)\w+)\.\w+\.\w+ ) {
            set $subdomain $1;
        }
        location / {
            rewrite ^/$ /auth/$subdomain last;
            proxy_pass http://www.insoz.com/;
        }
    }

其中的if,是用于过滤某些特殊的二级域名,比如www,然后获取二级域名的变量值。

rewrite转化为对应的目录

rewrite ^/$ /auth/$subdomain last;

再加上nginx的反向代理功能:

proxy_pass http://www.insoz.com/;

就可以实现了。

这样配置之后,除了if中过滤的二级域名,其他的二级域名{sudomain}.insoz.com,对于服务器,其真实的路径都是www.insoz.com/auth/{sudomain}。

如果url有多种路径规则,则需要一一进行配置。

apache,nginx,php隐藏版本号

当黑客入侵一台服务器时,首先会”踩点”, 这里的”踩点”,指的是了解服务器中运行的一些服务的详细情况,比如说:版本号,当黑客知道相应服务的版本号后,就可以寻找该服务相应版本的一些漏洞来入侵,攻击,所以我们需要隐藏这些版本号来避免一些不必要的问题

我们来测试一下

insoz:~ insoz$ curl -I http://127.0.0.1/phpinfo.php
HTTP/1.1 200 OK
Server: nginx/1.5.0
Date: Thu, 18 Jun 2015 02:39:32 GMT
Content-Type: text/html
Connection: keep-alive
Vary: Accept-Encoding
X-Powered-By: PHP/5.3.1

可以看到我们的服务器nginx和php版本都暴露了. 下面我们来看隐藏的方法

首先来看nginx中隐藏版本号的方法:
在nginx配置文件nginx.conf中,加入以下代码

server_tokens off;

apache中隐藏版本号的方法:
在apache配置文件httpd.conf中,加入以下代码

ServerTokens Prod
ServerSignature Off

再来看php中隐藏版本号的方法:
在php配置文件php.ini中,加入以下代码

expose_php = Off

好了,修改完毕重启服务,我们再来测试一下:

insoz:~ insoz$ curl -I http://127.0.0.1//phpinfo.php
HTTP/1.1 200 OK
Server: nginx
Date: Thu, 18 Jun 2015 02:41:47 GMT
Content-Type: text/html
Connection: keep-alive
Vary: Accept-Encoding

Linux进程管理:Supervisor

一.介绍

Supervisord是用Python实现的一款非常实用的进程管理工具。supervisord会帮你把管理的应用程序转成daemon程序,而且可以方便的通过命令开启、关闭、重启等操作,而且它管理的进程一旦崩溃会自动重启,这样就可以保证程序执行中断后的情况下有自我修复的功能。

二.安装配置

supervisor的安装非常简单

1.替换yum源

这里我采用yum来安装,首先,需要替换成阿里云的yum源

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup
mv /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel-testing.repo.backup
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
yum makecache

2.安装相关组件及supervisor

yum install python-setuptools python-setuptools-devel supervisord -y

相关目录

配置文件:/etc/supervisord.conf
进程配置文件:/etc/supervisord/*.conf, 每个进程一个配置文件,根据服务器相关软件修改路径

服务管理

service supervisord start
service supervisord stop
service supervisord restart

修改配置文件
[官方文档]

mkdir /etc/supervisord/   #创建进程管理目录
echo "[include]" >> /etc/supervisord.conf
echo "files = /etc/supervisord/*.conf" >> /etc/supervisord.conf
添加web管理界面
echo "
[inet_http_server]         ; inet (TCP) server disabled by default
port=0.0.0.0:9001        ; (ip_address:port specifier, *:port for all iface)
username=admin              ; (default is no username (open server))
password=123456" >> /etc/supervisord.conf
http://192.168.1.1:9001

三.添加管理进程

cat > /etc/supervisord/gearmand.conf < < EOF
[program:gearmand]
command=/usr/local/sbin/gearmand
priority=1
numprocs=1
autostart=true
autorestar=true
startretries=10
stopsignal=KILL
stopwaitsecs=10
redirect_stderr=true
stdout_logfile=/etc/supervisord/gearmand.log
EOF

[官方文档]

mfs分布式文件系统-(测试篇)

安装篇请看:mfs分布式文件系统-(安装篇)

配置篇请看:mfs分布式文件系统-(配置篇)
mfs测试,接上文

一.删除,回收站测试

1.设置删除文件后空间回收时间
默认回收时间为1天,86400秒

[root@mfsclient data]# mfssettrashtime 86400 /data/mfs
/data/mfs: 86400

查看设置

[root@mfsclient data]# mfsgettrashtime /data/mfs
/data/mfs: 86400

2.trash
删除的文件可以通过trash找回,安装mfsclient后,可以通过 -m 参数来挂载mfsmeta文件系统来查看trash

[root@mfsclient /]# mfsmount /data/mfs -m -H mfsmaster
mfsmaster accepted connection with parameters: read-write,restricted_ip
[root@mfsclient /]# cd /data/mfs
[root@mfsclient mfs]# ls
sustained  trash

所有在mfs中被删除的文件都会在trash中,所以要找回时,使用-m参数挂载即可
sustained 是正在被读取的文件,等读取结束后会被删除到trash中
测试trash

[root@mfsclient mfs]# touch insoz.com/index.html
[root@mfsclient mfs]# ls
insoz.com
[root@mfsclient mfs]# rm -rf insoz.com
trash中
[root@mfstrash trash]# ls
00000028|insoz.com  0000002B|insoz.com|index.html  undel
[root@mfstrash trash]#

文件名由一个八位十六进制的数i-node和被删文件的文件名组成,在文件名和i-node之间用|隔开
将这些文件移动到undel目录下,将会恢复原始文件到正确的MooseFS文件系统的路径下

mv 00000030\|insoz.com\|index.html undel/

二.破坏性测试

1.把环境中的数据存储服务器依次停止,剩下一个,整个mfs还能继续提供服务。
然后上传一个文件,把文件副本更改为3,接着依次启动刚被关闭的另外两台数据存储服务器,再关闭刚才没有关闭的那台数据存储服务器,最后验证最后上传的那个文件是否可以正常访问,如果可以,证明文件被同步到多台数据存储服务器了。

三.元数据服务器测试

1.模拟元数据服务器进程被意外结束,执行回复操作
停止元数据服务器
[root@mfsmaster trash]# ps -ef|grep mfsmaster
root 21269 5485 0 13:48 pts/4 00:00:00 grep mfsmaster
mfs 26880 1 0 Jun02 ? 00:10:47 mfsmaster -a
[root@mfsmaster trash]# kill -9 26880
启动元数据服务器

[root@mfsmaster trash]# mfsmaster start
open files limit has been set to: 4096
working directory: /var/lib/mfs
lockfile created and locked
initializing mfsmaster modules ...
exports file has been loaded
topology file has been loaded
loading metadata ...
can't find metadata.mfs - try using option '-a'
init: metadata manager failed !!!
error occured during initialization - exiting

提示初始化数据失败
执行恢复操作

[root@mfsmaster trash]# mfsmaster -a
open files limit has been set to: 4096
working directory: /var/lib/mfs
lockfile created and locked
initializing mfsmaster modules ...
exports file has been loaded
topology file has been loaded
loading metadata ...
loading sessions data ... ok (0.0000)
loading objects (files,directories,etc.) ... ok (0.0354)
loading names ... ok (0.0354)
loading deletion timestamps ... ok (0.0000)
loading quota definitions ... ok (0.0000)
loading xattr data ... ok (0.0000)
loading posix_acl data ... ok (0.0000)
loading open files data ... ok (0.0000)
loading chunkservers data ... ok (0.0000)
loading chunks data ... ok (0.0000)
checking filesystem consistency ... ok
connecting files and chunks ... ok
all inodes: 4
directory inodes: 2
file inodes: 2
chunks: 0
metadata file has been loaded
stats file has been loaded
master < -> metaloggers module: listen on *:9419
master < -> chunkservers module: listen on *:9420
main master server module: listen on *:9421
mfsmaster daemon initialized properly

启动元数据服务器

[root@mfsmaster lib]# mfsmaster start
open files limit has been set to: 4096
working directory: /var/lib/mfs
lockfile created and locked
initializing mfsmaster modules ...
exports file has been loaded
topology file has been loaded
loading metadata ...
loading sessions data ... ok (0.0000)
loading objects (files,directories,etc.) ... ok (0.0354)
loading names ... ok (0.0354)
loading deletion timestamps ... ok (0.0000)
loading quota definitions ... ok (0.0000)
loading xattr data ... ok (0.0000)
loading posix_acl data ... ok (0.0000)
loading open files data ... ok (0.0000)
loading chunkservers data ... ok (0.0000)
loading chunks data ... ok (0.0000)
checking filesystem consistency ... ok
connecting files and chunks ... ok
all inodes: 7
directory inodes: 5
file inodes: 2
chunks: 0
metadata file has been loaded
stats file has been loaded
master < -> metaloggers module: listen on *:9419
master < -> chunkservers module: listen on *:9420
main master server module: listen on *:9421
mfsmaster daemon initialized properly

不出意外客户端会自动恢复挂载信息,并且数据正常
2.模拟进程被意外关闭,并且日志文件被损毁
kill -9 杀掉mfsmaster进程
删除mfs目录,模拟故障,启动元数据服务器,提示初始化数据失败

[root@mfsmaster trash]# mfsmaster start
open files limit has been set to: 4096
working directory: /var/lib/mfs
lockfile created and locked
initializing mfsmaster modules ...
exports file has been loaded
topology file has been loaded
loading metadata ...
can't find metadata.mfs - try using option '-a'
init: metadata manager failed !!!
error occured during initialization - exiting

从元数据日志服务器把备份文件恢复过来
把所有文件名字中的_ml去掉
mv changelog_ml.0.mfs changelog.0.mfs
mv changelog_ml.2.mfs changelog.2.mfs
mv changelog_ml.1.mfs changelog.1.mfs
mv metadata_ml.mfs.back metadata.mfs.back
执行恢复操作

[root@mfsmaster trash]# mfsmaster -a
open files limit has been set to: 4096
working directory: /var/lib/mfs
lockfile created and locked
initializing mfsmaster modules ...
exports file has been loaded
topology file has been loaded
loading metadata ...
loading sessions data ... ok (0.0000)
loading objects (files,directories,etc.) ... ok (0.0354)
loading names ... ok (0.0354)
loading deletion timestamps ... ok (0.0000)
loading quota definitions ... ok (0.0000)
loading xattr data ... ok (0.0000)
loading posix_acl data ... ok (0.0000)
loading open files data ... ok (0.0000)
loading chunkservers data ... ok (0.0000)
loading chunks data ... ok (0.0000)
checking filesystem consistency ... ok
connecting files and chunks ... ok
all inodes: 4
directory inodes: 2
file inodes: 2
chunks: 0
metadata file has been loaded
stats file has been loaded
master < -> metaloggers module: listen on *:9419
master < -> chunkservers module: listen on *:9420
main master server module: listen on *:9421
mfsmaster daemon initialized properly

需要注意的是,metadata.mfs.back 必须与日志文件在一起才能正常恢复
启动元数据服务器

mfsmaster start

客户端挂载,数据正常