Server Operation and Maintenance

"Server Operation And Maintenance"

Posted by Stephen on September 26, 2020

前言

拿到一个全新的服务器,需要做一些类似护城河的防御工作,这样子才能搭建自己的城堡。

  1. 知己知皮
  2. 修改ssh端口
    1. 端口开放/关闭
    2. ​ 防火墙启动/关闭
  3. 不用root用户登陆(禁止root用户登陆),使用其他用户登陆拥有root用户权限
  4. 将密码设置复杂
  5. 使用fail2ban,起到登陆失败多次后直接禁止某个时间段此ip登陆

环境

系统环境

LSB Version:	:core-4.1-amd64:core-4.1-noarch
Distributor ID:	CentOS
Description:	CentOS Linux release 7.4.1708 (Core) 
Release:	7.4.1708
Codename:	Core

软件信息

version : 	
     None

正文

1、知己知彼

使用命令lsb_release -a 查看linux发行版本

$ lsb_release -a
LSB Version:	:core-4.1-amd64:core-4.1-noarch
Distributor ID:	CentOS
Description:	CentOS Linux release 7.8.2003 (Core)
Release:	7.8.2003
Codename:	Core

查看当前主机在监听哪些端口

$ netstat -tulnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:222             0.0.0.0:*               LISTEN      3217/sshd           
tcp6       0      0 :::3306                 :::*                    LISTEN      1079/mysqld         
udp        0      0 0.0.0.0:68              0.0.0.0:*                           718/dhclient        
udp        0      0 127.0.0.1:323           0.0.0.0:*                           514/chronyd         
udp6       0      0 ::1:323                 :::*                                514/chronyd  

2、修改ssh端口

在阿里云服务器,这个先开一个设置ssh端口号来备用

$ vim /etc/ssh/sshd_config
# 添加 
Port 22222
$ systemctl restart sshd.service

开放22222端口,为什么选怎么大的数字,这个涉及到端口问题

# 重启防火墙 
$ systemctl restart firewalld.service
# 以tcp协议,永久、作用域为公共:22222端口
$ firewall-cmd --permanent --add-port=22222/tcp --zone=public
# firewall-cmd --permanent --zone=public --remove-port=22222/tcp 
# 重新加载防火墙策略
$ firewall-cmd --reload
# 执行成功后,查看22222端口是否被开启
$ firewall-cmd --permanent --query-port=22222/tcp

重启和防火墙,最好也重启下服务器

$ systemctl restart firewalld.service

#测试成功后,只需进入配置文件将Port 22添加注释即可
$ vim /etc/ssh/sshd_config
#Port 22
#重启ssh服务
$ systemctl restart sshd

# / 移除一些无关的端口
$ firewall-cmd --permanent --remove-port=22/tcp
# 执行成功后,查看22222端口是否被开启
$ firewall-cmd --permanen --query-port=22/tcp

如果是阿里云服务器,需要登录阿里云控制台,选择云服务器—安全组,为当前ECS所使用的安全组配置规。添加安全组规则,根据实际的使用场景来定义安全规则,允许新配置的远程端口进行连接。

3、创建普通用户并拥有root权限

# 在服务器上
# 创建普通用户
$ useradd RPA
$ passswd RPA

# 修改sudoers,添加
$ vim /etc/sudoers
RPA  	ALL=(ALL)	ALL

# 检查是否拥有root权限
$ su RPA
$ sudo -l
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for RPA: 
Matching Defaults entries for RPA on iZwz:
    !visiblepw, always_set_home, match_group_by_gid, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME
    LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
    env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin

User RPA may run the following commands on iZwz:
    (ALL) ALL

4、设置密码复杂

密码的复杂度一定要较高点,尽量通过密钥登陆,这里介绍个密码生成工具:pwgen(需要安装yum) pwgen的一些参数:

参数 (功能描述)
 -c(密码里面包含至少一个大写字母)
 -A(密码里面不包含大写字母)
 -n(密码里面至少包含一个数字。)
 -0(密码中不包含数字)
 -y(密码中至少包含一个特殊字符。)
 -s(生成安全随机的密码)
 -B(密码中不包含混淆的字符,例如“1”和“I”)
 -h(查看帮助信息)
 -H(使用指定文件sha1哈希生成,不适用随机生成)
 -C(按列打印生成的随机密码)
 -1(每行输出一个密码,不按列打印生成密码)
 -v(密码不包括元音字母或者可能被误认为是元音字母的数字)

操作实例:

安装pwgen

yum install pwgen

密码生成

pwgen -c -n -y -1 12 10

解析:意思是生成密码长度为12的包含至少一个大写字母和至少一个数字和至少一个特殊字符的10个密码,并分行显示。

5、利用密钥对ssh登录服务器并禁用密码登陆

连接上面的test帐号,在客户机上操作

# 在客户机上
#生成登录密钥
$ ssh-keygen -N '123456' -f ~/.ssh/id_rsa_free_rpa


# 将公钥复制到服务器authorized_keys上


# 在服务器上
#将上述命令生成的~/.ssh/yolrekey_rsa.pub文件拷贝到服务器,并执行以下命令配置好密钥登录
$ mkdir -p /home/RPA/.ssh
$ cat /tmp/id_rsa_free_rpa.pub >> /home/RPA/.ssh/authorized_keys

$ 

# 在服务器上
$ chown -R RPA:RPA /home/RPA/.ssh && chmod 700 /home/RPA/.ssh && chmod 600 /home/RPA/.ssh/authorized_keys

#使用以下命令登录服务器
$ ssh -i ~/.ssh/id_rsa_free_rpa -p [端口号] RPA@ip
# 成功之后,
$ vim /etc/ssh/sshd_config
PasswordAuthentication no
$ systemctl restart sshd.service

6、使用fail2ban安全告警设置

How to Secure Your Linux Server with fail2ban

Secure Your Linux Server With Fail2Ban [Beginner’s Guide]

后记

查看ip登陆情况
$ cat /var/log/secure