CentOS7 初始服务优化关闭等

穷人使用的

创建虚拟交换分区

dd if=/dev/zero of=/mnt/swap bs=1M count=6144
# 创建swap 分区
mkswap /mnt/swap
# 格式化 swap分区

# 激活swap分区
swapon /mnt/swap

chown root:root /mnt/swap
chmod 0600 /mnt/swap

cat>>/etc/fstab<<'EOF'
/mnt/swap swap swap defaults 0 0
EOF
# 挂载分区文件
交换空间使用倾向(Swappiness):决定内核将数据从 RAM 移到 swap 的频率

调整系统的swap分区的比例 
设置 60的话,内存使用40%就会去用swap
临时生效
sysctl vm.swappiness=100
cat /proc/sys/vm/swappiness
输出应为 80

为使该设置在系统重启后永久生效,编辑 /etc/sysctl.conf:
添加或修改以下行:
vm.swappiness=80
内存过量分配(Overcommitment):允许分配的内存超过物理 RAM 和 swap 的总和。
调整 vm.overcommit_memory,这是内核内存分配策略的核心参数之一,控制内存过量分配的行为

vm.overcommit_memory 有三种模式(值:0、1、2):

    0(默认,启发式过量分配):
        内核根据启发式规则允许一定程度的内存过量分配,但会拒绝明显不合理的请求(如单个进程请求远超系统总内存)。
        适合大多数通用场景,但在内存压力大时可能导致分配失败(如 Docker 的 cannot allocate memory 错误)。
        依赖 vm.overcommit_ratio(默认 50%)来限制可分配内存(通常为 RAM + swap 的 50%)。
    1(总是允许过量分配):
        内核允许所有内存分配请求,即使请求超过物理内存和 swap 的总和。
        适用于需要大量虚拟内存的场景(如运行多个 Docker 容器),但如果实际内存不足,可能触发 OOM(Out of Memory)杀进程。
         设置 vm.overcommit_ratio 80%
        80 表示系统倾向于将不活跃的内存页面移到 swap,释放 RAM 给活跃进程。
        
    2(严格限制):
        内核严格限制内存分配,总分配量不得超过物理 RAM + swap(由 vm.overcommit_ratio 调整)。
        适合内存敏感的系统(如数据库服务器),但可能导致内存分配失败,尤其在运行内存密集型任务(如 Docker 容器)时。
        如果你遇到 cannot allocate memory 错误,且 vm.overcommit_memory=2,可能是内存分配受限。
        
        
        
sysctl vm.overcommit_memory       
如果值为 2(严格限制),可以尝试设置为 0(默认)或 1(允许过量分配):
sudo sysctl vm.overcommit_memory=1       

使更改永久生效,编辑 /etc/sysctl.conf 添加:
vm.overcommit_memory=1

优化 补充

grep 端口号 /etc/services|head
查询端口号的服务程序

TCP
25端口:邮件服务

systemctl stop postfix
systemctl disable  postfix

53端口 :域名解析服务

systemctl stop rhel-domainname

111端口:SUN公司的RPC服务所有端口

systemctl stop rpcbind
systemctl stop rpcbind.socket
systemctl stop rpcbind.target

systemctl disable  rpcbind
systemctl disable  rpcbind.socket
systemctl disable  rpcbind.target

631端口:打印服务

systemctl stop cups

UDP
5353端口:多播DNS(multicastDNS)/DNS-SD网络服务

systemctl stop avahi-daemon
systemctl stop avahi-daemon.socket




ss -ntlp
systemctl stop rhel-domainname
systemctl stop cups
systemctl stop rpcbind
systemctl stop rpcbind.socket
systemctl stop rpcbind.target
systemctl stop dnsmasq
systemctl stop postfix
systemctl stop avahi-daemonsystemctl stop avahi-daemon.socketifconfig virbr0 downbrctl delbr virbr0

systemctl disable rpcbind
systemctl disable rpcbind.socket
systemctl disable rpcbind.target
systemctl disable cups
systemctl disable dnsmasq
systemctl disable rhel-domainname
systemctl disable postfixsystemctl disable avahi-daemonsystemctl disable avahi-daemon.socketsystemctl disable libvirtdss -ntlp exit

系统优化

