前言
拿到一个全新的服务器,需要做一些类似护城河的防御工作,这样子才能搭建自己的城堡。
- 知己知皮
- 修改ssh端口
- 端口开放/关闭
- 防火墙启动/关闭
- 不用root用户登陆(禁止root用户登陆),使用其他用户登陆拥有root用户权限
- 将密码设置复杂
- 使用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