系统优化 系统优化: ``` 1. sudo授权,采取集权分治,不使用root用户直接管理。 ~]# visudo #编辑/etc/sudoers 如果不希望sudo执行命令时确认身份,可以在授权文件中指明 USERNAME ALL=(ALL) NOPASSWD:ALL ~]# visudo -c #解析配置文件 2. 禁止ping主机,非必须 ~]# echo "net.ipv4.icmp_echo_ignore_all=1" >> /etc/sysctl.conf ~]# systemctl -p #使更改生效 或者 ~]# iptables -t filter -A INPUT -p icmp --icmp-type 0 -j ACCEPT 允许自己ping别人 ~]# iptables -t filter -A INPUT -p icmp --icmp-type 8 -j DROP 拒绝ping请求 设置指定的主机可ping iptables -t filter -I INPUT -p icmp --icmp-type 8 -i eth0 -s 10.0.0.0/24 -j ACCEPT 3. 关闭多余的控制台(非必须) 4. 清理多余的虚拟账号(非必须) 5. 配置iptables、SELinux 没有硬件防火墙需要开启,仅对外开启需要的提供的服务的端口 SELinux建议关闭,在配置服务的时候相对容易 6. grub加密,非必须 7. 配置yum源 ~]# uname -r #查看查看内核的版本号 ~]# rm -rf /etc/yum.repos.d/* ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo #国内使用阿里云yum源速度比较快 ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo 8. 禁止使用键盘重启 9. 设置账号的超时时间 ~]# echo 'export TMOUT=300' >>/etc/profile ~]# source /etc/profile 10. 修改命令历史的记录数: ~]# echo 'export HISTSIZE=5' >>/etc/profile ~]# echo 'export HISTFILESIZE=5' >>/etc/profile ~]# source /etc/profile 11. 删除登录信息,不显示内核版本、主机名、发行版本号,以及一些后台进程版本号,防止被探测(非必须) ~]# cat /dev/null >/etc/issue ~]# cat /dev/null >/etc/issue.net ~]# cat /dev/null >/etc/motd 12. 系统性能监控 ~]# yum -y install sysstat vmstat 报告系统内训信息 mpstat 检测CPU(包括多个CPU)性能 iostat 检测I/O性能 sar 系统活动情况报告 系统性能查看的主要命令分类: 内存:top、free、vmstat、mpstat、iostat、sar CPU:top、vmstat、mpstat、iostat、sar I/O:vmstat、mpstat、iostat、sar、dd、nmon、dstat 进程:ipcs、ipcrm、ps、lsof 网络:ethtool、ss、netstat、route、diag、ping、ip、lsof 配置:lscpu、lspci、lsscsi、udev 13. ntp时间同步,使用本地时间服务器或者公网同步时间 14. 磁盘的分区优化,避免不必要的分区 15. 服务器尽量少配置外网地址 16. 加大文件描述符 ~]# echo '* - nofile 65535' >>/etc/security/limits.conf ~]# tail -1 /etc/security/limits.conf 17. 内核参数优化: ~]# vim /etc/sysctl.conf net.ipv4.tcp_fin_timeout = 2 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_keepalive_time = 600 net.ipv4.ip_local_port_range = 4000 65000 net.ipv4.tcp_max_syn_backlog = 16384 net.ipv4.tcp_max_tw_buckets = 36000 net.ipv4.route.gc_timeout = 100 net.ipv4.tcp_syn_retries = 1 net.ipv4.tcp_synack_retries = 1 net.core.somaxconn = 16384 net.core.netdev_max_backlog = 16384 net.ipv4.tcp_max_orphans = 16384 以下参数是对iptables防火墙的优化,防火墙不开会提示,可以忽略不理。 net.nf_conntrack_max = 25000000 net.netfilter.nf_conntrack_max = 25000000 net.netfilter.nf_conntrack_tcp_timeout_established = 180 net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120 net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60 net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120 18. 安装一些基础软件 yum -y install lrszs nmap tree dos2unix 等等 19. 锁定关键的系统文件,防止被篡改 ~]# chattr +i /etc/passwd /etc/shadow/ /etc/grop /etc/gshadow /etc/inittab ~]# lsattr #查看锁定的文件 ~]# chattr -i ... #解锁指定文件 20. 更改ssh服务端远程配置: ~]# vim /etc/ssh/sshd_conf #修改ssh连接的配置文件 port #ssh连接端口,建议修改 PermitEmptyPassword #是否允许空密码登录 UseDNS #指定sshd是否应该对远程主机进行反向解析,以检查主机名是否与其IP地址真实对应。默认yes,建议改为no,否则可能会导致SSH连接很慢 GSSAPIAuthentication no #解决linux之间使用SSH连接慢的问题 ListenAddress #监听指定的IP地址 21. 精简开机启动项 ~]# chkconfig --list |egrep -v "crond|sshd|network|rsyslog|sysstst" |awk '{print "chkconfig",$1,"off"}' |bash #关闭服务 服务器对温度、湿度、灰尘的要求很高,进机房需要先打招呼、等级等,还需要带鞋套等 1U=4.445cm=1.75英寸 宽48.26cm 19英寸,因此又叫19英寸机架 什么情况下去机房进行维护: 1. 上架新的服务器,,数量不多的话可以先拉到公司配置好,直接过去上架 服务器尽量不要人工搬来搬去,容易造成损坏 2. 服务器运行异常,无法远程进行维护,最好有远程独立控制卡,可以看到完整的启动过程,集成的很被动,看不到启动界面。 带宽费用:200-1000元/M/月 北京多线机房 20-200/M/月 外地的普通2/3线价格 机柜费用:一个机柜4-5W/年,单个机器2U的2000-3000元的价格 机柜的电力决定了放服务器的数量,两个电源要走两条电路 一般来说一个机柜是10-13A,电信机房10A、网通机房13A 机柜的双电源分别要走AB两路,服务器根据不同的业务尽可能放在不同的机柜,一个机柜一个保险丝 例如一主三从mysql服务器分别放在不同的机柜,从物理连线、摆放上确保业务的稳定性 一个机柜放置1U的服务器15台左右,2U服务器10台左右,每个2U之间间隔1U用于散热 BGP机房:bgp是边界网关协议,是一种用来在不同的运营商之间传递大量路由信息的路由协议。 BGP机房简单的说,就是将IDC机房和多个运营商互联起来,实现单个IP绑定多条线路,所有运营商的用户访问IDC的网络 都会只能的走相应运营商的线路,实现快速访问。 ``` 调优文档 2018-07-04 评论 2398 次浏览
apache调优 apache优雅的重启:不中断用户连接重启服务器(等待已连接用户完成请求) ``` ~]# service httpd graceful #优雅的重启 ~]# serviice httpd graceful-stop #优雅的关闭服务 ``` apache是一个模块化的服务器,将服务、配置文件等实现了模块化 apache的主进程以root身份运行,PID是apache进程中最小的,主进程控制子进程,真正处理用户请求的是子进程 模块化的设计方便升级,动态加载,但是DSO(Dynamic Share Object)需要静态编译进程序 模块的动态加载通过DSO模块实现,需要新功能时,配置文件中调用即可。 ``` ~]# httpd -M #查看模块 ~]# httpd -l #查看serverMPM ~]# httpd -V #显示httpd的模式 ``` yum安装默认使用prefork模式 MPM是实现网络监听、请求处理,修改MPM需要重新编译 在不同的环境下使用不同的MPM实现最优化的底层处理和稳定性 prefork模式: apache在启动时预先fork一些子进程,然后请求进来以后,减少频繁创建和销毁进程的开销,每个子进程有一个线程,在一个时间点内只能处理一个请求。 优点:成熟稳定、兼容所有新老板块,同时不需要担心线程安全问题 缺点:一个进程占用较多的系统资源,消耗更多的内存,且不擅长处理高并发请求 ------------ worker模式 使用多进程多线程的混合模式,会预先开启几个子进程,然后每个子进程创建一些线程,同时包括一个监听线程。 每个请求过来会被分配到一个线程,线程比进程更轻量级,因为线程会共享主进程的内存空间,因此内存空间会占用少一些,在高并发的场景下表现比prefork模式更优秀。 优点:占用更少的内存,高并发场景下表现更优秀。 缺点:必须考虑线程的安全问题。 ------------ event模式: event模式和worker模式相似,最大的区别在于它解决了keep-alive场景下长期被占用的线程资源浪费问题,event模式中专门有一个线程来管理这些keep-alive类型的线程,在keep-alive场景下,为了解决用户短时间内再次向服务器发送TCP请求,会保持一个连接超时时间,但是这个等待实惠消耗服务器资源的,event模式解决了这个问题,eventMPM中专门有一个管理keep-alive线程的线程,它会监控服务器上是否还有可用的资源,如果没有可用的资源,会强制切断超时等待客户机的TCP连接,释放资源用于新的请求。 ------------ apache调优:我们调优的目的是为了降低服务器自身的资源消耗,给更多的用户提供服务。 ``` 1. 不记录指定文件类型的日志: 如动画、图片、js、css文件的访问日志不记录 在配置文件中结尾标记为image-request,定义日志时,CustomLog后追加 env=!image-request(取反) 2. apache配置静态缓存 静态缓存是指图片、js、css等文件,这些文件会被加载到用户的电脑上, 目的是为了下一次调用时不再去服务器上请求,加速了速度,提高了用户体验,但这些静态文件也应当有一定的时效性,因此得设置过期时间 使用mod_expires.c或者mod_headers模块实现缓存的调整 ~]# httpd -M #查看所需要的模块是否支持 ~]# curl -i http://* #请求页面时可以查看到expires功能,并查看缓存时间 统计用户访问的代码不应被缓存。 当请求的文件名不一样的时候会从服务器重新请求下载,保证用户看到的都是新的,解决缓存有效期过长的问题 缓存失效的条件: 一是用户主动清空缓存、 二是缓存过期 3. 配置防盗链 防止其他人将自己站点上的连接直接调用,消耗自身的带宽 `SetEnvlfNoCase Referer "^http://.*\.123\.com"local_ref` referer其实就是上一次访问的链接,配置referer是根据来源链接做限制,如果来源链接不是我们想要的,就直接拒绝。 图片、txt、MP3、rar等文件都支持 盗链造成的损失是很直接的 4. apache访问控制 对一些特定的目录限制访问 ``` Order deny,allow Deny from allow Allow from 127.0.0.1 ``` 也可针对请求的URL进行限制 ``` Order deny,allow Deny from allow Allow from 127.0.0.1 ``` 5. 禁止在某目录下执行PHP脚本,即禁止解析PHP 此举是避免上传的文件中有恶意代码片段 php_admin_flag engin off #禁止解析PHP的控制语句,但是用户还可以下载,这个也应当禁止 Order deny,allow Deny from allow 6. 禁止指定user_agent user_agent叫做浏览标识,每一种浏览器都有对应的user_agent 避免一些无用的搜索引擎或机器爬虫之类引起带宽的消耗,可以将指定的搜索引擎限制掉。 7. 控制apache返回给客户端的信息 ``` ~]# vim /etc/httpd/conf/httpd.conf ServerTokens ProductOnly(Prod) #仅返回给客户端服务名(apache) ·决定了返回给客户端的服务器响应字段是否包含服务器操作系统的描述和已启用的apache模块信息。 ServerSignature off #禁用页脚行 ·ServerSignature on #允许服务器在生成的文档中添加页脚行 ·ServerSignature EMail #创建一个"mailto:"引用;用于将文档发送到引用文档的ServerAdmin 也可以通过修改源代码重新编译,也可迷惑对方,改为IIS等 ``` 8. 隐藏php的版本信息 ~]# vim */php.ini #编辑php配置文件 expose_php=off 9. 配置日志轮询 安装cronlog工具 CustomLog "|/usr/local/sbin/cronlog /usr/local/apache2/logs/access_www_%Y%m%d.log" combined 10. 错误页面优雅的显示,错误不是报告给用户的 将404等错误信息重定向到网站首页或其他页面 11. 开启文件传输时压缩功能 采取先压缩再传输,传输结束后会在客户端解压缩(css、html、xml、js等文本文件) 视频和图片已经是经过压缩的,不建议再次压缩,很消耗资源 需要开启mod_deflate模块,也可动态进行模块编译,加入模块 12. 更改默认用户,源码安装默认用户为deamon,yum安装位apache,尽量改为别人不易猜到的用户 13. apache目录、文件的权限设置 对于目录:用户为root 权限为755 对于文件: 用户为root 权限为644 这样做的前提是在网站的架构中,应该把资源文件、包括用户上传的图片、附件等和程序分离,最好将用户上传的程序也分离,这样就可以从容放入授权,最好有单独的上传服务器。 14. 开启httpd-mpm.conf 增加连接数 15. 禁止目录index,防止将网站的结构暴露给用户 16. 禁止用户重载(覆盖) AllowDverride None #禁止用户覆盖 加快服务器的速度,因为它不再为每个请求寻找每个目录访问控制文件(.htacces) 17. 关闭CGI,配置文件中删除,别名的功能也可以删除 18. 避免使用.htaccess来对目录权限进行规则定义,这是不安全的。 19. 正确途径获取源代码,勤更新补丁 20. apache日志授权给root用户700权限 21. 尽可能的减少http请求的次数,将网页图片整合、css和html文件整合 ``` 调优文档 2018-07-03 1 条评论 6106 次浏览
防火墙规则笔记整理 防火墙机制: 一种机制是阻拦传输流通行:白名单(比如ssh端口) 一种机制是允许传输流的通行:黑名单(比如http) 一些防火墙偏重阻拦传输流的通行,一些防火墙偏重允许传输流的通行 防火墙实现的功能: 1. 可以保护易受攻击的服务 2. 控制内外网络之间网络系统访问 3. 集中管理内网的安全性,降低管理成本 4. 提高网络的保密性和安全性 5. 记录网络的使用状态,为安全规划和网络维护提供依据 netfilter:内核态模块和用户态工具,位于linux内核中包过滤体系 iptables:/sbin/iptables是用户空间工具,管理员通过iptables给netfilter变更规则 iptables规则表顺序 ``` raw表-->mangle表-->nat表-->filter表 raw表:确定是否对该数据进行状态跟踪 mangle表:为数据包设置标记,可用于办公网络的路由选择,选择备用线路办公 nat表:修改数据包中的源、目标的IP地址和端口(常用) filter表:确定是否放行该数据包(过滤)--常用 规则链的作用:对数据包进行过滤或者处理 链的作用:容纳各种防火墙规则 链分类的依据:处理数据包的不通时机 ``` 规则链: ``` INPUT 处理入站数据包 OUTPUT 处理出站数据包 FORWARD 处理转发数据包 POSTROUTING 进行路由选择后处理数据包 PREROUTING 在进行路由选择前处理数据包 ``` 规则链之间的顺序: ``` 入站 PREROUTING-->INPUT 出站 OUTPUT-->POSTROUTING 转发 PREROUTING-->FORWARD-->POSTROUTING ``` iptables语法格式 ``` iptables [-t 表名] 选项 [链名] [条件] [-j 控制类型] 选项: -A 在链的末尾追加 -I 在链的开头插入 -D 删除指定序号的规则 -F 清空所有的规则 控制类型: ACCEPT 允许通过 DROP 直接丢弃 REJECT 拒绝,对方会接收到提示 LOG 记录日志然后继续匹配下一条规则 iptables -L 列表默认显示filter表的规则条目 iptables -n 以数字的形式显示规则信息(端口、协议等) iptables -v 以更详细的方式显示规则信息 iptables --line-numbers 查看防火墙的规则时显示序号,删除时可指定该序号 ``` 调优文档 2018-07-02 1 条评论 7835 次浏览
数据库调优及基础命令整理 ``` 1. 垂直扩展:提高硬件的性能,加内存,因为数据库对内存的消耗很大 2. 线程的重用,将已完成任务的线程中断,用于新用户的响应 3. 使用缓存机制:redis等非关系型数据库,但是需要在php页面中指明先访问redis数据库 4. 对数据库进行主从复制,可以使用Amoeba实现读取压力分流 5. 分库、分表,使用连接将不同的库、表或索引放到不同的硬盘上,从I/O层面提升读写的效率 6. 使用固态SSD硬盘存取数据,从物理层面提升获取更高的效率 7. 给磁盘做RAID,提升读写的效率 8. 重新挂载文件系统,不记录文件访问时间,减少I/O的占用 9. 如果没有配置主从同步,可以关闭log-bin日志,减少磁盘I/O的占用 10. my.cnf中添加skip-name-resolve,这样可以避免由于解析主机名造成的延迟 11. 调整buffer、cache 12. 根据具体的使用场景,选择合适的存储引擎,常用的事务性存储引擎Innodb 13. 降低磁盘的写入操作,使用较大的写入缓存,inodb_log_file_size,推荐设置为0.25*innodb_buffer_pool_size 14. 单条查询后添加LIMIT1,停止全表扫描,减少磁盘的压力 15. 对常用来搜索的字段建立索引,提升查询的效率 16. 避免select * 操作,从数据库中读出的数据越多,查询就会变得越慢,如果数据库服务器和web服务器是两个独立的数据库的话,还会增加网络传输负载。 17. 应当为每张表设置一个ID作为主键,并设为AUTO_INCREMENT标志 18. 使用IP而不是域名作为数据库的路径,避免DNS解析,如果是多库,使用amoeba等中间件实现对库的调用 ``` 数据库的初始化: mysql_install_db 需要在安装路径下执行,有些命令是以相对路径执行的 修改密码: > set password=password('123456'); 创建登录的用户: > create user UserName@'%' identfied '123456'; root找回自己的密码并进行修改,跳过授权表,user表是授权表 ``` ~]# service mysqld stop ~]# echo "skip-grant-tables" >>/etc/my.conf #在配置文件末尾追加跳过授权表信息 ~]# service mysqld start ~]# mysql -uroot -p #以空密码登录数据库 > update mysql.user set password=password('123456') where user='root'; ``` mysql语句: > show databases; #显示授权给当前用户的数据库 > show tables; #显示当前数据库中有哪些表 > use DataBase_Name; #选择要操作的数据库 > create database DataBase_Name; #创建数据库 > drop database DataBase_Name; #删除数据库 > create table Table_Name(field1 Field_Type1,field2 Field_Type2...); #创建表 > drop table Table_Name; #删除当前或指定的表 > describe Table_Name; #显示当前数据库中指定表的结构(字段)信息 > alter table Old_Table_Name rename New_Table_Name; #修改数据表名称 > alter table Table_Name modify Field Field_Type; #修改字段类型 > alter table Table_Name change Old_Table_Name New_Table_Name Field_Type; #修改字段名、字段类型 > alter table Table_Name add Field Field_Type [first|after]; #增加字段,add以默认以追加的方式增加 > alter table Table_Name drop Field; #删除字段,删除一列,很危险的操作 > insert into Table_Name(Field1,Field2...) values('Values1','Values2'...); #向数据表中插入数据 > update Table_Name set Field=New_Values where 条件表达式;修改、更新数据表中的记录 > select Field1,Field2... from Table_Name where 条件表达式; #在数据库中查找符合条件的记录 between....and... #指定范围 > delete from Table_Name; #清空数据表,慎用 调优文档 2018-07-01 评论 2463 次浏览