Linux 系统优化

概述

在Linux 学习笔记一大体介绍了一些简单的Linux知识和一些简单的优化。下面我们来学习一下Linux和Linux一些安全知识(Linux是基于内核为2.6.32-642 CentOS x86_64操作系统)。

精简系统自启动和删除无用的账号和组

在安装Liunx系统中有很多服务、用户或者用户组都是无用的,通过安全和性能考虑需要删除或者禁用他们。

#只需要查找3级别以上的服务是否开启,3代表运行级别的中的数字。
chkconfig --list | grep 3:on

有些服务是必须开启的,比如:crond,sshd,network,rsyslog和sysstat等。通过上述命令检查是否开启。如果没有开启如要设置开机自动重启。

# 选择需要开启的服务启动它就可以。
setup->system service或者ntsysv
# 或者我们通过shell脚本开机启动它
chkconfig --list | grep 3:on | grep -vE "crond|sshd|network|rsyslog|sysstat" | awk '{print "chkconfig " $1 " off"}'|bash

ssh配置

Linux sshd_config 简单的配置,下面我们来进行最基本的讲解,首先备份自己的sshd_config。

cp /etc/ssh/sshd_config /etc/ssh/sshd_config.old
emacs /etc/ssh/sshd_config 
Port 23489 #连接ssh服务器端口设置。
PermitRootLogin no #是否允许root远程登录。
PermitEmptyPasswords no #是否允许密码为空的用户登录。
UseDNS no #指定sshd是否通过dns反向检查。
GSSAPIAuthentication no 
ListenAddress 11.0.0.7:23489 #sshd监听服务器地址。
#配置完成之后,下面设置查看自己的端口
netstat -lnt或者lsof -i tcp:端口号(lsof需要安装)

运行/etc/init.d/sshd reload平滑处理,为了更高级安全策略,建议通过防火墙限制仅能使用内网IP连接此服务器。

iptables -I INPUT -p tcp --dport 23489 -s 10.0.0.7/24 -j ACCEPT

去除linux版本信息

因为特定的版本存在特定的bug,有些黑客依据版本信息可以黑我们的电脑。所以最好把版本信息给删除掉。

#通过重定向的方法覆盖掉原来的内容
#基于debian系列
>/etc/debian_version
#基于centos版本
>/etc/redhat-release
>/etc/issue

锁定关键系统文件

chattr只有超级权限的用户才具有使用该命令的权限,通过chattr命令修改属性能够提高系统的安全性,但是它并不适合所有的目录。chattr命令不能保护/、/dev、/tmp、/var目录。lsattr命令是显示chattr命令设置的文件属性。

  • a即append,设定该参数后,只能向文件中添加数据,而不能删除,多用于服务器日志文 件安全,只有root才能设定这个属性。
  • i设定文件不能被删除、改名、设定链接关系,同时不能写入或新增内容。i参数对于文件 系统的安全设置有很大帮助。
#用chattr命令防止系统中某个关键文件被修改,可以通过+i来设置。 
chattr +i /etc/fstab 
#让某个文件只能往里面追加内容,不能删除,一些日志文件适用于这种操作
chattr +a /data1/user_act.log
#锁定关键系统文件开始
chattr +i /etc/passwd
chattr +i /etc/inittab
chattr +i /etc/group
chattr +i /etc/shadow
chattr +i /etc/gshadow
#锁定关键系统文件结束

关闭不需要的tty

在centos中/etc/init/start-ttys.conf中开启了6个控制台,这六个控制台都放在了内存中,我们通过:

