CentOS7优化

1.概览

CentOS系统安装之后并不能立即投入生产环境使用,往往需要先经过我们优化才行。在此写几点关于Linux系统安装后的基础优化操作。
注意:本次优化都是基于CentOS(7.7)

2.优化目录

配置yum源并安装基础软件
修改主机地址,主机名dns等信息
修改默认的端口,禁止root用户登录
编辑sudo,以普通用户管理
关闭selinux
配置时间同步
锁定系统关键文件,防止提权篡改
为Grub菜单增加密码
调整文件描述符数量,进程及文件打开都会消耗文件描述符
精简并保留必要的开机自启动服务
linux内核优化/etc/sysctl.conf

a.安装常用软件

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

#PS:yum repolist 列出yum源信息;把yum源换为阿里的源,当然也可以换成清华或者是别的源

例如:wget vim lrzsz bash-completion telnet nmap等等
yum -y install wget vim lrzsz bash-completion telnet nmap

b.修改主机地址,主机名dns等信息

[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0                   	#网卡名字
BOOTPROTO=static               #静态IP地址获取状态 如:DHCP表示自动获取IP地址
IPADDR=172.16.1.113          #IP地址
NETMASK=255.255.255.0         #子网掩码
ONBOOT=yes                     #引导时是否激活
GATEWAY=172.16.1.1

[root@localhost ~]# vim /etc/hostname  
test                  #这个是主机名
我们也可以用  hostnamectl set-hostname test  来永久修改主机名,重新登录生效

修改DNS
[root@localhost ~]# vi /etc/resolv.conf     #修改DNS信息
nameserver 114.114.114.114
nameserver 8.8.8.8
[root@localhost ~]# cat /etc/resolv.conf    #查看修改后的DNS信息
nameserver 114.114.114.114
nameserver 8.8.8.8
[root@localhost ~]# systemctl restart network   #重启网卡,生效
重启网卡,也可以用下面的命令
[root@localhost ~]# /etc/init.d/network restart       

c.修改默认的端口

默认ssh配置文件是/etc/ssh/sshd_config
大约在17行左右,有一个参数port 22,默认是注释的,我们打开注释,把22修改为别的端口即可
注意:端口不要冲突,先备份。

[root@test ~]# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
[root@test ~]# vim /etc/ssh/sshd_config
Port 22022           #ssh连接默认的端口
PermitRootLogin no       #root用户黑客都知道,禁止它远程登录
PermitEmptyPasswords no    #禁止空密码登录
UseDNS no                #不使用DNS
[root@test ~]# /etc/init.d/sshd reload    #从新加载配置
[root@test ~]# netstat -lnt               #查看端口信息
[root@test ~]# lsof -i tcp:22022

d.编辑sudo,以普通用户管理

[root@test ~]# useradd test
[root@test ~]# echo "123456"|passwd --stdin test
[root@test ~]# visudo
在root    ALL=(ALL)    ALL此行下,添加如下内容
test      ALL=(ALL)    ALL

e.关闭selinux

#临时关闭和查看

[root@test ~]# setenforce 0
[root@test ~]# getenforce 
Disabled

#永久关闭

把selinux的值修改为disabled即可
[root@test ~]# cat /etc/selinux/config 
SELINUX=disabled

f.配置时间同步

#设置每5分钟同步一次

[root@test ~]# echo '#time sync by dxy' >>/var/spool/cron/root
[root@test ~]# echo '*/5 * * * * /usr/sbin/ntpdate pool.ntp.org >/dev/null 2>&1' >>/var/spool/cron/root
[root@test ~]# crontab -l
#time sync by dxy
*/5 * * * * /usr/sbin/ntpdate pool.ntp.org >/dev/null 2>&1

g.锁定系统关键文件,防止提权篡改

[root@test ~]# chattr +i /etc/passwd
[root@test ~]# chattr +i /etc/inittab
[root@test ~]# chattr +i /etc/group
[root@test ~]# chattr +i /etc/shadow
[root@test ~]# chattr +i /etc/gshadow

h.为Grub菜单增加密码

在RHEL 7.2和Centos 7(及更高版本)上,GRUB 2使用grub2-setpassword命令提供密码保护。

[root@test ~]# grub2-setpassword
Enter password:
Confirm password:

这个过程创建了一个/boot/grub2/user.cfg配置文件,其中包含已经加密的密码。这个密码的用户是root,在/boot/grub2/grub.cfg文件中已经定义了。通过此更改,在引导期间修改引导条目需要指定root用户名和密码。

j.调整文件描述符数量

进程及文件打开都会消耗文件描述符
#修改编辑/etc/security/limits.conf 这个文件

echo '*   -  nofile    65535 ' >>/etc/security/limits.conf 
tail -1 /etc/security/limits.conf 
#查看ulimit
ulimit  -n

k.精简并保留必要的开机自启动服务

服务                          状态          是否保留          描述
abrt-ccpp.service                          	  enabled          x
abrt-oops.service                             enabled          x
abrt-vmcore.service                           enabled          x 
abrt-xorg.service                             enabled          x
abrtd.service                                 enabled          x            调试相关的服务
auditd.service                                enabled          x            一次性任务服务
autovt@.service                               enabled          √            登录相关
crond.service                                 enabled          √            定时任务相关
getty@.service                                enabled          √            tty窗口
irqbalance.service                            enabled          √            多核cpu调度
kdump.service                                 enabled          x            内核出现问题dump信息保存
microcode.service                             enabled          x            inter的cpu会提供一个外挂的微指令集提供系统运行
rsyslog.service                               enabled          √            日志服务
sshd.service                                  enabled          √            ssh服务
systemd-readahead-collect.service             enabled          √            系统服务
systemd-readahead-drop.service                enabled          √            系统服务
systemd-readahead-replay.service              enabled          √            系统服务
tuned.service                                 enabled          √            服务器能耗管理
default.target                                enabled          √
multi-user.target                             enabled          √
remote-fs.target                              enabled          √
runlevel2.target                              enabled          √
runlevel3.target                              enabled          √
runlevel4.target                              enabled          √

```bash
systemctl list-unit-files|grep enable|grep -Ev "crond|rsyslog|sshd|network|systemd|sysatst|target|auditd|@|irqbalance"|awk '{print "systemctl disable "$1}'|bash

## l.内核优化
```c
#关闭ipv6 
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1 

#忽略icmp ping广播包,应开启,避免放大攻击  
net.ipv4.icmp_echo_ignore_broadcasts = 1 

# 开启恶意icmp错误消息保护  
net.ipv4.icmp_ignore_bogus_error_responses = 1  

#处理无源路由的包
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0

#内核放弃建立连接之前发送SYN 包的数量
net.ipv4.tcp_syn_retries = 1
对于一个新建连接,内核要发送多少个SYN连接请求才决定放弃。不应该大于255,默认值是5,对应于180秒左右时间。(对于大负载而物理通信良好的网络而言,这个值偏高,可修改为2.这个值仅仅是针对对外的连接,对进来的连接,是由tcp_retries决定的)

#内核放弃建立连接之前发送SYN+ACK 包的数量
net.ipv4.tcp_synack_retries = 1
对于远端的连接请求SYN,内核会发送SYN + ACK数据报,以确认收到上一个 SYN连接请求包。这是所谓的三次握手( threeway handshake)机制的第二个步骤。这里决定内核在放弃连接之前所送出的 SYN+ACK 数目。不应该大于255,默认值是5,对应于180秒左右时间。

#开启重用。允许将TIME-WAIT sockets 重新用于新的TCP 连接
net.ipv4.tcp_tw_reuse = 1
表示是否允许重新应用处于TIME-WAIT状态的socket用于新的TCP连接(这个对快速重启动某些服务,而启动后提示端口已经被使用的情形非常有帮助)
net.ipv4.tcp_mem = 94500000 915000000 927000000
确定TCP栈应该如何反映内存使用,每个值的单位都是内存页(通常是4KB)。第一个值是内存使用的下限;第二个值是内存压力模式开始对缓冲区使用应用压力的上限;第三个值是内存使用的上限。在这个层次上可以将报文丢弃,从而减少对内存的使用。对于较大的BDP可以增大这些值(注意,其单位是内存页而不是字节)。默认值94011  125351  188022
net.ipv4.tcp_fin_timeout = 2
对于本端断开的socket连接,TCP保持在FIN-WAIT-2状态的时间。对方可能会断开连接或一直不结束连接或不可预料的进程死亡。默认值为 60 秒。

#启用timewait 快速回收
net.ipv4.tcp_tw_recycle = 1
打开快速 TIME-WAIT sockets 回收。请不要随意修改这个值。(做NAT的时候,建议打开它)

# 开启SYN洪水攻击保护,表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭  
net.ipv4.tcp_syncookies = 1  

#当keepalive 起用的时候,TCP 发送keepalive 消息的频度。默认是2 小时
net.ipv4.tcp_keepalive_time =600
TCP发送keepalive探测消息的间隔时间(秒),用于确认TCP连接是否有效。

#允许系统打开的端口范围
net.ipv4.ip_local_port_range = 4000    65000
表示用于向外连接的端口范围,默认比较小,这个范围同样会间接用于NAT表规模。默认32768  61000

#未收到客户端确认信息的连接请求的最大值
net.ipv4.tcp_max_syn_backlog = 16384
对于那些依然还未获得客户端确认的连接请求﹐需要保存在队列中最大数目。对于超过 128Mb 内存的系统﹐默认值是 1024 ﹐低于 128Mb 的则为 128。如果服务器经常出现过载﹐可以尝试增加这个数字。警告﹗假如您将此值设为大于 1024﹐最好修改include/net/tcp.h里面的TCP_SYNQ_HSIZE﹐以保持TCP_SYNQ_HSIZE*16(SYN Flood攻击利用TCP协议散布握手的缺陷,伪造虚假源IP地址发送大量TCP-SYN半打开连接到目标系统,最终导致目标系统Socket队列资源耗尽而无法接受新的连接。为了应付这种攻击,现代Unix系统中普遍采用多连接队列处理的方式来缓冲(而不是解决)这种攻击,是用一个基本队列处理正常的完全连接应用(Connect()和Accept() ),是用另一个队列单独存放半打开连接。这种双队列处理方式和其他一些系统内核措施(例如Syn-Cookies/Caches)联合应用时,能够比较有效的缓解小规模的SYN Flood攻击(事实证明)

#系统在同时所处理的最大 timewait sockets 数目。如果超过此数的话﹐time-wait socket 会被立即砍除并且显示警告信息。之所以要设定这个限制﹐纯粹为了抵御那些简单的 DoS 攻击﹐不过﹐如果网络条件需要比默认值更多﹐则可以提高它(或许还要增加内存)。(事实上做NAT的时候最好可以适当地增加该值)
net.ipv4.tcp_max_tw_buckets = 36000

#设置一个路由表项的过期时长(秒).
net.ipv4.route.gc_timeout = 100

#定义了系统中每一个端口最大的监听队列的长度,这是个全局的参数。
net.core.somaxconn = 16384
用来限制监听(LISTEN)队列最大数据包的数量,超过这个数量就会导致链接超时或者触发重传机制。
web应用中listen函数的backlog默认会给我们内核参数的net.core.somaxconn限制到128,而nginx定义的NGX_LISTEN_BACKLOG默认为511,所以有必要调整这个值。对繁忙的服务器,增加该值有助于网络性能

#设置当个别接口接收包的速度快于内核处理速度时允许的最大的包序列
net.core.netdev_max_backlog = 16384
每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目,对重负载服务器而言,该值需要调高一点。

#限制仅仅是为了防止简单的DoS 攻击
net.ipv4.tcp_max_orphans = 16384
系统所能处理不属于任何进程的TCP sockets最大数量。假如超过这个数量﹐那么不属于任何进程的连接会被立即reset,并同时显示警告信息。之所以要设定这个限制﹐纯粹为了抵御那些简单的 DoS 攻击﹐千万不要依赖这个或是人为的降低这个限制。如果内存大更应该增加这个值。(这个值Redhat AS版本中设置为32768,但是很多防火墙修改的时候,建议该值修改为2000)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值