本文主要介绍 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 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
时间同步 查看时间以及时区:
先手动同步一次,然后加入到计划任务,每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 进行登录