linux系统优化​

linux的最小化原则

1、安装系统最小化

2、开启服务最小化(crond sshd network rsyslog

3、操作最小化,rm -rf test.txt

4、登录化,平时用普通用户登录系统。

5用户权限最小化

6、配合参数合理化

服务器硬件采购优化

1、硬件供货商的选择

2、主要硬件部件的选择

3、定制化采购硬件

磁盘RAID选择、mount及文件系统优化

1、磁盘类型接口选择优化

2hdparm优化

3、磁盘挂载优化

4、RAID优化

操作系统选择优化

最小化软件安装优化

安装系统时,安装必要的软件包即可

安装:Debugging Tools compatibility Libraries Development Tools

安装基本的命令

yum install -y vim wget bc lsof net-tools traceroute bash-completion ntpdate sysstat tcpdump time tree nmap nc lrzsz screen iftop iotop htop inxi dos2unix

禁止开启自启动无用服务

ssh远程登录优化

1、禁止root远程登录

2、修改ssh端口号

3、关闭DNS选项

chattr输定关键的系统文件

chattr +i /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab

还可以将/usr/bin/chattr命令重命名删除,使用时上传

内核优化

总结内核优化的参数

下列文件所在目录:/proc/sys/net/ipv4/

参数名称

默认

建议值

解释

tcp_syn_retries

5

1

对于一个新的连接,内核要发送多少个SYN连接请求才决定放弃。不应该大于255,默认值5。对应的时间180秒。(这个仅仅针对对外的连接对进来的连接有tcp_retries1控制

tcp_synack_retries

5

1

对于远端的连接请求SYN内核发送SYN+ACK数据包确认收到上一个SYN请求连接该值决定在发送多少个SYN+ACK数据包放弃连接不应大于255,默认是5,对应的时间是180秒左右

tcp_keepalive_time

7200

600

TCP发送keepalive探测消息的时间间隔(,用于确认TCP连接是否有效防止只建立连接而不发送数据的恶意攻击

tcp_keepalive_probes

9

3

在tcp_keepalive_time之后,没有收到对方确认继续发送探测包的次数,默认9次

tcp_keepalive_intvl

75

15

在tcp_keepalive_time之后,没有收到对方确认继续发送探测包的时间间隔,默认75秒

tcp_retries1

3

3

放弃回应一个tcp连接请求之前,进行重试的

tcp_retries2

15

5

TCP失败,在进行多少次重试后放弃连接

tcp_orphan_retries

7

3

近端丢弃TCP连接之前进行多少次重试。默认7次相当于50秒-16分钟。负载的web服务器可以降低该值

tcp_fin_timeout

60

2

对于端断开的socket连接,TCP保持在FIN-WAIT-2状态的时间。默认60秒

tcp_max_tw_buckets

18000

36000

系统在同时处理的最大timewait sockets 数目。如果超过次值time-wait socket将会立即被丢弃并显示警告信息。将该值提高,是为了防止一些简单的dos攻击

tcp_tw_recycle

0

1

打开TIME-WAIT socket 回收

tcp_tw_reuse

0

1

是否允许处于TIME-WAIT状态的socket用于新的TCP连接这个对于快速重启某个服务,启动后提示端口被占用的情景非常有帮助

tcp_max_orphans

8192

32768

系统所能处理的不属于任何进程TIME-WAIT sockets的数量,如果超过这个数量,那么不属于任进程的连接就会被立刻reset并显示警告信息。设置这个限制是为了防止简单的dos攻击

tcp_abort_on_overflow

0

0

守护进程太忙而不能接受新的连接时,就像对方发送reset消息默认是关闭。打开后将会应影响客户的使用

tcp_syncookies

0

1

只有在内核编译时选择了CONFIG_SYNCOOKIES时才会发生作用。当出现syn等候队列出现溢出时象对方发送syncookies。目的是为了防止syn flood攻击。

tcp_max_syn_backlog

1024

16384

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

tcp_wmem:mindefaultmax

4096

16384

131072

51200

131072

204800

发送缓存设置

min:为TCP socket预留用于发送缓冲的内存最小值。每个tcp socket都可以在建以后使用它。默认值为4096(4K)。

default:为TCP socket预留用于发送缓冲的内存数量,默认情况下该值会影响其它协议使用的net.core.wmem_default 值,一般要低于net.core.wmem_default的值。默认值为16384(16K)。

max: 用于TCP socket发送缓冲的内存最大值。该值不会影响net.core.wmem_max,"静态"选择参数SO_SNDBUF则不受该值影响。默认值为131072(128K)。(对于服务器而言,增加这个参数的值对于发送数据很有帮助)

tcp_rmem:mindefaultmax

4096

87380

174760


接收缓存的设置

同tcp_wmem

tcp_mem:mindefaultmax

根据内存计算


low当TCP使用了低于该值内存页面数时TCP不会考虑释放内存,低于此值没有内存压力。理想状态该值于指定的tcp_wmem第2相匹配:页面大小*并发数/大小131072*300/4098

pressure:当TCP使用了超过该值的内存页面数量时,TCP试图稳定其内存使用,进入pressure模式,当内存消耗低于low值时则退出pressure状态。(理想情况下这个值应该是 TCP 可以使用的总缓冲区大小的最大值 (204800 * 300 / 4096)。 )

high:允许所有tcp sockets用于排队缓冲数据报的页面量。(如果超过这个值,TCP 连接将被拒绝,这就是为什么不要令其过于保守 (512000 * 300 / 4096) 的原因了。 在这种情况下,提供的价值很大,它能处理很多连接,是所预期的 2.5 倍;或者使现有连接能够传输 2.5 倍的数据。 我的网络里为192000 300000 732000)

一般情况下这些值是在系统启动时根据系统内存数量计算得到的。

ip_forward

0

1

开启IP转发功能

ip_local_port_range:min max

32768

61000

1024

65000

表示用于向外连接的端口范围

ip_conntrack_max

65535

65535

系统支持的ipv4的最大连接数


一下文件在/proc/sys/net/ipv4/netfilter

文件需要打开防火墙才会存在

参数

默认

建议值

解释

ip_conntrack_max

65535

65535

系统支持的最大ipv4连接数

ip_conntrack_tcp_timeout_established

432000

180

已建立TCP连接的超时时间默认是432000,5天。这个过大导致一些可能不用的连接常驻在内存中占用大量的资源

ip_conntrack_tcp_timeout_time_wait

120

120

time-wait状态超时时间

ip_conntrack_tcp_timeout_close_wait

60

60

close-wait状态超时间

ip_conntrack_tcp_timeout_fin_wait

120

120

fin-wait状态超时时间


以下文件所在目录/proc/sys/net/core/

参数名称

默认值

建议值

解释

netdev_max_backlog

1024

16384

每个网络接口接受数据包的速率内核处理这些数据包的速率快时,允许送到队列的数据包的最大数目对于负载的服务器调大该值。

somaxconn

128

16384

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

wmem_default

129024

129024

默认的发送窗口大小(字节)

rmem_default

129024

129024

默认的接受窗口大小(字节

rmem_max

129024

873200

最大的TCP数据接收缓冲

wmem_max

129024

873200

最大的TCP数据发送缓冲


内核优化常用参数

net.ipv4.tcp_syn_retries = 1

net.ipv4.tcp_synack_retries = 1

net.ipv4.tcp_keepalive_time = 600

net.ipv4.tcp_keepalive_probes = 3

net.ipv4.tcp_keepalive_intvl =15

net.ipv4.tcp_retries2 = 5

net.ipv4.tcp_fin_timeout = 2

net.ipv4.tcp_max_tw_buckets = 36000

net.ipv4.tcp_tw_recycle = 1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_max_orphans = 32768

net.ipv4.tcp_syncookies = 1

net.ipv4.tcp_max_syn_backlog = 16384

net.ipv4.tcp_wmem = 8192 131072 16777216

net.ipv4.tcp_rmem = 32768 131072 16777216

net.ipv4.tcp_mem = 786432 1048576 1572864

net.ipv4.ip_local_port_range = 1024 65000

net.ipv4.ip_conntrack_max = 65536

net.ipv4.netfilter.ip_conntrack_max=65536

net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=180

net.core.somaxconn = 16384

net.core.netdev_max_backlog = 16384


linux系统优化​项_linux


增加系统文件描述符

vim /etc/security/limits.conf

* - nofile 65535

* - nproc 65535

vim /etc/security/limits.d/90-nproc.conf

* soft nproc unlimited

root soft nproc unlimited

配置sudo普通用户权限进行精细管理

实例

[root@node11 limits.d]# cat /etc/sudoers.d/permissions

### Networking

Cmnd_Alias NOPASS_NETWORKING = /sbin/route, /sbin/ifconfig, /sbin/ip, /bin/ping, /bin/ping6, /bin/traceroute, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool, /usr/bin/host, /usr/bin/nslookup, /bin/hostname, /bin/hostnamectl

Cmnd_Alias PASS_NETWORKING = /sbin/ifconfig del, /sbin/ip del, /sbin/ifup, /sbin/ifdown, /usr/sbin/brctl


### Installation and management of software

Cmnd_Alias NOPASS_SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum, /usr/bin/make, /usr/bin/cmake, /usr/bin/ccmake, /usr/bin/pip, /usr/bin/easy_install


### Services

Cmnd_Alias NOPASS_SERVICES = /sbin/service, /sbin/chkconfig, /etc/init.d/*, /usr/bin/systemctl start, /usr/bin/systemctl stop, /usr/bin/systemctl reload, /usr/bin/systemctl restart, /usr/bin/systemctl status, /usr/bin/systemctl enable, /usr/bin/systemctl disable, /usr/bin/nohup, /bin/journalctl


### Updating the locate database

Cmnd_Alias NOPASS_LOCATE = /usr/bin/updatedb


### Storage

Cmnd_Alias NOPASS_STORAGE = /sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbin/partprobe, /bin/mount, /bin/umount

Cmnd_Alias PASS_FORMATTING = /sbin/mkfs, /sbin/mkfs.btrfs, /sbin/mkfs.cramfs, /sbin/mkfs.ext2, /sbin/mkfs.ext3, /sbin/mkfs.ext4, /sbin/mkfs.minix, /sbin/mkfs.xfs


### Delegating permissions

Cmnd_Alias NOPASS_DELEGATING = /bin/chown, /bin/chmod, /bin/chgrp, !/usr/sbin/visudo, !/usr/bin/vi *sudoer*, !/usr/bin/vim *sudoer*, /usr/bin/echo *sudoer*


### Processes

Cmnd_Alias PASS_PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall, /usr/bin/pkill


### System Information

Cmnd_Alias NOPASS_SYSTEM_INFORMATION = /bin/uname, /bin/hostname, /usr/bin/lscpu, /usr/bin/free, /usr/sbin/iftop, /usr/sbin/iotop, /usr/bin/ionice, /usr/bin/sar, /bin/netstat, /usr/sbin/ss, /usr/bin/top, /bin/ps, /usr/bin/pstree, /bin/df, /usr/bin/iostat, /usr/bin/vmstat, /usr/bin/inxi, /usr/bin/uptime, /usr/bin/du, /usr/sbin/lsof


### Text

Cmnd_Alias NOPASS_TEXT = /bin/grep, /bin/awk, /bin/find, /usr/bin/locate, /bin/cat, /bin/tac, /usr/bin/head, /bin/more, /usr/bin/less, /usr/bin/tail, /usr/bin/tailf, /bin/cut, /bin/egrep, /bin/fgrep, /usr/bin/rename, /bin/sort, /usr/bin/tr, /usr/bin/uniq, /usr/bin/wc, /usr/bin/whatis, /usr/bin/whereis, /usr/bin/which, /bin/touch, /bin/mkdir, /usr/bin/install, /bin/ln, /bin/cp, /bin/mv, /usr/bin/dos2unix, /usr/bin/watch, /usr/bin/xargs


### Text modify

Cmnd_Alias NOPASS_TEXT_MODIFY = /bin/vi, /usr/bin/vim, /bin/rm, /bin/echo, /bin/sed


### Compression

Cmnd_Alias NOPASS_COMPRESSION = /bin/tar, /bin/gzip, /bin/gunzip, /usr/bin/zip, /usr/bin/unzip, /usr/bin/bzip2, /usr/bin/zdiff, /usr/bin/zgrep, /usr/bin/zegrep, /usr/bin/zfgrep, /usr/bin/zipgrep, /usr/bin/zless, /usr/bin/zmore, /usr/bin/xz, /usr/bin/unxz, /usr/bin/xzcat, /usr/bin/xzcmp, /usr/bin/xzdec, /usr/bin/xzdiff, /usr/bin/xzegrep, /usr/bin/xzfgrep, /usr/bin/xzgrep, /usr/bin/xzless, /usr/bin/xzmore, /usr/bin/bzcat, /usr/bin/bzcmp ,/usr/bin/bzdiff, /usr/bin/bzgrep, /usr/bin/bzip2, /usr/bin/bzless, /usr/bin/bzmore


### File push

Cmnd_Alias NOPASS_FILEPUSH = /usr/bin/rz, /usr/bin/sz, /usr/bin/scp, /usr/bin/rsync


### Create user and group

Cmnd_Alias NOPASS_CREATE_USER = /usr/sbin/useradd, ! /usr/bin/passwd root, /usr/bin/passwd, /usr/sbin/userdel, /usr/sbin/groupadd, /usr/sbin/groupdel, /usr/bin/chage, /bin/chgrp, /usr/sbin/chpasswd, /usr/bin/gpasswd ,/usr/sbin/groupmod, /usr/bin/id


### Time

Cmnd_Alias NOPASS_TIME = /sbin/clock, /usr/sbin/clockdiff, /bin/date, /sbin/hwclock, /usr/sbin/ntpdate


### Crontab

Cmnd_Alias NOPASS_CRONTAB = /usr/bin/crontab


### Diff

Cmnd_Alias NOPASS_DIFF = /usr/bin/diff, /usr/bin/vimdiff


### SHELL

Cmnd_Alias NOPASS_SHELL = /bin/sh, /usr/bin/python, /bin/usleep, /bin/sleep


### Security

Cmnd_Alias NOPASS_SECURITY = /sbin/ip6tables, /sbin/iptables, /sbin/iptunnel, /usr/sbin/setenforce, /usr/sbin/getenforce


### Capture package

Cmnd_Alias NOPASS_CAPTURE = /usr/sbin/tcpdump, /usr/sbin/tshark


### Audit

Cmnd_Alias NOPASS_AUDIT = /usr/bin/last, /usr/bin/lastlog, /usr/bin/who, /usr/bin/whoami


### Command

Cmnd_Alias NOPASS_COMMAND = /usr/bin/virsh, /usr/bin/virt-install, /usr/sbin/qemu-kvm, /usr/bin/qemu-img


### Other

Cmnd_Alias NOPASS_OTHER = /usr/bin/screen, /usr/bin/wget, /usr/bin/nc, /usr/bin/nmap, /usr/bin/curl


## Allow root to run any commands anywhere

sremanager ALL=(ALL) NOPASSWD: NOPASS_NETWORKING, NOPASS_SOFTWARE, NOPASS_SERVICES, NOPASS_LOCATE, NOPASS_STORAGE, NOPASS_DELEGATING, NOPASS_SYSTEM_INFORMATION, NOPASS_TEXT, NOPASS_TEXT_MODIFY, NOPASS_COMPRESSION, NOPASS_FILEPUSH, NOPASS_CREATE_USER, NOPASS_TIME, NOPASS_SECURITY, NOPASS_CAPTURE, NOPASS_AUDIT, NOPASS_CRONTAB, NOPASS_DIFF, NOPASS_SHELL, NOPASS_COMMAND, NOPASS_OTHER, PASSWD: PASS_NETWORKING, PASS_FORMATTING, PASS_PROCESSES


#Defaults:sremanager timestamp_timeout=5


developer ALL=(ALL) NOPASSWD: NOPASS_SYSTEM_INFORMATION, NOPASS_TEXT, NOPASS_COMPRESSION, NOPASS_FILEPUSH, NOPASS_DIFF

zabbix ALL=(ALL) NOPASSWD: NOPASS_SYSTEM_INFORMATION

禁ping必须)

临时禁止PING的命令为:

echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all

永久禁ping /etc/sysctl.conf 中增加一行

net.ipv4.icmp_echo_ignore_all=0

关闭多余的控制台(非必须

清除多余系统虚拟账号(非必须)

配置防火墙、关闭selinux

防火墙默认策略drop,只开放需要的访问

grub加密码非必须

设置/etc/hosts.allow /etc/hosts.deny

配置yum源

使用国内的yum源

修改yum源(改为阿里源)

备份:

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup

mv /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel-testing.repo.backup

基本源:

CentOS 5

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

CentOS 6

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

CentOS 7

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

epel源:

epel(RHEL 7)

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

epel(RHEL 6)

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo

epel(RHEL 5)

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-5.repo

禁止键盘重启

vim /etc/init/control-alt-delete.conf


/tmp临时目录的安全

用户的密码应该复杂一些定期更换

注销账号的时间,命令历史记录数

所有的用户设置登录时间超过时间自动退出登录

vim /etc/profile

TMOUT=30

HISTSIZE=1000

# 设置历史记录的条数

root用户设置登录时间

vim /root/.bash_profile

TMOUT=30

export TMOUT


安装系统性能监控软件

设置时间同步

使用ntpdate times.aliyun.com

操作系统磁盘分区划分优化

编写系统一键优化脚本

取消登录界面的提示信息(提示信息中包括了系统版本和内核版本)

cat /etc/issue

CentOS release 6.8 (Final)

Kernel \r on an \m

清空文件