RHEL/CentOS通用性能优化、安全配置参考
RHEL/CentOS通用性能优化、安全配置参考
本文的配置参数是笔者在实际生产环境中反复实践总结的结果,完全适用绝大多数通用的高负载、安全性要求的网络服务器环境。故可以放心使用。
若有异议,欢迎联系zhangxugg@163.com探讨。
提示:强烈建议使用RHEL 5.6/CentOS 5.6及以上版本的系统,否则可能会有差异。
一、配置yum更新源
CentOS不需要配置可以直接使用官方提供的yum源(但速度往往较慢),而RHEL在没有购买授权服务情况下,是无法使用redhat官方的yum源的。如果你使用了CentOS但对其官方提供的yum源下载速度不满意,或使用RHEL,需要从安装光盘(或ISO镜像)建立自己的yum源,那么请参照本节。
一般来说,建立yum更新源有三种方式
使用本地物理光盘
使用本地ISO文件
使用HTTP/FTP服务器
这几种方式中,使用本地光盘、本地ISO文件的缺陷很明显--只能为本机使用,无法实现网络yum源共享,所以推荐使用HTTP方式建立yum更新源。以RHEL为标准,分别介绍这三种方式的配置
1. 使用本地光盘镜像
A. 将光盘放入光驱(虚拟机如VM, virtualbox,应该是为虚拟机分配光驱)
B. 建立挂载点
mkdir /mnt/cdrom
C. 装载光盘至挂载点
mount /dev/hdc /mnt/cdrom/
D. 编辑文件 /etc/yum.repos.d/local.repo ,输入以下内容
[base] name=Red Hat Enterprise Linux Local Source baseurl=file:///mnt/cdrom/Server enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release [Cluster] name=Red Hat Enterprise Linux Cluster baseurl=file:///mnt/cdrom/Cluster [ClusterStorage] name=Red Hat Enterprise Linux ClusterStorage baseurl=file:///mnt/cdrom/ClusterStorage |
E. 验证是否配置成功
yum repolist
2. 使用本地ISO镜像, 方法与使用光盘大同小异
A. 将系统镜像ISO文件上传至服务器某个目录中(我使用的镜像文件名为rhel-server-5.4-i386-dvd.iso)
B. 建立挂载目录 mkdir /mnt/OS
C. 卸载光驱并装载ISO文件至挂载目录
umount /mnt/cdrom/
mount -o loop rhel-server-5.4-i386-dvd.iso /mnt/cdrom/
D. 其它配置请参照第1小节的D、E步骤即可
3. 使用HTTP方式建立yum源,这需要预先在服务器上安装Http Server,如apache, nginx,lighttpd均可。
A. 准备好系统ISO镜像文件,上传到yum服务器某个目录中
B. 参照第2小节,将ISO文件装载到某个目录中,假设为 /mnt/os
C. 配置http服务器,发布上一步装载的目录,以nginx配置为例子 假设服务器IP为192.168.56.101
server { server_name 192.168.56.101; location /rhel-5.4 { alias /mnt/os; autoindex on; } } |
D. 删掉旧的yum配置文件
mv -f /etc/yum.repos.d/* ~/
E. 编辑文件 /etc/yum.repos.d/onlineyum.repo 输入以下内容
[base] name=Red Hat Enterprise Linux Online Source baseurl=http://192.168.56.101/rhel-5.4/Server enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release [Cluster] name=Red Hat Enterprise Linux Cluster baseurl=http://192.168.56.101/rhel-5.4/Cluster [ClusterStorage] name=Red Hat Enterprise Linux ClusterStorage baseurl=http://192.168.56.101/rhel-5.4/ClusterStorage |
F. 测试配置是否生效
yum repolist
提示:
请将nginx配置中的server_name, onlineyum.repo文件中的主机名按实际情况修改
如此处理后,其它服务器只要按上述步骤建立/etc/yum.repos.d/onlineyum.repo文件即可使用共享的yum源了
二、环境设置
主要是设置shell的环境,使日常的操作更为便捷
1. 去掉SSH登录时DNS反向解析,以加快终端登录速度
sed -r "s/.*UseDNS.+/UseDNS no/i" /etc/ssh/sshd_config > /tmp/sshd_config mv -f /tmp/sshd_config /etc/ssh/sshd_config service sshd restart |
2. 设置vi, vim的默认的tab、行号显示参数
echo "set tabstop=4" >> /etc/virc echo "set tabstop=4" >> /etc/vimrc echo "set number" >> /etc/virc echo "set number" >> /etc/vimrc |
3. 设置vim的别名为vi, 这样当我们使用vi命令时,实质上是使用了vim
echo "alias vi=vim" >> ~/.bashrc source ~/.bashrc |
4. 设置正确的时区
cp /usr/share/zoneinfo/Asia/Chongqing /etc/localtime printf 'ZONE="Asia/Chongqing"\nUTC=false\nARC=false' > /etc/sysconfig/clock #更新系统时间 ntpdate pool.ntp.org #执行crontab -e, 输入以下内容,每天凌晨6点更新系统时间 06***/sbin/ntpdate pool.ntp.org 2>&1 | /bin/logger |
5. 设置终端为英文,避免中文显示乱码的不必要麻烦
echo 'LANG="en_US.UTF-8"' > /etc/sysconfig/i18n source /etc/sysconfig/i18n |
6. 停止SELinux功能,避免出现异常现象。设置/etc/sysconfig/selinux文件中
SELINUX=disabled |
三、服务优化 只开启必要的服务,提高安全性和性能
安装完Linux之后,以下服务是必须的必须开启(以RHEL 5.6为参照),没列出的服务可关闭 acpid #高级控制电源管理接口 crond #定时执行任务 haldaemon #必须开启,否则可能导致控制台键盘鼠标无法使用 hidd #同上 irqbalance #支持多cpu中断,必须开启 kudzu #检测硬件变化时自动进行配置 lvm2-monitor #用于监测LVM状态 messagebus #Linux系统进程间通讯的关键服务 mdmonitor #监测软RAID健康状态 即使没有使用软RAID, 也强烈建议启用此服务 mdmpd #同上,即使没有多路径存储设备,也强烈建议启用之 network #网络支持 readahead_early #预先加载特定的应用程序到内存中以提供性能 readahead_later #同上 smartd #硬盘故障自动检测 sshd syslog klogd #如果服务列表中存在,则必须开启 提示:配置服务可使用ntsysv工具,比较方便 其它强烈建议开启的服务 iptables #使用内核防火墙保护服务器 请根据具体需要配置防火墙规则 |
四、Linux内核优化
1. 如果使用了iptables防火墙,则按以下参数优化
#如果发现iptbles影响网络性能或有丢包现象,执行以下命令以优化之 在高流量状态下,如果iptables的hash表过小,就会出现丢包现象,系统日志中产生ip_conntrack: table full, dropping packet.这时网络传输变得超慢。 设置为65536, 意味着netfilter可以跟踪65536*8=50多万个连接,逐步调整此值,直到不出现丢包现象为至。另外,如果这个值设置过大,也会有警告:falling back to vmalloc 因此不能过大 grep -i "ip_conntrack" /etc/modprobe.conf || \ echo "options ip_conntrack hashsize=65536" >> /etc/modprobe.conf echo "net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 1200" >> /etc/sysctl.conf service iptables restart sysctl -p 提示:当重启iptables服务时,以上参数会失效,所以请务必修改/etc/init.d/iptables脚本 case "$1" in start) stop start 修改为 case "$1" in start) stop start /sbin/sysctl -p > /dev/null 2>&1 即在iptables启动之后,强制重新加载/etc/sysctl.conf的配置 |
2. 优化内核网络相关参数,向/etc/sysctl.conf中追加以下内容
net.core.netdev_max_backlog=3000 net.ipv4.conf.lo.accept_redirects=0 net.ipv4.conf.all.accept_redirects=0 net.ipv4.conf.eth0.accept_redirects=0 net.ipv4.conf.default.accept_redirects=0 net.ipv4.tcp_tw_recycle=1 net.ipv4.tcp_tw_reuse=1 net.ipv4.tcp_tw_reuse=1 net.ipv4.tcp_fin_timeout=30 net.ipv4.tcp_keepalive_time=600 net.ipv4.tcp_max_syn_backlog=8192 net.ipv4.tcp_max_tw_buckets = 9000 net.ipv4.tcp_syn_retries = 1 net.core.rmem_max=16777216 net.core.wmem_max=16777216 net.ipv4.tcp_syncookies=1 net.ipv4.tcp_rmem=4096 87380 16777216 net.ipv4.tcp_wmem=4096 65536 16777216 net.ipv4.ip_local_port_range = 102465535 vm.swappiness = 10 |
使用sysctl -p使配置生效。
在机器可重启动情况下,强烈建议重启以确认配置生效
五、配置iptables防火墙规则
在没有其它防火墙保护措施时,一定要尽可能使用iptables的强大功能保护好您的服务器。如果不善于使用iptables, 则不是一个合格的系统工程师
如果不使用iptables, 此小节不必实践
提示:在配置防火墙规则时为防止自己被拒之门外,强烈建议在作以下措施
运行crontab -e 输入以下内容
*/3 * * * * /etc/init.d/iptables stop |
即每3分钟自动停止防火墙。这样即使由于配置错误使自己被拦截,等待3分钟之后,即可解除。
开始配置防火墙规则
这里假设服务器使用两个IP段地址12.35.56.0/24(公网IP),192.168.0.0/16(内网)
服务器提供http (80端口)服务
单个IP到80端口的并发连接最多为30个
来自一个C类网段的并发连接最多为600个
ping的频率最多为10个请求每秒
来自同IP段的任何连接信任
信任已经建立的连接。
服务器出站连接全部允许
允许到1723端口的VPN连接以及gre协议(此服务器同时作为VPN服务器使用)
其它入站连接全部禁止
允许所有的出站连接
提示:本内容在RHEL 5.6 /CentOS 5.6版本上测试通过,对旧版本系统,可能会有问题
/etc/sysconfig/iptables中的内容为
*filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [94:9668] -A INPUT -i lo -j ACCEPT -A INPUT -s 192.168.0.0/16 -j ACCEPT -A INPUT -s 12.23.56.0/24 -j ACCEPT -A INPUT -p icmp -m limit --limit 10/sec --limit-burst 30 -j ACCEPT -A INPUT -p icmp -j DROP -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 20 --connlimit-mask 32 -j DROP -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 600 --connlimit-mask 24 -j DROP -A INPUT -p tcp --dport 80 -j ACCEPT -A INPUT -p tcp --dport 1723 -j ACCEPT -A INPUT -p gre -j ACCEPT -A INPUT -j DROP COMMIT |
重启防火墙以使规则生效
service iptables restart |
提示:经过测试发现RHEL 5.4系统上,iptables没有限制并发连接模块。
测试若没有问题,运行crontab -e 去掉我们开始添加的自动停止防火墙的任务
启用服务
chkconfig iptables on |
RHEL/CentOS通用性能优化、安全配置参考的更多相关文章
- QQ音乐Android客户端Web页面通用性能优化实践
QQ音乐 Android 客户端的 Web 页面日均 PV 达到千万量级,然而页面的打开耗时与 Native 页面相距甚远,需要系统性优化.本文将介绍 QQ 音乐 Android 客户端在进行 Web ...
- 分布式搜索引擎Elasticsearch性能优化与配置
1.内存优化 在bin/elasticsearch.in.sh中进行配置 修改配置项为尽量大的内存: ES_MIN_MEM=8g ES_MAX_MEM=8g 两者最好改成一样的,否则容易引发长时间GC ...
- jQuery性能优化的一些参考建议
JQ3.1 文档下载地址:https://pan.baidu.com/s/1c2vMQdy 一.注意定义jQuery变量的时候添加var关键字 这个不仅仅是JQ,在JS中都是必须的 二.如果有多个变量 ...
- Liunx下Mysql,MongoDB性能优化的配置
场景 这几天在赶十一上线的项目,但是突然发现接口性能不好,高并发支持不住.又不想改代码,就在数据库层面进行优化. Mysql 分区:项目中有对40万条的数据进行时间查询的要求,就算对DateTime建 ...
- 前端性能优化:配置ETag
什么是ETag? 实体标签(EntityTag)是唯一标识了一个组件的一个特定版本的字符串,是web服务器用于确认缓存组件的有效性的一种机制,通常可以使用组件的某些属性来构造它. 条件GET请求 浏览 ...
- [转]Centos 6.5 优化 一些基础优化和安全设置
关于CentOS服务器的优化下文作为参考. 本文 centos 6.5 优化 的项有18处: 1.centos6.5最小化安装后启动网卡2.ifconfig查询IP进行SSH链接3.更新系统源并且升级 ...
- sqlite3 多线程和锁 ,优化插入速度及性能优化
一. 是否支持多线程? SQLite官网上的"Is SQLite threadsafe?"这个问答. 简单来说,从3.3.1版本开始,它就是线程安全的了.而iOS的SQLite ...
- Hibernate性能优化之EHCache缓存
像Hibernate这种ORM框架,相较于JDBC操作,需要有更复杂的机制来实现映射.对象状态管理等,因此在性能和效率上有一定的损耗. 在保证避免映射产生低效的SQL操作外,缓存是提升Hibernat ...
- Angular 的性能优化
目录 序言 变更检查机制 性能优化原理 性能优化方案 小结 参考 序言 本文将谈一谈 Angular 的性能优化,并且主要介绍与运行时相关的优化.在谈如何优化之前,首先我们需要明确什么样的页面是存在性 ...
随机推荐
- Jmeter接口测试报告模板优化
优化后在接口报告的接口信息中,直接展示url,method,结果和响应时间,详情中展示请求和响应数据.具体如下: 模板文件 jmeter-results-detail-report_21.xsl: & ...
- Spring cloud学习--Zuul01
Zuul解决的问题 作为系统的统一入口,屏蔽了系统内部各个微服务的细节 可以与微服务治理框架结合,实现自动化的服务实例维护以及负载均衡的路由转发 实现接口权限校验与微服务业务逻辑的解耦 搭建Zuul服 ...
- golang的数据类型之整型类型
数据类型: 整数 : int, int32, int64, uint, uint32, uint64 字符串 : string 布尔:bool 浮点:float32 float64 uint 表示无符 ...
- 【Python—参数】*arg与**kwargs参数的用法
在python中,这两个是python中的可变参数,*arg表示任意多个无名参数,类型为tuple;**kwargs表示关键字参数,为dict. # *允许你传入0个或任意个参数,这些可变参数在函数调 ...
- js 为false的几种情况
1: false 2: null 3:undefined 4:"" 空字符串 5:0 6:NaN 如果你的if条件里面会出现 0 或者"",那么这种肯定是为假的 ...
- jvm性能监控(2)–JVM的监控工具jstat
Jstat是JDK自带的一个轻量级工具,主要用JVM内建的指令对java应用程序的资源和性能进行实时的监控. openjdk没有jstat,jps等命令解决办法 执行以下命令即可:yum insta ...
- 字符串类——KMP算法的应用
1,字符串类中的新功能(本文代码已集成到字符串类——字符串类的创建(上)中,这里讲述函数实现原理): 2,子串查找(KMP 算法直接运用): 1,int indexOf(const char* s) ...
- HTTP中ip地址伪造的问题以及解决办法
在真实环境下,php获取客户端ip地址的方法通常有以下几种: (1):通过$_SERVER[ "HTTP_CLIENT_IP" ] (2):通过$_SERVER[ "HT ...
- P2619 [国家集训队2]Tree I(最小生成树+二分)
P2619 [国家集训队2]Tree I 每次二分一个$x$,每条白边加上$x$,跑最小生成树 统计一下满足条件的最小值就好了. to me:注意二分不要写挂 #include<iostream ...
- SQL SERVER添加表注释、字段注释
--为字段添加注释 --Eg. execute sp_addextendedproperty 'MS_Description','字段备注信息','user','dbo','table','字段所属的 ...