echo "nameserver 180.76.76.76">>/etc/resolv.conf
echo "nameserver 223.5.5.5">>/etc/resolv.conf
ifdown eth0 && ifup eth0
systemctl  restart network
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all
yum makecache
setenforce  0
sed -i  's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
systemctl  stop firewalld
systemctl  disable  firewalld
systemctl  stop  NetworkManager
systemctl  disable  NetworkManager
sed -i 's/#UseDNS yes/UseDNS no/g'  /etc/ssh/sshd_config
sed -i 's/GSSAPIAuthentication yes/GSSAPIAuthentication no/g'  /etc/ssh/sshd_config
systemctl    restart   sshd
echo '*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null' >>/var/spool/cron/root
# 
echo 4194304 | sudo tee -a /proc/sys/kernel/pid_max

# 更改 文件控制系统中允许的最大 PID 号
echo '*               -       nofile          65535 ' >>/etc/security/limits.conf
#用于为所有用户(*)设置最大打开文件描述符数量为 65535
cat >>/etc/sysctl.conf<<EOF
net.ipv4.tcp_fin_timeout = 2
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_keepalive_time = 600
net.ipv4.ip_local_port_range = 4000    65000
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.route.gc_timeout = 100
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_max_orphans = 16384
net.ipv4.ip_forward = 1
net.core.somaxconn = 16384
net.core.netdev_max_backlog = 16384
net.core.rmem_max = 26214400
net.core.wmem_max = 26214400
kernel.pid_max = 4194304
EOF
sysctl  -p

cat>>/etc/profile.d/color.sh<<'EOF'
alias ll='ls -l --color=auto --time-style=long-iso'
PS1="\[\e[37;40m\][\[\e[32;1m\]\u\[\e[37;40m\]@\h \[\e[36;40m\]\w\[\e[0m\]]\[\e[32;1m\]\\$ \[\e[0m\]"
export HISTTIMEFORMAT='%F-%T '
EOF
source  /etc/profile
yum -y install tree nmap sysstat lrzsz  telnet bash-completion bash-completion-extras vim  lsof  net-tools rsync ntpdate nfs-utils  unzip wget

linux 系统的时间 ntpdate 错误 一般 小型云厂商会出现这个问题,大型的云厂商 会定制 本土镜像

#  查看 本地时区的设置
[root@hbgfh4m9ffQ ~]# cat /etc/localtime 
TZif2UTCTZif2UTC
UTC0
[root@hbgfh4m9ffQ ~]# ls -l  /etc/localtime 
lrwxrwxrwx. 1 root root 25 Dec  5  2018 /etc/localtime -> ../usr/share/zoneinfo/UTC

[root@hbgfh4m9ffQ ~]# unlink /etc/localtime

# 设置成 utc8   北京时区 
[root@hbgfh4m9ffQ ~]# ln -s /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime

# 更新时间
[root@hbgfh4m9ffQ ~]# /usr/sbin/ntpdate ntp1.aliyun.com
 9 Jan 09:16:06 ntpdate[11614]: adjust time server 120.25.115.20 offset -0.023775 sec



登录痕迹

last 删除登录信息

ansible sa -m shell -a "echo ' ' > /var/log/wtmp"

ansible sa -m shell -a "echo ' ' > /var/log/btmp"

ansible sa -m shell -a "find /var/log -type f -name "btmp-*" |xargs rm -f"

ansible sa -m shell -a "find /var/log -type f -name "wtmp-*" |xargs rm -f"

系统安全日志/var/log/secure文件

ansible sa -m shell -a "echo ' ' > /var/log/secure"

ansible sa -m shell -a "find /var/log -type f -name "secure-*" |xargs rm -f"

命令痕迹

历史记录

ansible sa -m shell -a "echo ' ' >/root/.bash_history"

删除历史记录

history -c 清空历史命令

