您的位置:首页 > 运维架构 > Linux

第四阶段 :安全与监控 Linux监控和安全运维

2016-04-07 15:56 519 查看
监控介绍
monitor cacti(rrdtool) 画图 监控网络设备 流量 展现历史数据功能
nagios 监控服务的状态 磁盘 内存 不会记录数据 一目了然 可自己写脚本
zabbix
cacti安装
rpm -ivh http://www.lishiming.net/data/attachment/forum/epel-release-6-8_32.noarch.rpm
yum install epel-release
yum install -y httpd php php-mysql mysql mysql-server mysql-devel php-gd libjpeg libjpeg-devel libpng libpng-devel
yum install -y cacti net-snmp net-snmp-utils rrdtool
/etc/init.d/mysqld start
/etc/init.d/httpd start
/etc/init.d/snmpd start
netstat -lnp|grep 8 有端口占用时 使用 或者直接关闭 nginx
kill -9 +进程
vim /etc/httpd/conf.d/cacti.conf

把"Deny from all" 改为 "Allow from all"
/etc/init.d/httpd restart
mysql -uroot -e "create database cacti"
mysql -uroot -e "grant all on cacti.* to 'cacti'@'127.0.0.1' identified by 'cacti';"
mysql -uroot cacti < /usr/share/doc/cacti-0.8.8b/cacti.sql

vim /usr/share/cacti/include/config.php
$database_type = "mysql";
$database_default = "cacti";
$database_name = "cacti";
$database_hostname = "127.0.0.1";
$database_username = "cacti";
$database_password = "cacti";
$database_port = "3306";
$database_ssl = false;
ip/cacti 访问 出现错误:
FATAL: Cannot connect to MySQL server on 'localhost'. Please make sure you have specified a valid MySQL database name in 'include/config.php'
mysql -u cacti -pcacti 确发现无法访问,返回信息如下:
ERROR 1045 (28000): Access denied for user 'cacti'@'localhost' (using password: YES)

我是这样操作的/
mysql -u root -p
use mysql;
grant all privileges on cacti.* to cacti@"localhost" identified by 'cacti';
flush privileges;
再修改vim /usr/share/cacti/include/config.php
$database_hostname = "localhost"; 这个没改
在测试mysql -u cacti -pcacti
关闭 setenforce 0 临时
修改/etc/selinux/config 文件
将SELINUX=enforcing改为SELINUX=disabled
重启
ip/cacti/
/usr/bin/php /usr/share/cacti/poller.php
vim /etc/php.ini
增加
date.timezone = 'Asia/Chongging'
cront -e
*/5 * * * * /usr/bin/php /usr/share/cacti/poller.php
cacti增加客户端监控
yum install -y net-snmp
vim /etc/snmp/snmpd.conf
修改syslocation以及syscontact, 其中syslocation 可以写本机ip
syslocation 11.20
syscontact Root 1212@1212.com

service snmpd start
nagios监控客户端-1
客户端机器上

yum install -y epel-release
yum install -y nagios-plugins nagios-plugins-all nrpe nagios-plugins-nrpe
vim /etc/nagios/nrpe.cfg 找到“allowed_hosts=127.0.0.1” 改为 “allowed_hosts=127.0.0.1,192.168.0.11” 后面的ip为服务端ip; 找到” dont_blame_nrpe=0” 改为 “dont_blame_nrpe=1”
启动客户端 /etc/init.d/nrpe start
cd /etc/nagios/conf.d/
vim 192.168.1.33cfg
define host{

use linux-server
host_name 192.168.1.119
alias 1.119
address 192.168.1.119
}
define service{

use generic-service
host_name 192.168.1.119
service_description check_ping
check_command check_ping!100.0,20%!200.0,50%
max_check_attempts 5
normal_check_interval 1
}
define service{

use generic-service
host_name 192.168.1.119
service_description check_ssh
check_command check_ssh
normal_check_interval 1
}
define service{

use generic-service
host_name 192.168.1.119
service_description check_http
check_command check_http
max_check_attempts 5
normal_check_interval 1
}
nagios -v /etc/nagios/nagios.cfg
service httpd restart; service nagios restart
nagios监控客户端-2
vim /etc/nagios/objects/commands.cfg
define command{
command_name check_nrpe
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}

