zoukankan      html  css  js  c++  java
  • centos7之系统优化方案

    优化条目:

    • 修改ip地址、网关、主机名、DNS等
    • 关闭selinux,清空iptables
    • 添加普通用户并进行sudo授权管理
    • 更新yum源及必要软件安装
    • 定时自动更新服务器时间
    • 精简开机自启动服务
    • 定时自动清理/var/spool/clientmqueue/目录垃圾文件,放置inode节点被占满
    • 变更默认的ssh服务端口,禁止root用户远程连接
    • 锁定关键文件系统
    • 调整文件描述符大小
    • 调整字符集,使其支持中文
    • 去除系统及内核版本登录前的屏幕显示
    • 禁止ping
    • 历史记录
    • 内核参数优化 
       
    • 升级具有典型漏洞的软件版本 

    1、修改ip地址、网关、主机名、DNS等

    复制代码
    [root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
    DEVICE=eth0         #网卡名字
    BOOTPROTO=static    #静态IP地址获取状态 如:DHCP表示自动获取IP地址
    IPADDR=192.168.1.113            #IP地址
    NETMASK=255.255.255.0           #子网掩码
    ONBOOT=yes#引导时是否激活
    GATEWAY=192.168.1.1
    [root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
    DEVICE=eth0
    BOOTPROTO=static
    IPADDR=192.168.1.113
    NETMASK=255.255.255.0
    ONBOOT=yes
    GATEWAY=192.168.1.1
    [root@localhost ~]# vi /etc/sysconfig/network
    HOSTNAME=c64     #修改主机名,重启生效
    GATEWAY=192.168.1.1    #修改默认网关,如果上面eth0里面不配置网关的话,默认就使用这里的网关了。
    [root@localhost ~]# cat /etc/sysconfig/network
    HOSTNAME=c64
    GATEWAY=192.168.1.1
    我们也可以用  hostnamec64  来临时修改主机名,重新登录生效
    修改DNS
    [root@localhost ~]# vi /etc/resolv.conf   #修改DNS信息
    nameserver 114.114.114.114
    nameserver 8.8.8.8
    [root@localhost ~]# cat /etc/resolv.conf  #查看修改后的DNS信息
    nameserver 114.114.114.114
    nameserver 8.8.8.8
    [root@localhost ~]# service network restart   #重启网卡,生效
    重启网卡,也可以用下面的命令
    [root@localhost ~]# /etc/init.d/network restart
    复制代码

    2、关闭selinux,清空iptables

    关闭selinux防火墙
    默认云服务器都是关着的
    cat /etc/selinux/config 
    setenforce 0 设置不启动
    getenforce   查看

    清空iptables

    复制代码
    # iptables –F     #清理防火墙规则
    # iptables –L     #查看防火墙规则
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination
    Chain FORWARD (policy ACCEPT)
    target     prot opt source               destination
    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination
    #/etc/init.d/iptables save   #保存防火墙配置信息
    复制代码

    针对centos7防火墙配置

    复制代码
    修改防火墙
    CentOS切换为iptables防火墙
    firewall-cmd --state 查看防火墙状态
    
    切换到iptables首先应该关掉默认的firewalld,然后安装iptables服务。
    1、关闭firewall:
    systemctl stop firewalld.service 
    systemctl disable firewalld.service #禁止firewall开机启动
    
    2、安装iptables防火墙
    yum install iptables-services #安装
    service iptables save
    
    3、编辑iptables防火墙配置
    vi /etc/sysconfig/iptables #编辑防火墙配置文件
    下边是一个完整的配置文件:
    在你运行完save中间插入下面的规则
    -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    -A INPUT -p icmp -j ACCEPT
    -A INPUT -i lo -j ACCEPT
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
    -A INPUT -j REJECT --reject-with icmp-host-prohibited
    -A FORWARD -j REJECT --reject-with icmp-host-prohibited
    :wq! #保存退出
    
    systemctl start iptables.service  #开启
    systemctl enable iptables.service #设置防火墙开机启动
    复制代码

    附赠防火墙脚本,前提你已经切换至iptables

     fwiptables.sh

    3、添加普通用户并运行sudo授权管理

    可参考https://www.cnblogs.com/jokerbj/p/9117384.html

    4、更新yum源及必要软件安装 

    复制代码
    yum源文件
    yum update   更新源文件
    yum clean all  清除缓存
    yum makecache 建立yum缓存 CentOS-Base.repo 网络源文件 推荐使用阿里云 如果发生问题很可能是域名解析问题 vim /etc/resolv.conf nameserver 8.8.8.8
    阿里
    nameserver 100.100.2.138
    nameserver 100.100.2.136
    options timeout:2 attempts:3 rotate single-request-reopen
    复制代码

    接下来就要安装几个必要的软件了

    yum install lrzsz ntpdate sysstat net-tools -y
    lrzsz 是上传下载的软件
    sysstat 是用来检测系统性能及效率的工具
    net-tools 没有ifconfig命令时候需要安装工具

    5、定时自动更新服务器时间

    复制代码
    默认云服务器有同步的时间服务器
    修改时间 date
    硬件时间 hwclock --show
    同步公有时间服务器,可搭配任务计划,阿里云的时间服务器ntp.aliyun.com
    yum -y install ntp
    ntpdate asia.pool.ntp.org
    time.nist.gov
    time.nuri.net
    ntpdate asia.pool.ntp.org 或者 ntp.aliyun.com
    注意;如果出现ntpdate[24325]: the NTP socket is in use, exiting,需要systemctl stop ntpd.service停止,然后同步,之后再启动,阿里云服务器默认同步阿里云时间服务器
    复制代码

    时间设置

    复制代码
    输出当前时间
    date +"%Y-%m-%d %H:%M:%S" # 2018-06-08 14:05:08
    输出指定时间
    复制代码
    -d<字符串>:显示字符串所指的日期与时间。字符串前后必须加上双引号;
    date -d "1 day ago" +"%Y-%m-%d"   2018-06-07  ago是昨天
    date -d "1 day" +"%Y-%m-%d"       2018-06-09  不加参数是明天
    以下使用数字表示前后多少天的加减
    date +%Y%m%d #显示前天年月日 
    date -d "+1 day" +%F   #显示前一天的日期  %F就是%Y-%m-%d
    date -d "-1 day" +%F   #显示后一天的日期   
    date -d "-1 month" +F  #显示上一月的日期 
    date -d "+1 month" +F  #显示下一月的日期 
    date -d "-1 year" +F   #显示前一年的日期 
    date -d "+1 year" +F   #显示下一年的日期
    复制代码
    设置时间
    复制代码
    -s<字符串>:根据字符串来设置日期与时间。字符串前后必须加上双引号; 
    date -s 01:01:01 #设置具体时间,不会对日期做更改 
    date -s "01:01:01 2012-05-23" #这样可以设置全部时间 
    date -s "01:01:01 20120523"   #这样可以设置全部时间 
    date -s "2012-05-23 01:01:01" #这样可以设置全部时间 
    date -s "20120523 01:01:01"   #这样可以设置全部时间
    复制代码
    复制代码

    附赠当前任务的执行时间脚本

    复制代码
    #!/bin/bash 
    start=$(date +%s)   # 1528437613
    nmap man.linuxde.net &> /dev/null 
    end=$(date +%s) 
    difference=$(( end - start )) 
    echo $difference seconds.
    复制代码

    时区设置

    复制代码
    修改时区                                                                                
    1)使用tzselect设置时区
    2)复制相应的时区文件,替换系统默认时区
      cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    3)将当前时间写入BIOS永久生效(避免重启后失效)
      hwclock
    4)centos /etc/sysconfig/clock
      ubuntu /etc/timezone
    复制代码

    任务计划使用

    复制代码
    cat /var/spool/cron/root 可直接修改配置文件,注意重启/reload
    crontab -e crontab -l -u root #查看root用户 基本格式 : *  *  *  *  *  command 分 时 日 月 周 命令 第1列表示分钟1~59 每分钟用*或者 */1表示 第2列表示小时1~23(0表示0点) 第3列表示日期1~31 第4列表示月份1~12 第5列标识号星期0~6(0表示星期天) 第6列要运行的命令 每月1、10、22日的4 : 45重启apache 45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart 每天18 : 00至23 : 00之间每隔30分钟重启apache 0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart 每月的4号与每周一到周三的11点重启apache 0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart 晚上11点到早上7点之间,每隔一小时重启apache * 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart
    复制代码

    6、精简开机自启动服务

    复制代码
    修改启动服务
    systemctl 是管制服务的主要工具,它整合了chkconfig 与 service功能于一体。
    systemctl is-enabled iptables.service   #查询防火墙是否开机启动
    systemctl restart sshd #有可能不需要加service
    systemctl is-enabled servicename.service #查询服务是否开机启动
    systemctl enable *.service #开机运行服务
    systemctl disable *.service #取消开机运行
    systemctl start *.service #启动服务
    systemctl stop *.service #停止服务
    systemctl restart *.service #重启服务
    systemctl reload *.service #重新加载服务配置文件
    systemctl status *.service #查询服务运行状态
    systemctl --failed #显示启动失败的服务
    复制代码
      

    7、定时自动清理 cat /var/spool/postfix/maildrop/目录垃圾文件,放置inode节点被占满

     centos7默认安装了postfix邮件服务,因此邮件位置 /var/spool/postfix/maildrop/会存在垃圾文件,如果长时间不清理,会导致inode数量不够用,从而无法存放文件

    mkdir /server/scripts -p
    vi /server/scripts/spool_clean.sh
    #!/bin/sh
    find/var/spool/clientmqueue/-typef -mtime +30|xargsrm-f

    然后将其加入到crontab定时任务中

    echo '*/30 * * * * /bin/sh /server/scripts/spool_clean.sh >/dev/null 2>&1' >> /var/spool/cron/root

    8、变更默认的ssh服务端口,禁止root用户远程连接

    可参考https://www.cnblogs.com/jokerbj/p/9117384.html

    我们默认不会禁止root登录,端口酌情处理

    9、锁定关键文件系统

    复制代码
    加锁,不可修改加锁文件
    [root@jokerpro ~]# chattr +i /etc/passwd
    [root@jokerpro ~]# lsattr /etc/passwd
    ----i--------e-- /etc/passwd
    去锁,可以修改文件
    [root@jokerpro ~]# chattr -i /etc/passwd 
    [root@jokerpro ~]# lsattr /etc/passwd   
    -------------e-- /etc/passwd
    复制代码

    使用chattr命令后,为了安全我们需要将其改名

    mv /usr/bin/chattr /usr/bin/任意名称

    10、调整文件描述符大小

      文件描述符是由无符号整数表示的句柄,进程使用它来标识打开的文件。文件描述符与包括相关信息(文件的打开模式,文件的位置类型,文件的出始类型等)的文件对象相关联,这些信息被称作文件的上下文。文件描述符的有效范围是0到OPEN_MAX。
      对于内核而言,所有打开的文件都是通过文件描述符引用的,当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符。当读或写一个文件时,使用open或create返回的文件描述符标识该文件,并将其作为参数传递给read或write。

    可通过ulimit -a查看当前设置

    复制代码
    # ulimit -a
    core file size          (blocks, -c) 0
    data seg size           (kbytes, -d) unlimited
    scheduling priority             (-e) 0
    file size               (blocks, -f) unlimited
    pending signals                 (-i) 3895
    max locked memory       (kbytes, -l) 64
    max memory size         (kbytes, -m) unlimited
    open files                      (-n) 65535     # 文件描述符
    pipe size            (512 bytes, -p) 8
    POSIX message queues     (bytes, -q) 819200
    real-time priority              (-r) 0
    stack size              (kbytes, -s) 8192       # 堆栈文件
    cpu time               (seconds, -t) unlimited
    max user processes              (-u) 3895
    virtual memory          (kbytes, -v) unlimited
    file locks                      (-x) unlimited
    复制代码

    文件描述符

    复制代码
    查看linux服务器文件描述符设置的情况
    ulimit -n 1024 默认打开的文件描述符就是1024 对于高并发业务来讲,默认值肯定不够 cat /etc/security/limits.conf 65535是最大支持的文件描述符 root soft nofile 65535 root hard nofile 65535 可以使用下面一行来替代上面 * - nofile 65535 重启即可
    复制代码

    配置完成后,重新登录即可查看。

    提示:也可以把ulimit -SHn 65535命令临时生效,或者加入到/etc/rc.local,然后每次重启生效

    复制代码
    # cat >>/etc/rc.local<<EOF
    # open files
    ulimit -HSn 65535
    # stack size
    ulimit -s 65535
    EOF
    复制代码

    11、调整字符集,使其支持中文

    复制代码
    修改字符编码,默认是LANG=en_US.UTF-8
    修改该文件之前,可以先查看已经安装的语言包:
    locale -a  可通过grep过滤查看是否有中文语言包
    如果没有语言包
    yum install kde-l10n-Chinese  
    yum reinstall glibc-common  
    安装完成后通过vi命令编辑配置文件
    vim /etc/locale.conf
    LANG="zh_CN.UTF-8"
    source /etc/locale.conf 
    复制代码

    12、去除系统及内核版本登录前的屏幕显示

    # cat /etc/redhat-release 
    CentOS Linux release 7.4.1708 (Core) 
    # cat /etc/issue
    S
    Kernel 
     on an m

    13、禁止linux系统被ping

    复制代码
    # 开启禁止ping
    echo "net.ipv4.icmp_echo_ignore_all=1" 1>> /etc/sysctl.conf sysctl -p
    # 关闭禁止ping
    首先要删除 /etc/sysctl.conf 里面net.ipv4.icmp_echo_ignore_all = 1
    之后执行如下命令
    echo 0 1> /proc/sys/net/ipv4/icmp_echo_ignore_all
    # 后续就可以通过更改 cat  /proc/sys/net/ipv4/icmp_echo_ignore_all文件
    0 关闭 1 开启
    复制代码

    14、历史记录

    复制代码
    # 以下都是临时生效,默认1000不需要更改
    # 设置的是闲置账号的超时时间
    export TMOUT=10 10秒后提示超时时间
    # 设置终端history显示条数
    export HISTSIZE=5 只显示最近5条信息
    # 上面的终端显示对应的是 cat ~/.bash_history 
    export HISTFILESIZE=5 该文件只保存5条信息
    # 清空历史记录
    history -c
    # 指定条数删除
    history -d 历史记录条属
    复制代码

    15、内核参数优化

    说明:本优化适合apache,nginx,squid多种等web应用,特殊的业务也可能需要略作调整。

    复制代码
    [root@jokerpro ~]# vi /etc/sysctl.conf
    # 表示套接字由本端要求关闭,这个参数决定了它保持在FIN-wAIT-2状态的时间,默认值是60秒,建议调整为2,该参数对应系统路径为:/proc/sys/net/ipv4/tcp_fin_timeout 60
    net.ipv4.tcp_fin_timeout = 2
    
    # 表示开启重用,允许TIME-wAIT sockets重新用于新的TCP链接,默认值为0,表示关闭,该参数对应系统路径为:/proc/sys/net/ipv4/tcp_tw_reuse 0
    net.ipv4.tcp_tw_reuse = 1
    # 表示开启TCP链接中TIME_WAIT sockets的快速回收,该参数对应系统路径为:/proc/sys/net/ipv4/tcp_tw_recycle,默认为0 表示关闭,不建议开启,因为nat网络问题
    net.ipv4.tcp_tw_recycle = 0
    # reuse和recycle这俩个参数是为防止生产环境下web,squid等业务服务器time_wait网络状态数量过多设置的
    注意:
     reuse/recycle
    
    
    # 表示开启SYN Cookies功能,当出现SYN等待队列溢出时,启用Cookies来处理,可防范少量SYN攻击,该参数对应系统路径为:/proc/sys/net/ipv4/tcp_syscookies,默认为1,表示开启
    net.ipv4.tcp_syncookies = 1
    
    # 表示当keepalive启用时,TCP发送keepalive消息的频度,默认是2小时,建议更改为10分钟,该参数对应系统路径为:/proc/sys/net/ipv4/tcp_keepalive_time,默认为7200秒
    net.ipv4.tcp_keepalive_time =600
    
    # 该选项用来设定允许系统打开的端口范围,即用于向外链接的端口范围,该参数对应系统路径为:/proc/sys/net/ipv4/ip_local_port_range 默认,32768 60999
    net.ipv4.ip_local_port_range = 32768   60999
    
    # 表示SYN队列的长度,默认为1024,建议加大队列的长度,为8182或更多,这样可以容纳更多等待链接的网络连接数,该参数为服务器端用于记录那些尚未收到客户端确认信息的链接请求的最大值,
    该参数对应系统路径为:/proc/sys/net/ipv4/tcp_max_syn_backlog
    net.ipv4.tcp_max_syn_backlog = 1024
    # 该选项默认值是128,这个参数用于调节系统同时发起的TCP连接数,在高并发的请求中,默认的值可能会导致链接超时或重传,因此,需要结合并发请求数来调节此值,
    该参数对应系统路径为:/proc/sys/net/ipv4/somaxconn 128 # 默认没有这个配置,需要自己生成
    net.core.somaxconn = 1024
    注意:
     tcp_max_syn_backlog/somaxconn
     
    # 表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数值,TIME_WAIT套接字将立刻被清除并打印警告信息,默认为5000,对于Aapache,Nginx等服务器来说可以将其调低一点,
    如改为5000-30000,不用业务的服务器也可以给大一点,比如LVS,Squid,该参数对应系统路径为:/proc/sys/net/ipv4/tcp_max_tw_buckets
    net.ipv4.tcp_max_tw_buckets = 5000
    
    # 表示内核放弃建立链接之前发送SYN包的数量,该参数对应系统路径为:/proc/sys/net/ipv4/tcp_syn_retries,默认是6
    net.ipv4.tcp_syn_retries = 1
    # 参数的值决定了内核放弃链接之前发送SYN+ACK包的数量,该参数对应系统路径为:/proc/sys/net/ipv4/tcp_synack_retries,默认是2
    net.ipv4.tcp_synack_retries = 1
    
    
    # 表示当每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许发送到队列的数据包最大数,该参数对应系统路径为:/proc/sys/net/ipv4/netdev_max_backlog,默认值为1000
    net.core.netdev_max_backlog = 1000  # 默认没有这个配置,需要自己生成
    
    # 用于设定系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上,如果超过这个数值,孤立链接将立即被复位并打印出警号信息,这个限制只是为了防止简单的DoS攻击,不能过分依靠这个限制甚至
    人为减小这个值,更多的情况是增加这个值,默认是4096,建议该值修改为2000,该参数对应系统路径为:/proc/sys/net/ipv4/tcp_max_orphans
    net.ipv4.tcp_max_orphans = 2000
    
    # 以下参数是对iptables防火墙的优化,防火墙不开会有提示,可以忽略不理。
    net.ipv4.ip_conntrack_max = 25000000
    net.ipv4.netfilter.ip_conntrack_max = 25000000
    net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 180
    net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 120
    net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 60
    net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 120
    注意:
     TIME_WAIT
    # 使配置文件生效
    [root@jokerpro ~]# sysctl –p 
    复制代码

    提示:

    由于CentOS7.X系统中的模块名不是ip_conntrack,而是nf_conntrack,所以在/etc/sysctl.conf优化时,需要把net.ipv4.netfilter.ip_conntrack_max 这种老的参数,改成net.netfilter.nf_conntrack_max这样才可以。

    即对防火墙的优化,在5.8上是

    复制代码
    net.ipv4.ip_conntrack_max = 25000000
    net.ipv4.netfilter.ip_conntrack_max = 25000000
    net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 180
    net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 120
    net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 60
    net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 120
    复制代码

    对于 ip_conntrack_max 计算方法

     CONNTRACK_MAX

    在7.4上是

    复制代码
    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
    复制代码

    另外,在此优化过程中可能会有报错:

    1、5.8版本上

    复制代码
    error: "net.ipv4.ip_conntrack_max"is an unknown key
    error: "net.ipv4.netfilter.ip_conntrack_max"is an unknown key
    error: "net.ipv4.netfilter.ip_conntrack_tcp_timeout_established"is an unknown key
    error: "net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait"is an unknown key
    error: "net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait"is an unknown key
    error: "net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait"is an unknown key
    复制代码

    这个错误可能是你的防火墙没有开启或者自动处理可载入的模块ip_conntrack没有自动载入,解决办法有二,一是开启防火墙,二是自动处理开载入的模块ip_conntrack

    modprobe ip_conntrack
    echo "modprobe ip_conntrack">> /etc/rc.local

    2、6.4版本上

    复制代码
    error: "net.nf_conntrack_max"isan unknown key
    error: "net.netfilter.nf_conntrack_max"isan unknown key
    error: "net.netfilter.nf_conntrack_tcp_timeout_established"isan unknown key
    error: "net.netfilter.nf_conntrack_tcp_timeout_time_wait"isan unknown key
    error: "net.netfilter.nf_conntrack_tcp_timeout_close_wait"isan unknown key
    error: "net.netfilter.nf_conntrack_tcp_timeout_fin_wait"isan unknown key
    复制代码

    这个错误可能是你的防火墙没有开启或者自动处理可载入的模块ip_conntrack没有自动载入,解决办法有二,一是开启防火墙,二是自动处理开载入的模块ip_conntrack

    modprobe nf_conntrack
    echo "modprobe nf_conntrack">> /etc/rc.local

    3、6.4版本上

    error: "net.bridge.bridge-nf-call-ip6tables"isan unknown key
    error: "net.bridge.bridge-nf-call-iptables"isan unknown key
    error: "net.bridge.bridge-nf-call-arptables"isan unknown key

    这个错误是由于自动处理可载入的模块bridge没有自动载入,解决办法是自动处理开载入的模块ip_conntrack

    modprobe bridge
    echo "modprobe bridge">> /etc/rc.local
  • 相关阅读:
    从表达式到变量:一行scheme代码之所见
    document 文挡对象详解(JavaScript脚本语言描述)
    开源Linux系统成为微软Vista竞争对手
    Java下的框架编程(5)cglib的应用
    如何做好职业规划(乾卦)
    Asianux将成为最先进的安全Linux操作系统
    开发人员行走Unix的随身四艺
    Java中类初始化的顺序
    用Java线程获取优异性能(II)——使用同步连载线程访问关键代码部份
    prototype.js的扩展
  • 原文地址:https://www.cnblogs.com/xiami2046/p/12755373.html
Copyright © 2011-2022 走看看