[root@test ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.15.100
PREFIX=24
GATEWAY=192.168.15.2
DNS1=223.5.5.5
DNS2=223.6.6.6
[root@test ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=eth1
DEVICE=eth1
ONBOOT=yes
IPADDR=172.16.1.100
PREFIX=24
[root@test ~]# cat hostname_ip.sh 
#!/usr/bin/sh
source /etc/init.d/functions
if [ $# -ne 2 ];then
  echo "/bin/sh $0 New hostname  New IP address"
  exit 1
fi
hostnamectl  set-hostname   $1
if [ $? -eq 0 ];then
action "hostname update Successfull." /bin/true
else
action "hostname update Failed." /bin/false
fi
sed -ri  "/^IPA/s#(.*\.).*#\1$2#g"  /etc/sysconfig/network-scripts/ifcfg-eth[01]
# sed -in /^IPADD/s/.*/IPADDR=\"$2\"/g  /etc/sysconfig/network-scripts/ifcfg-eth[01] #带引号处理的
# sed -ri "/^UUID/d" /etc/sysconfig/network-scripts/ifcfg-eth[01] # 删除uuid
if [ $? -eq 0 ];then
action "IP update Successfull." /bin/true
systemctl  restart  network
else
action "IP update Failed!" /bin/false
fi

1. CD源 更改Yum源和添加epel源

mkdir -pv /cd
mount /dev/cdrom /cd/
mv /etc/yum.repos.d/*.repo /tmp/
cat >>/etc/yum.repos.d/dvd.repo<<EOF
[dvd]
name=install dvd
baseurl=file:///cd
enabled=1
gpgcheck=0
EOF
yum makecache
yum list

默认国外的yum源(软件仓库)比较慢,所以换成国内的。

#1、备份
[root@qls ~]# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

#2、下载新的CentOS-Base.repo 到/etc/yum.repos.d/
[root@qls ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

#3.添加epel源
[root@qls ~]# curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

2. 关闭SELinux

	SELinux(Security-Enhanced Linux)是美国国家安全局(NSA)对于强制访问控制的实现,这个功能让系统管理员又爱又恨,这里我们还是把它给关闭了吧,至于安全问题,后面通过其他手段来解决,这也是大多数生产环境的做法,如果非要开启也是可以的。

#临时关闭
[root@qls ~]# setenforce  0

#永久关闭
[root@qls ~]# sed -i  's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config

#检查结果
[root@qls ~]# grep "disabled" /etc/selinux/config

3. 关闭防火墙(Firewalld)

	关闭防火墙的目的是为了让初学者学习更方便,将来在学了Firewalld技术后可再统一开启。 在企业环境中,一般只有配置外网IP的linux服务器才需要开启防火墙,但即使是有外网IP,对于高并发高流量的业务服务器仍是不能开的,因为会有较大性能损失,导致网站访问很慢,这种情况下只能在前端加更好的硬件防火墙了。

#临时关闭
[root@qls ~]# systemctl  stop firewalld

#永久关闭
[root@qls ~]# systemctl  disable  firewalld

4. 关闭NetworkManager

在CentOS系统上,目前有NetworkManager和network两种网络管理工具。如果两种都配置会引起冲突,而且NetworkManager在网络断开的时候,会清理路由,如果一些自定义的路由,没有加入到NetworkManager的配置文件中,路由就被清理掉,网络连接后需要自定义添加上去。

network:对网卡的配置

NetworkManager:这个服务由几个部分组成;一个是管理系统网络连接;一个是允许用户管理网络连接的客户端程序,使用它可以更好的管理网络

#临时关闭
[root@qls ~]# systemctl  stop  NetworkManager

#永久关闭
[root@qls ~]# systemctl  disable  NetworkManager

5. 同步系统时间

#给定时任务加上注释
[root@qls ~]# echo '#Timing synchronization time' >>/var/spool/cron/root

#定时任务
[root@qls ~]# echo '*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null' >>/var/spool/cron/root

#检查结果
[root@qls ~]# crontab -l

6. 加大文件描述

#配置文件介绍
<domain> <type>  <item>  <value>

<domain>表示要限制的用户

<type>设定类型

<item>表示可选的资源

<value>表示要限制的值

#加大文件描述符
[root@qls ~]# echo '*               -       nofile          65535 ' >>/etc/security/limits.conf 

#检查结果
[root@qls ~]# tail -1 /etc/security/limits.conf

7. 别名及环境变量优化

#设置
[root@qls ~]# cat>>/etc/profile.d/color.sh<<'EOF'
alias ll='ls -l --color=auto --time-style=long-iso'
PS1="\[\e[37;40m\][\[\e[32;1m\]\u\[\e[37;40m\]@\h \[\e[36;40m\]\w\[\e[0m\]]\[\e[32;1m\]\\$ \[\e[0m\]"
export HISTTIMEFORMAT='%F-%T '
EOF

#生效
[root@qls ~]# source  /etc/profile

8. 内核优化

#设置
[root@qls ~]# cat >>/etc/sysctl.conf<<EOF
net.ipv4.tcp_fin_timeout = 2
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_keepalive_time = 600
net.ipv4.ip_local_port_range = 4000    65000
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.route.gc_timeout = 100
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1
net.core.somaxconn = 16384
net.core.netdev_max_backlog = 16384
net.ipv4.tcp_max_orphans = 16384
net.ipv4.ip_forward = 1
EOF

#生效
[root@qls ~]# sysctl  -p

9. 配置SSH远程管理服务

#禁止DNS进行反向解析
[root@qls ~]# sed -i 's/#UseDNS yes/UseDNS no/g'  /etc/ssh/sshd_config

#检查结果
[root@qls ~]# grep 'UseDNS no'  /etc/ssh/sshd_config 

#禁止GSS认证,减少连接时产生的延迟
[root@qls ~]# sed -i 's/GSSAPIAuthentication yes/GSSAPIAuthentication no/g'  /etc/ssh/sshd_config

#检查结果
[root@qls ~]# grep 'GSSAPIAuthentication no'  /etc/ssh/sshd_config

#生效
[root@qls ~]# systemctl    restart   sshd

10. 修改主机名和IP脚本

#脚本如下

[root@qls ~]# cat>/root/hostname_ip.sh<<'EOF'
#!/usr/bin/sh
source /etc/init.d/functions
if [ $# -ne 2 ];then
  echo "/bin/sh $0 New hostname  New IP address"
  exit 1
fi
hostnamectl  set-hostname   $1
if [ $? -eq 0 ];then
	action "hostname update Successfull." /bin/true
else
	action "hostname update Failed." /bin/false
fi
sed -ri  "/^IPA/s#(.*\.).*#\1$2#g"  /etc/sysconfig/network-scripts/ifcfg-eth[01]
# sed -in /^IPADD/s/.*/IPADDR=\"$2\"/g  /etc/sysconfig/network-scripts/ifcfg-eth[01] #带引号处理的
# sed -ri "/^UUID/d" /etc/sysconfig/network-scripts/ifcfg-eth[01] # 删除uuid
if [ $? -eq 0 ];then
	action "IP update Successfull." /bin/true
	systemctl  restart  network
else
	action "IP update Failed!" /bin/false
fi
EOF

11. 安装常用软件

[root@qls ~]# yum -y install tree nmap sysstat lrzsz  telnet bash-completion bash-completion-extras vim  lsof  net-tools rsync ntpdate nfs-utils  unzip wget

12. Linux基础优化及安全小结

1)禁止root用户远程连接,不用root登录管理系统,而以普通用户登录通过sudo授权管理。

2)更改默认的远程连接SSH服务端口,甚至要更改SSH服务只监听内网IP。

3)定时自动更新服务器的时间,使其和互联网时间同步。

4)配置yum更新源,从国内更新源下载安装软件包。

5)关闭SELinux及Firewalld(在工作场景中,如果有外部IP一般要打开Firewalld,高并发高流量的服务器可能无法开启)。

6)调整文件描述符的数量,进程及文件的打开都会消耗文件描述符数量。

7)定时自动清理邮件临时目录垃圾文件,防止磁盘的inodes数被小文件占满。

8)Linux内核参数优化。

9)更改系统字符集为“zh_CN.UTF-8”,使其支持中文,防止出现乱码问题。

10)锁定系统主要文件,处理后把chattr、lsattr改名,转移走,这样就安全多了。

11)清空/etc/issue、/etc/issue.net,去除系统及内核版本登录前的屏幕显示。

12)清除多余的系统虚拟用户账号。

13)为grub引导菜单加密码。

14)禁止主机被ping。echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

15)打补丁并升级有已知漏洞的软件。

posted @ 2021-11-30 13:06  mmszxc  阅读(262)  评论(0)    收藏  举报