vim /etc/nagios/nrpe.cfg 从
command[check_hda3]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/sda3
/etc/init.d/nrpe start
vim /etc/nagios/conf.d/192.168.1.33.cfg 主
define service{
use generic-service
host_name 192.168.1.119
service_description check_load
check_command check_nrpe!check_load
max_check_attempts 5
normal_check_interval 1
}

define service{
use generic-service
host_name 192.168.1.119
service_description check_disk_sda1
check_command check_nrpe!check_sda1
max_check_attempts 5
normal_check_interval 1
}
define service{
use generic-service
host_name 192.168.1.119
service_description check_disk_sda3
check_command check_nrpe!check_sda3
max_check_attempts 5
normal_check_interval 1
}
/etc/init.d/nagios restart
nagios配置邮件告警
vim /etc/nagios/objects/contacts.cfg

define contact{
contact_name 123
use generic-contact
alias aming
email lishiming2009@139.com
}

define contact{
contact_name 456
use generic-contact
alias aaa
email aminglinux@139.com
}

define contactgroup{
contactgroup_name common
alias common
members 123,456
}
vim /etc/nagios/conf.d/192.168.1.33.cfg
contact_groups common
notification_period 24x7
notification_options:w,u,c,r
zabbix服务端安装
yum install -y epel-release
yum install -y httpd mysql mysql-libs php php-mysql mysql-server php-bcmath php-gd php-mbstring
yum install zabbix20 zabbix20-agent zabbix20-server zabbix20-server-mysql zabbix20-web zabbix20-web-mysql net-snmp-devel
/etc/init.d/zabbix-server start; /etc/init.d/zabbix-agent start
/etc/init.d/httpd start;
mysql -uroot -p -e "create database zabbix"
mysql -uroot -p --default-character-set=utf8 zabbix < /usr/share/zabbix-mysql/schema.sql
mysql -uroot -p --default-character-set=utf8 zabbix < /usr/share/zabbix-mysql/images.sql
mysql -uroot -p --default-character-set=utf8 zabbix < /usr/share/zabbix-mysql/data.sql
/etc/init.d/zabbix-server start
ps aux |grep zabbix
mysql -uroot -e "grant all on *.* to 'zabbix'@'localhost' identified by 'zabbix';
vim /etc/zabbix_server.conf
修改DBpassword= zabbix
/etc/init.d/zabbix-server start
vim /etc/php.ini
览器访问 http://ip/zabbix, 默认会有“It is not safe to rely on the system‘s timezone settings ”这样的警告信息,需要vim /etc/php.ini 设置 date.timezone=“Asia/Shanghai”点next
解决相关的报错信息,点retry (vim /etc/php.ini)
输入mysql相关信息, 首先要测试一下,如果不通过,则需要调试,测试通过后,点next
Name 写127.0.0.1,(可以自定义)点next,再点next,最后点finish
默认管理员账号为 admin:zabbix
这时会遇到“zabbix server is not running”这样的错误,需要编辑一下 /etc/zabbix/zabbix_server.conf ,配置DBUser, DBPassword

zabbix增加客户端监控
客户端上安装 yum install zabbix20-agent
vim /etc/zabbix_agentd.con
更改Server=服务端ip; ServerActive=0.0.0.0:10050; Hostname=aming(自定义,但要唯一)
/etc/init.d/zabbix-agent start
zabbix_get -s 192.168.1.208 -p10050 -k "system.hostname" 服务端上测试
(关闭服务端防火墙)
在web界面下,点”configuration” --> “host” --> 右上角点”Create Host” 其中host name, visible name自定义,可以选择groups,这里默认即可,ip address 写入客户端ip
配置监控项目模板:点“templates”, 点add, 在弹出的小窗口中选择Template OS Linux, 然后点select, 最后点save
zabbix配置邮件告警
yum install -y sendmail
mail -s "test" 515753269@qq.com </etc/inittab
mailq
/etc/init.d/postfix start

mkdir -p /home/zabbix/bin
vim /home/zabbix/bin/baojing.sh
#! /bin/bash
echo "$3" |/bin/mail -s "$2" $1
chmod +x /home/zabbix/bin/baojing.sh

vim /etc/zabbix_server.conf
在zabbix_server.conf配置文件中,有参数AlertScriptsPath和ExternalScripts
AlertScriptsPath=/home/zabbix/bin/ ---用户自定义的media types脚本
ExternalScripts=/home/zabbix/bin/ ---用户自定义的检查的脚本(item)
这样才能找到你的脚本,因为你在frontend中只是输入脚本的名称,没有路径。
linux安全-1
1. Linux发行版本
选择主流的,更新较快的。
从官网获取安装镜像

