一、系统优化



1.安装基础安装包、服务。


 


yum install  ntpdate yum-utils cmake ncurses-devel libaio-devel make gcc gcc-c++ lrzsz dos2unix tree bash-completion vim net-tools wget curl lsof  -y && ntpdate -u cn.pool.ntp.org


 


yum -y install gcc gcc-c++ make autoconf libtool-ltdl-devel gd-devel freetype-devel libxml2-devel libjpeg-devel libpng-devel openssh-clients openssl-devel curl-devel bison patch libmcrypt-devel libmhash-devel ncurses-devel binutils compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel glibc glibc-common glibc-devel libgcj libtiff pam-devel libicu libicu-devel gettext-devel libaio-devel libaio libgcc libstdc++ libstdc++-devel unixODBC unixODBC-devel numactl-devel glibc-headers sudo bzip2 mlocate flex lrzsz sysstat lsof setuptool system-config-network-tui system-config-firewall-tui ntsysv ntp pv lz4 dos2unix unix2dos rsync dstat iotop innotop mytop telnet iftop expect cmake nc gnuplot screen xorg-x11-utils xorg-x11-xinit rdate bc expat-devel compat-expat1 tcpdump sysstat man nmap curl lrzsz elinks finger bind-utils traceroute mtr ntpdate zip unzip vim wget net-tools


 


 


 


2.定时自动更新服务器时间,使其和互联网同步


 


ntpdate time.nist.gov<--时间同步


ntpdate ntp1.aliyun.com<--国内阿里云时间同步服务器


利用定时任务crond把上述命令每5分钟自动执行一次,命令如下:


echo '#time sync by root at 2010-2-1' >>/var/spool/cron/root


echo '*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1' >>/var/spool/cron/root


crontab –l


[root@rootedu ~]# crontab -l


#time sync by root at 2010-2-110 */5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1


 


 


 


3.配置yum更新源,从国内更新源下载安装软件包、或者从阿里云等开源镜像站同步yum仓库到本地,减少带宽占用。


 


CentOS 6


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


CentOS 7


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


CentOS 8


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


 


 


 


4.关闭SELinux及firewalld


 


systemctl stop firewalld


systemctl disabled firewalld


sed -i "s/SELINUX=*$/SELINUX=disabled/g" /etc/selinux/config


 


 


 


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


 


crontab -e