[brian@Master ~]$ ps aux | grep tty 
root      2007  0.0  0.0   4064    24 tty2     Ss+  09:27   0:00 /sbin/mingetty /dev/tty2
root      2009  0.0  0.0   4064    24 tty3     Ss+  09:27   0:00 /sbin/mingetty /dev/tty3
root      2011  0.0  0.0   4064    24 tty4     Ss+  09:27   0:00 /sbin/mingetty /dev/tty4
root      2013  0.0  0.0   4064    24 tty5     Ss+  09:27   0:00 /sbin/mingetty /dev/tty5
root      2015  0.0  0.0   4064    24 tty6     Ss+  09:27   0:00 /sbin/mingetty /dev/tty6
#事实上没有必要,我们可以只保留两个控制台即可。
[brian@Master ~]$ sudo nano /etc/init/start-ttys.conf
修改env ACTIVE_CONSOLES=/dev/tty[1-6] 为env ACTIVE_CONSOLES=/dev/tty[1-2]
[brian@Master ~]$ sudo nano /etc/sysconfig/init
修改ACTIVE_CONSOLES=/dev/tty[1-6]为ACTIVE_CONSOLES=/dev/tty[1-2]

修改完成重启机器

调整Linux的最大文件打开数

在/etc/security/limit.conf中添加如下设置:

[brian@Master ~]$ sudo nano /etc/security/limit.conf
* soft nofile 65535
* hard nofile 65535
另外再去修改/etc/rc.local
[brian@Master ~]$ sudo nano /etc/rc.local
ulimit -SHn 65535

关闭写磁盘I/O功能

Linux文件默认有三个时间,分别如下:

  • atime 对此文件的访问时间
  • ctime 此文件inode发生变化时间
  • mtime 此文件的修改时间

如果一个linux服务器很多小文件和琐碎的资源文件,通常没有你要记录文件的访问时间,这样可以减少写磁盘的I/O。通过如下配置:

[brian@Master ~]$ sudo nano /etc/fstab
#在包含大量小文件的分区使用noatime和nodiratime
/dev/pics ext4 noatime,nodiratime 0 0

Linux内核优化

针对不同的服务和应用来优化Linux内核,比如针对Apache和Nginx等来设置优化Linux内核,如果针对Oracle设置相应的设置Linux内核优化。如果没有特殊的要求可以不用设置自己的Linux内核优化。我们下边设置的内核参数主要是适用于Nginx,Squid等web服务。 在优化之前,我们通过命令查看当前连接统计数:

[brian@Master ~]$ netstat -n | awk '/^tcp/ {++S[$NF]} END{for(a in S) print a,S[a]}'
AST_ACK 14
SYN_RECV 348
ESTABLISHED 70
FIN_WAIT1 229
FIN_WAIT2 30
CLOSING 33
TIME_WAIT 18122

  • CLOSED:无活动的或正在进行的连接
  • LISTEN:服务器在等待进入呼叫
  • SYN_RECV:一个连接请求已经到达,等待确认
  • SYN_SENT:应用已经开始,打开一个连接
  • ESTABLISHED:正常数据传输状态
  • FIN_WAIT1:应用说它已经完成
  • FIN_WAIT2:另一边已同意释放
  • ITMED_WAIT:等待所有分组死掉
  • CLOSING:两边同时尝试关闭
  • TIME_WAIT:另一边已初始化一个释放
  • LAST_ACK:等待所有分组死掉

值得注意的是在Squid服务器中,TCP TIME_WAIT 连接数会达到两三万,服务器很容易被拖死。所以我们可以通过Linux内核数来减少Squid服务器的TIME_WAIT套接字数量。