2. 硬件和物理安全
设置bios密码
设置grub密码
vim /etc/grub.conf
加入 password 123456
grub-crypt

cat /etc/shadow
grub-crypt --md5
设置系统密码
选择有安全保障的idc机房

系统和用户方面
关闭用不到的服务 (http://www.aminglinux.com/study_v2/chapter16.html#id5)

yum install -y netsysv
尽量升级到最新稳定版程序包
linux安全-2
设置防火墙规则 (http://www.aminglinux.com/study_v2/chapter16.html#id3)
不需要登录的用户要禁止登录
cat /etc/passwd
root远程登录限制 ( http://www.aminglinux.com/bbs/thread-5546-1-1.html and http://www.aminglinux.com/bbs/thread-5545-1-1.html)
打开系统日志记录一切信息
配置合适的sudoer

3. 系统和用户方面
关闭用不到的服务 (http://www.aminglinux.com/study_v2/chapter16.html#id5)
尽量升级到最新稳定版程序包
设置防火墙规则 (http://www.aminglinux.com/study_v2/chapter16.html#id3)
不需要登录的用户要禁止登录
root远程登录限制 ( http://www.aminglinux.com/bbs/thread-5546-1-1.html and http://www.aminglinux.com/bbs/thread-5545-1-1.html)
打开系统日志记录一切信息
配置合适的sudoer

4. 文件系统安全 (参考 http://www.aminglinux.com/bbs/thread-6917-1-2.html
使用ext3或者ext4
严格控制目录和文件的权限 umask
尽量少使用suid/sgid权限
重要的数据或配置文件要制定备份计划
linux安全-3
5. pam (参考资料 http://www.infoq.com/cn/articles/linux-pam-one
/etc/pam.conf
/etc/pam.d/

pam类型
auth 用户验证相关 要求用户输入一个口令
account 用户账户管理相关 检查一个用户的账户或者口令是否过期
session 与连接或者会话管理相关 比如将用户登录会话信息记录到日志
password 密码管理

am 级别
required:表示该行以及所涉及模块的成功是用户通过鉴别的必要条件。换句话说,只有当对应于应用程序的所有带 required标记的模块全部成功后,该程序才能通过鉴别。同时,如果任何带required标记的模块出现了错误,PAM并不立刻将错误消息返回给应用程序,而是在所有模块都调用完毕后才将错误消息返回调用他的程序。 反正说白了,就是必须将所有的模块都执行一次,其中任何一个模块验证出错,验证都会继续进行,并在执行完成之后才返回错误信息。这样做的目的就是不让用户知道自己被哪个模块拒绝,通过一种隐蔽的方式来保护系统服务。就像设置防火墙规则的时候将拒绝类的规则都设置为drop一样,以致于用户在访问网络不成功的时候无法准确判断到底是被拒绝还是目标网络不可达。
requisite:与required相仿,只有带此标记的模块返回成功后,用户才能通过鉴别。不同之处在于其一旦失败就不再执行堆中后面的其他模块,并且鉴别过程到此结束,同时也会立即返回错误信息。与上面的required相比,似乎要显得更光明正大一些。
sufficient: 表示该行以及所涉及模块验证成功是用户通过鉴别的充分条件。也就是说只要标记为sufficient的模块一旦验证成功,那么PAM便立即向应用程序返回成功结果而不必尝试任何其他模块。
optional: 他表示即便该行所涉及的模块验证失败用户仍能通过认证。

6. 应用安全
各种常用服务 ftp、samba、nfs、rsync、mysql、http
web安全(漏洞:文件上传、xss、sql注入、CSRF、访问控制)

文件上传: 就像discuz论坛的图片上传,如果图片上传服务器时的目录可以执行php脚本,那么这就意味着,用户可以上传木马脚本,然后可以执行

xss:跨站脚本漏洞(Cross Site Scripting,常简写作XSS)是Web应用程序在将数据输出到网页的时候存在问题,导致攻击者可以将构造的恶意数据显示在页面的漏洞。因为跨站脚本攻击都是向网页内容中写入一段恶意的脚本或者HTML代码,故跨站脚本漏洞也被叫做HTML注入漏洞(HTML Injection)。

sql注入:所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。PHP + MYSQL编程,引发SQL注入攻击的主要原因有两点:(1) PHP配置文件php.ini中的magic_quotes_gpc选项没有打开,被设置为off。(2) 开发者没有对数据类型进行检查和转义。第二点最为重要,如果没有第二点的保证,magic_quotes_gpc选项不论为on,还是off,都可能引发SQL注入攻击。

CSRF: (Cross-site request forgery,跨站请求伪造)伪造用户的请求利用受信任的网站来做一些用户不知道的事。当用户访问网站通过登录操作会得到身份标识的cookie,在不关闭浏览器并未注销登录的情况下会带着cookie,这种状态下就有可能会让攻击者去伪造请求。因为CSRF不容易被发现,所以用户通常不容易察觉但是其危害性是很明显的。
访问控制:
apache配置:
apache的order allow deny http://www.aminglinux.com/bbs/thread-832-1-1.html
apache限制某个目录下的php文件没有执行权限 http://www.aminglinux.com/bbs/thread-1000-1-1.html
apache 针对访问uri 限制ip http://www.aminglinux.com/bbs/thread-5365-1-1.html
几种限制ip的方法 http://www.aminglinux.com/bbs/thread-6519-1-1.html
nginx配置
限制只让某个ip访问 http://www.aminglinux.com/bbs/thread-450-1-1.html
禁止通过ip访问站点 http://www.aminglinux.com/bbs/thread-38-1-1.html
禁止某个IP或者IP段访问站点的设置方法 http://www.aminglinux.com/bbs/thread-546-1-1.html
使用 user_agent 控制客户端访问 http://www.aminglinux.com/bbs/thread-846-1-1.html

7. 入侵检测
snort (https://www.snort.org/
snort中文手册: http://www.360doc.com/content/08/0114/14/25127_972488.shtml
linux系统调优
优目的是为了让系统更加高效,使系统资源使用达到最大的平衡。
参考资料:
http://os.51cto.com/art/201303/385726.htm(调优那些事)
http://www.111cn.net/sys/linux/58433.htm(io/系统/内存性能调优)
http://hong.im/2013/04/20/linux-tcp-tuning/ (高流量大并发Linux TCP 性能调优)
http://wenku.baidu.com/view/0985c9dba58da0116c1749ae.html (文库--LINUX性能调优方法总结)
http://my.oschina.net/sharelinux/blog?catalog=289503 (浅谈linux性能调优系列)
http://colobu.com/2014/09/18/linux-tcpip-tuning/ (TCP/IP协议栈)
https://blog.linuxeye.com/379.html(mysql调优)
http://www.tuicool.com/articles/RbUNn2 (nignx+php-fpm 高并发参数配置及linux内核参数优化)
http://blog.csdn.net/wangsg2014/article/details/38804873 (nignx参数优化)
http://os.51cto.com/art/201003/192112.htm (apache参数优化)
http://www.phpboy.net/apache/488.html(apache参数优化)
http://www.360doc.com/relevant/178008993_more.shtml (apache参数优化文档库)
/article/7088207.html (php.ini参数优化)
/article/4630723.html (tomcat调优)
http://www.php-oa.com/2008/02/03/squidyouhua.html (squid调优)
http://www.neters.cn/archives/548.html(squid优化指南)
http://handao.blog.techweb.com.cn/archives/134.html (squid优化相关的内核参数调整)

一. 硬件方面
1. cpu
2. 内存 (增加内存)
3. 存储 (使用raid,使用ssd)
4. 网卡 (使用千兆网卡,或者双网卡绑定)

二. 系统方面
1. 内核参数优化(网络相关、内存相关、缓冲缓存相关)
2. 文件系统方面(分区调优,格式化时根据存储文件特性,指定合适的块大小,noatime,日志隔离,软raid,有效使用/dev/shm,关闭不必要的服务)
3. cpu优化 (进程绑定,中断绑定)

三. 应用程序方面
1. nginx、apache、php-fpm、mysql、tomcat、squid等应用,是可以通过调节各个参数获得性能优化的。
2. web优化,比如可以把用户请求合并(js、css合并),使用cdn加速静态页访问速度,把图片文档压缩减少带宽传输,
3. 优化网站程序

四. 架构方面
1. 使用简单并且稳定的架构方案
2. 多使用缓存(squid,varnish,memcache,nosql相关:redis,mongodb)

本文出自 “小白成长记” 博客,请务必保留此出处http://guxing.blog.51cto.com/3685384/1761341
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: