0%

CentOS7 部署规范和初始化配置

本文主要介绍 CentOS 7 服务器部署规范和一些初始化初始化配置。

CentOS 7 采用最小化安装,安装系统最重要的一步就是磁盘分区规划:

如果尚有磁盘空间,务必采用LVM,方便未来扩容

空间划分要合理 / 根分区,/data 数据分区,如有必要应划分独立的日志分区 /var

系统检查与初始化

检查CPU/内存/磁盘情况

1
2
3
top
fdisk -l
cat /proc/cpuinfo

网络,主机名

借助 nmtui 可以方便的通过一个界面进行网卡、主机名设置

CentOS7 重启网卡依然可以使用 service network restart

SELINUX

关闭 SELINUX,通过 sestatus 验证 :

1
vi /etc/sysconfig/selinux

内核参数调整

主要为TCP一些参数调整,打开文件数限制,swap 使用限制,调整需要重启服务器,可与上面两步一起调整。

vm.swappiness = 0 设置为 0,表示不启用 swap。当内存不够会触发 OOM,根据情况可调整。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
net.unix.max_dgram_qlen = 100

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.neigh.default.gc_stale_time=120
net.ipv4.ip_local_port_range = 10000 65535

net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_mem = 524288 2048000 20480000
net.ipv4.tcp_rmem = 4096 40960000 409600000
net.ipv4.tcp_wmem = 4096 40960000 409600000
net.ipv4.tcp_max_orphans = 3276800

net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 81920
net.ipv4.tcp_syn_retries = 3
net.ipv4.tcp_synack_retries = 3
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 120
net.ipv4.tcp_tw_reuse = 0
net.ipv4.tcp_tw_recycle = 0
net.ipv4.route.max_size = 5242880
net.ipv4.tcp_max_tw_buckets = 1440000

kernel.sysrq = 0
kernel.core_uses_pid = 1
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
kernel.msgmnb = 4203520
kernel.msgmni = 256
kernel.msgmax = 8192

net.core.somaxconn = 32768
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216

fs.file-max = 655360
vm.swappiness = 0

net.ipv4.tcp_tw_recycle has been removed from Linux 4.12;所以 Ubuntu 22.04 无此参数。

在服务端,不要启用 net.ipv4.tcp_tw_recycle,除非你能确保你的服务器网络环境不是 NAT 。在服务端上启用 net.ipv4.tw_reuse 对于连接进来的 TCP 连接来说,并没有任何卵用。

查看 TCP 手册,推荐不开启:https://linux.die.net/man/7/tcp

1
2
tcp_tw_recycle (Boolean; default: disabled; since Linux 2.4)
Enable fast recycling of TIME_WAIT sockets. Enabling this option is not recommended since this causes problems when working with NAT (Network Address Translation).

打开文件数限制

查看并修改 (可能需要重启服务器),当作为 Server 时,系统默认 1024 远远不够。

1
2
# 查看当前文件数
ulimit -a

最下面增加

1
2
3
4
5
vi /etc/security/limits.conf
* soft nofile 655360
* hard nofile 655360
* soft core unlimited
* hard core unlimited

软件防火墙

CentOS 默认为firewall,部署阶段可以关闭软件防火墙,生产环境务必开启(有硬件防火墙除外)

不喜欢 firewall,可以重装回 iptables

1
2
3
4
5
6
7
8
systemctl stop firewalld
systemctl disable firewalld

yum -y install system-config-firewall system-config-firewall-tui iptables-services

systemctl start iptables
systemctl enable iptables
system-config-firewall-tui 提供类似 CentOS 6中的 setup 配置 iptables。

系统软件包更新更新

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 安装必备的工具
yum install net-tools bash-completion wget

# 更新系统版本到最新
yum update

# 安装必备的系统工具
yum -y install mlocate screen ntp unzip zip parted rsync tree vim lrzsz tcpdump telnet sysstat lsof strace iptraf iotop hdparm

# 常用开发包
yum -y install gcc gcc-c++ autoconf automake make cmake libevent libtool libXaw expat-devel libxml2-devel libevent-devel asciidoc cyrus-sasl-devel cyrus-sasl-gssapi krb5-devel libtidy libxslt-devel python-devel openssl-devel gmp-devel snappy snappy-devel libcurl libcurl-devel libXrender libXtst

# epel 源
yum -y install epel-release

时间同步

查看时间以及时区:

1
timedatectl

先手动同步一次,然后加入到计划任务,每8小时同步一次

1
2
3
4
5
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
timedatectl set-timezone "Asia/Shanghai"
ntpdate us.pool.ntp.org
echo "0 */8 * * * /usr/sbin/ntpdate us.pool.ntp.org >> /var/log/ntp.log" >> /var/spool/cron/root
systemctl restart crond

透明大页面

当服务器作为数据库、内存数据库、常驻任务服务器时(Redis、MySQL、Java、Hadoop等),启用透明大页面,它可能会导致重大的性能问题。

当服务器只用于 Webserver(Nginx+PHP),可以忽略。

1
2
3
4
5
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

vi /etc/rc.local
chmod +x /etc/rc.local

重启服务

在这里可以系统重启一下,方便验证以上操作。

服务器安全配置

避免 SSH 弱口令,修改 SSH 服务端口,修改 SSH 配置文件,将其监听端口更改为大于10000的值:

1
2
vi /etc/ssh/sshd_config
Port 22345

修改软件防火墙把默认的22端口改为刚才指定的端口。

关于 SSH 这些配置、端口的修改,一定要在修改后立即进行连接测试,以防由于误操作,断开了当前连接而无法再次连接主机。

禁止root账户远程登录,:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
vi /etc/ssh/sshd_config
PermitRootLogin no
添加管理员账户:

# 添加wheel管理员组用户
useradd -g wheel yaoniming
passwd yaoniming

# 限制wheel组用户才能su,去除该行注释
shell> vi /etc/pam.d/su
auth required pam_wheel.so use_uid

# wheel组可使用sudo,去除改行注释
vi /etc/sudoers
%wheel ALL=(ALL) NOPASSWD: ALL

同样,这里的相关修改以后,一定要立即连接测试。

如有条件,可采用 ssh-key 进行登录