首页 > RHEL/CentOS通用性能优化、安全配置参考

RHEL/CentOS通用性能优化、安全配置参考

RHEL/CentOS通用性能优化、安全配置参考

 

本文的配置参数是笔者在实际生产环境中反复实践总结的结果,完全适用绝大多数通用的高负载、安全性要求的网络服务器环境。故可以放心使用。

 

若有异议,欢迎联系[email protected]探讨。

 

提示:强烈建议使用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" UTC=false ARC=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

转载于:https://www.cnblogs.com/sunbeidan/p/8477614.html

更多相关:

  • DNS信息是由/etc/resolv.conf提供的,它是每次开机时,由/sbin/resolvconf生成的 /etc/resolv.conf是/run/resolvconf/resolv.conf的符号链接 错误的修改方法 直接修改/etc/resolv.conf文件添加DNS的方法并不可行,因为重启系统后,该配置文件...

  • 配置之前清空所有服务器防火墙规则 iptables -F 关闭selinux: 1、/usr/sbin/sestatus -v      ##如果SELinux status参数为enabled即为开启状态 SELinux status:                 enabled 2、getenforce            ...

  • 在Ubuntu系统网络设备启动的流程中,会依赖/etc/network/interface的配置文件初始化网络接口,所以直接在/etc/network/interface之中配置好对应的dns服务器会最先写入/etc/resolv.conf。所以我们可以在其中添加如下内容: dns-nameservers 180.76...

  •   这里的环境是centos7版本,openstack K版     1.在各个计算节点设置权限 chmod 755 /var/lib/nova/instances   2.修改各个节点的nova.conf(/etc/nova/nova.conf) vncserver_proxyclient_address=虚拟机IP # v...

  • nan 是not a number ,inf是无穷大 numpy.nan_to_num(x): 使用0代替数组x中的nan元素,使用有限的数字代替inf元素...

  • 简介 Simple Reference  基础CUDA示例,适用于初学者, 反映了运用CUDA和CUDA runtime APIs的一些基本概念.Utilities Reference  演示如何查询设备能力和衡量GPU/CPU 带宽的实例程序。Graphics Reference  图形化示例展现的是 CUDA, OpenGL,...

  • 在做开发的过程中难免需要给内核及下载的一些源码打补丁,所以我们先学习下Linux下使用如如何使用diff制作补丁以及如何使用patch打补丁。...

  • 我在调研ATS 4.2.3挂载SSD的过程中,遇到很多坑,特此详细记录我摸索的主要过程,以便大家以后避免之。 基本思路可以完全照搬参考文献[2][3] 下面的安装假定是以root用户身份进行的,Linux服务器已经安装好系统,磁盘已经做好分区。 首先需要认识我们的Linux服务器的硬件配置和软件情况 硬件配置: DELL...

  • 该博文整理一些在使用stl编程过程中遇到的小经验: 1.在多线程环境下面打印调试,如何使用cout及时刷新到屏幕上? 在C中我们经常这样使用: printf("Hello World "); fflush(stdout); 如果使用stl,我们可以这样使用: cout << "Hello World" << endl <...

  • ue4商城资源 Car Configurator Template 汽车配置器模板 ue4商城资源 Car Configurator Template 汽车配置器模板 Unreal Engine虚幻游戏引擎素材资源 Unreal Engine Marketplace –Car Configurator Template 4...

  • 一直在尝试一些写代码方便,阅读代码也很方便的工具,因为使用的是Mac,所以阅读源码上面sourceInsight就没办法用了。 从vscode – sublime – clion 想要可配置性强一点,软件轻一点,也能提供足够的便捷操作,不论是写代码还是快速索引源码,都希望在检索上面节省足够的时间。 vscode 和 sublime...

  • 每日杂事缠身,让自己在不断得烦扰之后终于有了自己的清静时光来熟悉一下我的工具,每次熟悉源码都需要先在windows端改好,拖到linux端,再编译。出现问题,还得重新回到windows端,这个过程太耗费时间。 vim作为唯一能够和windos 下的source insight一争高低的linux端的源码阅读器,只要将它短时间内合理利用...

  • 使用ubuntu(18.04) 作为软路由器连接互联网 背景: 最近要用ubuntu机器作为中继路由,需要配置一下,但是内网外网网上找了一圈,五花八门的,照着做没有一个靠谱的,遇到的问题也没有任何说明,遂写一篇教程以记录一下 功能说明: 简单来说,就是用其他机器的网络上互联网, 比如可以用其他机器的wifi上网等等场景 示意...

  • Spring-Boot 攻略 day01 spring-boot 一. 基本配置加运行 1. 导入配置文件(pom.xml 文件中) org.springframework.bootspring-boot-starter-parent