sudo nano /etc/sysctl.conf
# Squid服务器
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 10000 65000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000
# Apache和Nginx服务器
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 10000 65000
# Postfix服务器
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 10000 65000
kernel.shmmax = 134217728
# 保存退出,并执行生效
/sbin/sysctl -p
  • net.ipv4.tcp_syncookies=1表示开启SYN Cookies.当出现SYN等待队列溢出时,启用Cookies来处理,可防范少量的SYN攻击。默认为0,不开启。
  • net.ipv4.tcp_tw_reuse=1表示开启重用,即允许将TIME_WAIT套接字重新用于新的连接。
  • net.ipv4.tcp_tw_recycle = 1表示开启TCP连接中将TIME_WAIT套接字的快速回收。
  • net.ipv4.tcp_fin_timeout = 30 表示如果套接字由本端要求关闭,那么这个参数将决定它保持在FIN-WAIT-2状态时间。
  • net.ipv4.tcp_keepalive_time=1200表示当Keepalive启用时,TCP发送Keepalived的消息的频度改为20分钟,默认是2个小时。
  • net.ipv4.ip_local_port_range = 10000 65000表示系统向外连接端口范围。
  • net.ipv4.tcp_max_syn_backlog = 8192表示SYN队列的长度,默认是1024,此处加大队列长度为8192,可以容纳更多等待的网络连接数。
  • net.ipv4.tcp_max_tw_buckets = 5000表示系统同时保持TIME_WAIT套接字的最大数量,如果超过该数字,TIME_WAIT套接字将立刻被清除并打印

警告信息,此处改为5000,对于Apache、Nginx前面都已经很好的减少TIME_WAIT套接字的连接数量,但是对于Squid来说起不到很好的作用,有了此参数可以控制TIME_WAIT套接字的最大数量。

这些都是基本的配置,搭建可以根据自己的需求来更改内核,要尽量保持服务器稳定安全的原则下。CPU负载和CPU利用率:CPU负载显示的是一段时间内正在使用和等待使用CPU的平均任务数;CPU利用率是程序在运行期间实时占用的CPU百分比。CPU的利用率高并不意味着负载一定大。如果%user+%system的值长期大于85%,我们就认为CPU负载过重,应该考虑添加物理CPU或者集群处理。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏郑家乐的专栏

多版本 Node.js 使用 Workflow

NodeJS 成为新一届的版本帝后,需要预编译的模块常常更新不够及时,就会出现我这样上班时间搞环境 ,那么如何保持一机多版本继续使用低版本的 NodeJS 运行...

3160
来自专栏破晓之歌

webpack项目初始化和基于模块的脚手架搭建

http://localhost:8088/dist/view/index.html

1101
来自专栏desperate633

TCP协议浅析TCP概述TCP可靠数据传输TCP流量控制TCP连接管理

上图我们进行一个分析,以便搞清楚tcp序列号和ack的应用 首先,hostA作为发送方给B发送数据,随机选择一个序列号seq = 42,也就是这段segmen...

1312
来自专栏有困难要上,没有困难创造困难也要上!

Windows平台使用Python切换用户运行程序

3419
来自专栏运维小白

12.22 php-fpm慢执行日志

php-fpm慢执行日志目录概要 vim /usr/local/php-fpm/etc/php-fpm.d/www.conf//加入如下内容 request_s...

4017
来自专栏耕耘实录

关于FTP主动模式与被动模式的一点理解

版权声明:本文为耕耘实录原创文章,各大自媒体平台同步更新。欢迎转载,转载请注明出处,谢谢

1352
来自专栏SDNLAB

脱坑神器,让你一步了解ODL控制器集群

一、控制器集群基本知识 1.1 Consensus一致性 Consensus一致性是指多个服务器在状态达成一致,但是在一个分布式系统中,因为各种意外可能,有的...

4737
来自专栏韩伟的专栏

状态模式:一个Epoll边缘触发的代理服务器设计

设计模式是一门热门的知识,但是何时应该用哪个,却往往不容易掌握,本文以一个Socks5代理服务器的设计为例,介绍状态模式的实践用法。 软件的功能介绍 提供Soc...

4857
来自专栏耕耘实录

CentOS7中firewalld的安装与使用详解

1、firewalld提供了支持网络/防火墙区域(zone)定义网络链接以及接口安全等级的动态防火墙管理工具。它支持 IPv4, IPv6 防火墙设置以及以太网...

842
来自专栏Python

nginx优化 突破十万并发

文章转载于:http://9388751.blog.51cto.com/9378751/1676821

5210

扫码关注云+社区

领取腾讯云代金券