CentOS服务器安装后一系列配置参考(CentOS 6.x/CentOS 7)

iptables

CentOS 官方iptables规则:开启ssh端口,允许icmp/ping,不接受其它连接;拒绝FORWARD转发。这是科学的,如果有需要开放的端口再做手工开启。

如果没有默认规则文件 /etc/sysconfig/iptables ,可见自行yum安装 yum install iptables-services,然后 service iptables restartsystemctl restart iptables 加载默认规则,通过iptables命令修改过规则后  service iptables save 保存规则。默认配置文件如下,可参考使用。

# Generated by iptables-save v1.4.7 on Sat Dec 17 10:11:38 2011
# Manual customization of this file is not recommended.
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-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 -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

sshd: 端口

ssh的服务器端,重要性不需多讲。

其主配置文件 /etc/ssh/sshd_config  (注意不是 /etc/ssh/ssh_config),下面sshd相关配置都在该文件上修改

改一下监听端口,虽然刻意扫描你,还是没的跑,但起码隐藏了一点点。大概13行,Port指令,默认是注释掉的,取消注释,将其后端口号22改成你想要改的,下面以12345为例。注意不要超过65535,不要使用其它已监听端口

Port 12345

[至关重要] iptables里打开相关端口,不要断开当前连接、重启sshd 服务,保存iptables配置到磁盘(以备下次开机时自动生效)

# iptables -I INPUT 4 -m state --state NEW -p tcp --dport 12345 -j ACCEPT

再开一个ssh客户端测试连接,确保改后的端口可以连接。(即使已改过端口,当前连接也还是会保持的)

指定自定义端口的ssh连接: ssh -p 12345  username@your.host.ip

sshd: 用户白名单

限制一下允许通过ssh远程登录的用户名(白名单),可以在文件结尾增加如下一行

AllowUsers user1 user2 user3

其中的user1 user2 user3 是允许通过ssh远程登录的用户,多个用户使用空格分隔。当然,你要事先创建这些普通用户,不然下次就连不上了。

sshd: 禁止root用户直接通过ssh登录

被暴力破解root密码是一件经常遇到的事情,所以严重推荐禁止掉,尤其是使用默认22端口时。增加下一行配置

PermitRootLogin no

日期时间的自动同步

首先确保rdate已安装,使用美国授时中心服务器,加入到crontab,每周日同步一次

# crontab -e
* * * * 0 rdate -s time.nist.gov

详细可参考 linux下日期时间自动同步设置(rdate,ntpdate两种方法)

yum源

开启epel源

CentOS官方yum默认包含了epel-release的yum源,直接安装即可。

yum install epel-release

排除某些rpm包

编辑yum主配置文件 /etc/yum.conf ,在[main] 节点里增加一行exclude指令。比如启用第三方内核时,运行yum更新时,若kernel*有更新,默认内核就会变成官方内核;为避免这个麻烦,可以把kernel*包从yum更新中排除掉。排除多个包可以空格隔开列在同一行,示例如下

exclude=kernel* httpd*

nginx

如果使用nginx的话,可以使用nginx的官方yum源。当然里面只有nginx,没有别的包,所以不会破坏centos原装包的依赖关系。创建/etc/yum.repos.d/nginx.repo内容如下

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key

详细参考nginx官方yum源说明 

 

SELinux

这货很强悍,然而有时也很麻烦,尤其是不够熟的时候,可以考虑关闭,配置在文件 /etc/sysconfig/selinux 中设置 SELINUX=disabledSELINUX=permissive

Grub 2 及第三方内核相关的设置

CentOS 7的Grub2 改变有点大,设置被拆到个文件中,比如 /boot/grub2/grub.cfg, /etc/default/grub/boot/grub2/grubenv 等。注意不要手工编辑grub.cfg。

如果使用的第三方内核,要注意指定默认启动的内核。默认情况下/etc/default/grub里设置了 GRUB_DEFAULT=saved ,要通过/boot/grub2/grubenv指定,但也不要手工修改该文件,而是使用 grub2-set-default 命令的设置。如下三行 1) 列出grub.cfg里的menuentry名称,  2) 设置默认项 grub2-set-default   3) 查看grubenv确认默认项saved_entry

grep "^menuentry" /boot/grub2/grub.cfg |cut -d "'" -f2
grub2-set-default "{menuentry 名称}"
grub2-editenv list

Grub2 参考CentOS 官方文档: https://wiki.centos.org/zh/HowTos/Grub2

开启BBR

实体机/KVM/Xen的VPS下,使用第三方内核开启BBR

本节适用实体机或KVM、Xen虚拟化下的VPS(此方法不支持OpenVZ)。CentOS7官方内核较老,不支持BBR,可使用 ELRepo Project 预编译的内核。其中rpm包url可能会不定期更新,以官方最新为准。(另CentOS6可使用Fedora Copr上项目kernel-el6/

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
yum install https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm
yum --enablerepo=elrepo-kernel install kernel-ml -y

参考上节Grub2默认内核做设置,完成后重启,确认内核生效无误。然后再继续。这里最好。

echo 'net.core.default_qdisc=fq' | tee -a /etc/sysctl.conf
echo 'net.ipv4.tcp_congestion_control=bbr' | tee -a /etc/sysctl.conf
sysctl -p

完成后,下面命令确认生效

sysctl net.ipv4.tcp_available_congestion_control
sysctl -n net.ipv4.tcp_congestion_control
lsmod | grep bbr

其输出应该是 net.ipv4.tcp_available_congestion_control = bbr cubic renobbr 及 tcp_bbr 16384 0 (后一行输出的数字可能不同)。

至此bbr启用完成。但,强烈推荐,参考前节“排除某些rpm包”,把kernel* 包从yum更新中排除掉;否则,下次yum更新后,grub默认内核将换成centos官方内核,bbr就没了。

详细可参看 https://www.vultr.com/docs/how-to-deploy-google-bbr-on-centos-7

魔改版BBR(OpenVZ VPS下可用)

基于OpenVZ的 VPS上面方法不支持,得使用魔改版BBR,要求CentOS 7以上(事实上CentOS 6(x64)也可以,但必须升级glibc),一键安装脚本,照提示操作即可。

curl https://raw.githubusercontent.com/linhua55/lkl_study/master/get-rinetd.sh | bash

运行中会提示输入端口号,如有多个端口号用空格隔开(不支持端口段)。如需要增减端口,可修改配置文件 /etc/rinetd-bbr.conf

详细参看作者的github项目

MySQL-Server

配置参考 一份生产环境下MySQL服务配置优化参考样本 (请按硬件及负载酌情修改)

备份脚本,加入到crontab中,定时执行。注意其中备份存储目录、待备份数据库列表、及备份用户账号密码

#!/bin/bash
# Program:
#      auto backup mysql database
# History:
# 2012/05/14    fengyqf First release
#backup folder, with the last slash "/"
backup_folder="/home/user/backup/mysql/"
filename=`date +_%Y%m%d_%N`

for db in db1 db2 db3
do
mysqldump -hlocalhost --opt -e --max_allowed_packet=1048576 --net_buffer_length=16384 -uroot -pYourMysqlRootPassword $db |gzip > $backup_folder$db$filename.sql.gz
done

其它置参考

ulimit, 文件描述符 http://www.path8.net/tn/archives/2024

sysctl, 内核优化 #TODO#

 

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据