0 0 1 * * rm -rf /var/spool/mail/*


#每个月 1日0:点0分清理mail邮件垃圾


 


 


 

6.精简并保留必要的开机启动服务


 


远程连接linux服务器时需要用到这个服务程序,所以必须开启


sshd


远程连接linux服务器时需要用到这个服务程序,所以必须开启


rsyslog


日志相关软件


network


网络服务


crond


会周期的执行系统和用户配置的任务计划


 


 


 

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


 


#  localectl status      #查看当前字符集


   System Locale: LANG=en_US.UTF-8


       VC Keymap: us


      X11 Layout: us


# localectl set-locale LANG=zh_CN.UTF-8     #修改字符集为zh_CN.UTF-8,命令行和配置文件都生效


# cat /etc/locale.conf       #查看配置文件


LANG=zh_CN.UTF-8


 


 


 


 


 


8.修改网卡为eth0


方法一、


NAME=eth0 #网卡名称改为eth0 


DEVICE=eth0 #设备名称改为eth0


方法二、


在装系统时候添加两个参数


net.ifnames=0


biosdevname=0


 


 


9.给/etc/rc.local添加执行权限


 


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


 


 


 


10.开启快速回收(TCP断开连接时会有一个等待时间为2msl(60秒)对应的状态为TIME_WAIT,如果业务并发较大的话会有很多的TIME_WAIT状态(详细等待后续更新),如何来解决那?)


 


# cat /proc/sys/net/ipv4/tcp_timestamps     #时间戳,默认是开启的


# cat /proc/sys/net/ipv4/tcp_tw_reuse      # 连接复用,tcp_timestamps是开启的状态下是可以开启的,1为开启,默认是关闭的状态。


# cat /proc/sys/net/ipv4/tcp_tw_recycle      #socket快速回收,net网络状态下不可以开启,负载均衡上不可以打开,读者根据自身情况开启或关闭,默认为关闭状态。


 


 


 

11.Linux系统内存交换区


 


在Linux系统安装时都会有一个特殊的磁盘分区,称之为系统交换分区。


    (1) 如果我们使用free -m在系统中查看可以看到类似下面的内容,其中swap就是交换分区。


        当操作系统因为没有足够的内存时就会将一些虚拟内存写到磁盘的交换区中,这样就会发生内存交换。


    (2) 在MySQL服务器上是否要使用交换分区有一些争议:


        在MySQL服务所在的Linux系统上完全禁用交换分区。


        带来的风险:


            a. 降低操作系统的性能。


            b. 容易造成内存溢出,奔溃,或都被操作系统kill掉。


        结论:


            在MySQL服务器上保留交换分区还是很必要的,但是要控制何时使用交换分区。


             vm.swappiness = 0 就是告诉Linux内核除非虚拟内存完全满了,否则不要使用交换区。


 


 


 


12.设置history密码时间(以下作用是显示命令的执行时间和用户)


 


 


sed -i s#HISTSIZE=1000#HISTSIZE=10000#g /etc/profile


echo 'export HISTTIMEFORMAT="%F %T `whoami` "' >> /etc/profile


 


 


 


二、安全优化



1.不用root登录管理系统,而以普通用户登录通过sudo授权管理


 


2.更改默认的远程连接SSH服务端口,禁止root用户远程连接,甚至要更改SSH服务只监听内网IP


sed -i "s/#Port 22/Port xxx/g" /etc/ssh/sshd_config                     #修改端口


vim /etc/ssh/sshd_config,把#PermitRootLogin yes改为PermitRootLogin no    #禁止root登录


 


 

3.锁定关键文件,如: passwd、/etc/shadow/、/etc/group/、/etc/gshadow、/etc/inittab,处理以上内容后把chattr、lsattr、改名为root,转移走,这样就安全多了。


 


chattr +i "passwd、/etc/shadow/、/etc/group/、等"


mv /usr/bin/chattr /usr/bin/xxx


 


 

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


 


echo "本人声明,如果您以非法方式登录本服务器,您将承担法律责任!!!" >  /etc/issue


 


 


5.禁止主机被ping


 


禁止主机被ping:echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all


 


 


6.设置会话超时(600代表十分钟)


 


vim /etc/profile


export TMOUT=6000


 


 


7.新密码不能与最近10个使用密码相同


 


vim /etc/pam.d/system-auth


password    sufficient *$   remeber=11


 


 


8.密码复杂度


 


    1.备份配置文件:


# cp -a /etc/pam.d/system-auth /etc/pam.d/system-auth.default


    2.编辑配置文件


# vi /etc/pam.d/system-auth


    将"password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=" 注释并在其下面新增1行


 


password requisite pam_cracklib.so try_first_pass minlen=8 difok=5 dcredit=-1 lcredit=-1 ocredit=-1 retry=1 type=


 


 


说明:


备注:


try_first_pass而当pam_unix验证模块与password验证类型一起使用时,该选项主要用来防止用户新设定的密码与以前的旧密码相同。


minlen=8:最小长度8位


difok=5:新、旧密码最少5个字符不同


dcredit=-1:最少1个数字


lcredit=-1:最少1个小写字符,(ucredit=-1:最少1个大写字符)


ocredit=-1:最少1个特殊字符


retry=1:1次错误后返回错误信息


type=xxx:此选项用来修改缺省的密码提示文本


 


三、内核优化



cat>>/etc/sysctl.conf<<EOF


net.ipv4.tcp_fin_timeout = 2


net.ipv4.tcp_tw_reuse = 1


net.ipv4.tcp_tw_recycle = 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.nf_conntrack_max = 25000000


net.netfilter.nf_conntrack_max = 25000000


net.netfilter.nf_conntrack_tcp_timeout_established = 180


net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120


net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60


net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120


EOF