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防火墙配置

修改防火墙
将firewalld.service切换为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

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

可参考:https://www.cnblogs.com/fawaikuangtu123/p/9876727.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   #显示下一年的日期

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

#!/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/ -type f -mtime +30 | xargsr m-f

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

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

8、变更默认的ssh服务端口,禁止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 \r 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:

tcp TIME_WAIT
进入主题前必须做铺垫啊,讲讲TIME_WAIT.因为TCP连接是双向的,所以在关闭连接的时候,两个方向各自都需要关闭。先发FIN包的一方执行的是主动关闭;后发FIN包的一方执行的是被动关闭。主动关闭的一方会进入TIME_WAIT状态,并且在此状态停留两倍的MSL(最大报文存活时间,一般Linux内核设置30秒)时长。

为什么主动方要傻乎乎等2MSL呢?不等,行不行?

TCP目的是可靠传输,主动关闭的一方发出FIN,被动方回复ACK,接着被动方发送FIN,主动方收到被动关闭的一方发出的FIN包后,回应ACK包,同时进入TIME_WAIT状态,但是因为网络原因,主动关闭的一方发送的这个ACK包很可能延迟,从而触发被动连接一方重传FIN包。极端情况下,这一去(ACK去被动方)一回(重传FIN回来),就是两倍的MSL时长。

如果主动关闭的一方跳过TIME_WAIT直接进入CLOSED,或者在TIME_WAIT停留的时长不足两倍的MSL,那么当被动关闭的一方早先发出的FIN延迟包到达或者重传FIN包到达后,就可能出现类似下面的问题:

主动方旧的TCP连接已经不存在了,主动方只能返回RST包
主动方新的TCP连接被建立起来了,延迟包可能干扰新的连接
所以, TIME_WAIT必须等,2MSL不能少

减少TIME_WAIT
TIME_WAIT期间,资源不会释放,现在都追求高性能高并发,快速释放资源是躲不掉的.对于客户端因为有端口65535问题,TIME_WAIT过多直接影响处理能力. 对于服务器,无端口数量限制的问题,Linux优化也很给力,每个处于TIME_WAIT 状态下连接内存消耗很少, 而且也能通过tcp_max_tw_buckets = ${你要的阈值} 配置最大上限,但是对于短连接为主的web服务器,几十万的连接,基数很大,耗得内存也不小哦.快速释放总是好的

tcp_tw_recycle:回收TIME_WAIT连接
对客户端和服务器同时起作用,开启后在 3.5*RTO 内回收,RTO 200ms~ 120s 具体时间视网络状况。RTO(Retransmission TimeOut)重传超时时间.内网状况比tcp_tw_reuse 稍快,公网尤其移动网络大多要比tcp_tw_reuse 慢,优点就是能够回收服务端的TIME_WAIT数量

但是,有个小坑:当多个客户端通过NAT方式联网并与服务端交互时,服务端看到的是同一个IP,也就是说对服务端而言这些客户端实际上等同于一个,可惜由于这些客户端的时间戳可能存在差异,于是乎从服务端的视角看,便可能出现时间戳错乱的现象,进而直接导致时间戳小的数据包被丢弃。客户端处于NAT很常见,基本公司家庭网络都走NAT.

tcp_tw_reuse:复用TIME_WAIT连接 只对客户端起作用,1秒后才能复用,当创建新连接的时候,如果可能的话会考虑复用相应的TIME_WAIT连接。通常认为tcp_tw_reuse比tcp_tw_recycle安全一些,这是因为一来TIME_WAIT创建时间必须超过一秒才可能会被复用;二来只有连接的时间戳是递增的时候才会被复用。

客户端请求服务器,服务器响应后主动关闭连接,TIME_WAIT存在于服务器,服务器是被连接者,没有复用一说,所以只对客户端起作用.如果是客户端主动关闭,TIME_WAIT存在于客户端,这个时候再次连接服务器,可以复用之前TIME_WAIT留下的半废品.

tcp_timestamps:以上两点,必须在客户端和服务端timestamps 开启时才管用(默认开启) 需要根据timestamp的递增性来区分是否新连接
总结
客户端tcp_tw_reuse复用连接管用, tcp_tw_recycle有用,但是客户端主要不是接受连接,用处不大
服务器tcp_tw_recycle回收连接管用,tcp_tw_reuse复用无效.为了减少TIME_WAIT留在服务器,可以在服务器开启KeepAlive,尽量不让服务器主动关闭,而是客户端主动关闭,减少TIME_WAIT产生.
reuse/recycle

相关文章:

  • 2022-12-23
  • 2022-01-07
  • 2022-12-23
  • 2021-08-07
  • 2022-01-20
  • 2021-07-11
猜你喜欢
  • 2021-09-20
  • 2021-09-05
  • 2021-10-21
  • 2021-05-24
  • 2021-05-28
  • 2022-01-05
  • 2021-07-13
相关资源
相似解决方案