一、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 ~]# vi /etc/sysconfig/network HOSTNAME=c64 #修改主机名,重启生效 GATEWAY=192.168.1.1 #修改默认网关,如果上面eth0里面不配置网关的话,默认就使用这里的网关了。
[root@bigdata ~]# vim /etc/hostname #修改主机名 [root@localhost ~]# vi /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
<1>、关闭selinux防火墙
默认云服务器都是关着的
cat /etc/selinux/config
setenforce 0 设置不启动
getenforce 查看
<2>、清空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 #保存防火墙配置信息
3、针对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
#!/bin/bash
IPT=`which iptables`
$IPT -F
$IPT -X
$IPT -P INPUT DROP
$IPT -P FORWARD ACCEPT
$IPT -P OUTPUT ACCEPT
$IPT -N syn-flood
##本地回环 内网允许任何
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -m state --state NEW -s 10.0.0.0/8 -j ACCEPT
# ssh 端口开放 任何IP
$IPT -A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT
# 根据需求填写相应的端口
$IPT -A INPUT -p tcp -m multiport --dports 80,8087,89 -j ACCEPT
# zabbix监控地址
$IPT -A INPUT -p tcp -s zabbix.ip -m state --state NEW -m tcp --dport 10050 -j ACCEPT
# ICMP 规则控制
$IPT -A INPUT -p icmp -m limit --limit 100/sec --limit-burst 100 -j ACCEPT
$IPT -A INPUT -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
# DOS防护
$IPT -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j syn-flood
$IPT -A INPUT -j REJECT --reject-with icmp-host-prohibited
$IPT -A syn-flood -p tcp -m limit --limit 3/sec --limit-burst 6 -j RETURN
$IPT -A syn-flood -j REJECT --reject-with icmp-port-unreachable
<4>、添加普通用户并运行sudo授权管理
sudo是Linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部root命令的一个工具
#vim /etc/sudoers //打开sudo的配置文件
先找到这一行:(root ALL=(ALL)ALL)
添加一行:普通用户 ALL=(ALL)ALL
<5>、更新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
<6>、定时自动更新服务器时间
时间设置:
-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" #这样可以设置全部时间
时区设置:
修改时区
(1)使用tzselect设置时区
(2)复制相应的时区文件,替换系统默认时区
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
(3)将当前时间写入BIOS永久生效(避免重启后失效)
hwclock
(4)centos /etc/sysconfig/clock
ubuntu /etc/timezone
任务计划使用:
基本格式 :
* * * * * 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
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
11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart
晚上11点到早上7点之间,每隔一小时重启apache
* 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart
<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用户远程连接
<9>、禁止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文件
关闭 1 开启
<10>、历史记录
# 以下都是临时生效,默认1000不需要更改 # 设置的是闲置账号的超时时间 export TMOUT=10 10秒后提示超时时间 # 设置终端history显示条数 export HISTSIZE=5 只显示最近5条信息 # 上面的终端显示对应的是 cat ~/.bash_history export HISTFILESIZE=5 该文件只保存5条信息 # 清空历史记录 history -c # 指定条数删除 history -d 历史记录条属
<11>、内核参数优化
# 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网络状态数量过多设置的
# 表示开启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
# 表示系统同时保持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
# 使配置文件生效 # sysctl –p
由于CentOS7.X系统中的模块名不是ip_conntrack,而是nf_conntrack,所以在/etc/sysctl.conf优化时,需要把net.ipv4.netfilter.ip_conntrack_max 这种老的参数,改成net.netfilter.nf_conntrack_max这样才可以。