centos 初步服务器配置续

centos 初步服务器配置续

很久之前记录过一篇ubuntu服务器初步配置的记录,时间久远。前几天薅了一把京东云的羊毛,买了一台云主机,配置也比较低,计划没事做做测试用。顺便记录一下,linux下ssh安全加固的配置,备忘。

登录

京东云购买后,默认创建一台centos 8 的云主机,并且将登录信息直接发送到手机短信。不过个人习惯,关机,重新选择centos 7的镜像重新安装系统。centos 7的支持到2024年,重新安装centos后,登录云主机。

接下来的常规操作:

更换国内源

使用京东云上镜像安装的系统,默认已经改了京东自己的源。这个可以保持不变了。

系统更新

1
yum update

添加用户

1
2
3
4
adduser -d /home/example_user -s /bin/bash -m example_user
passwd example_user
# 添加sudo权限
usermod -aG wheel example_user

添加公钥认证

使用ssh密钥身份验证,比记住密码要方便得多,通过配置密钥登录,也省去了输入密码的过程,更加方便安全。

在电脑上生成ssh密钥:

1
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa_jdyun_$(date +%Y-%m-%d) -C "jd cloud key for example_user"

上传密钥:

1
ssh-copy-id -i ~/.ssh/id_rsa_jdyun_2022-XX-XX.pub example_user@jd_host

上传密钥后,登录云主机。接下来,需要更改sshd的配置文件,主要更改参考:

1
sudo vim /etc/ssh/sshd_config

限制身份验证最大次数

限制用户失败认证的最大次数是一个缓解暴力攻击的好方法。将MaxAuthTries设置为比较小的数字(x),将会在用户x次失败尝试后强制断开会话。

MaxAuthTries 3

禁用root账户登录

如前面,我们已经创建了新的用户,并加入到sudo用户组。那么,我们可以配置禁用root用户登录,保护root账户受到其它类型的攻击。

PermitRootLogin no

显示最后一次登录的日志

显示最后一次登录的时间和日期,这个默认配置。

PrintLastLog yes

结束空闲的ssh会话

这个可以防止走开后,忘记退出,别人直接在电脑上执行命令。主要是看退出时间,对安全敏感的离开后销屏这个应该是常规操作,不过ssh上配置也是非常有需要的。

ClientAliveInterval 900
ClientAliveCountMax 0

禁用空密码

PermitEmptyPasswords no

禁用密码登录

PasswordAuthentication no

使用密钥登录

PubkeyAuthentication yes

更改以上配置之后,可以重启sshd的服务。之后,便可以直接通过密钥登录了。

完成sshd配置后,登录时发现提示超过十几个的登录失败提示。查看一下/var/log/secure下的日志,发现一堆的登录失败日志,猜到被扫描了。

Oct 10 13:57:05 1664346022931 sshd[4185]: Received disconnect from 68.183.83.242 port 44212:11: Normal Shutdown, Thank you for playing [preauth]
Oct 10 13:57:05 1664346022931 sshd[4185]: Disconnected from 68.183.83.242 port 44212 [preauth]
Oct 10 13:59:00 1664346022931 sshd[4484]: Invalid user pi from 178.13.78.150 port 41768
Oct 10 13:59:00 1664346022931 sshd[4484]: input_userauth_request: invalid user pi [preauth]
Oct 10 13:59:00 1664346022931 sshd[4485]: Invalid user pi from 178.13.78.150 port 41782
Oct 10 13:59:00 1664346022931 sshd[4485]: input_userauth_request: invalid user pi [preauth]
Oct 10 13:59:00 1664346022931 sshd[4484]: Connection closed by 178.13.78.150 port 41768 [preauth]
Oct 10 13:59:00 1664346022931 sshd[4485]: Connection closed by 178.13.78.150 port 41782 [preauth]
Oct 10 14:00:20 1664346022931 sshd[4622]: Received disconnect from 172.105.198.48 port 53828:11: Normal Shutdown, Thank you for playing [preauth]
Oct 10 14:00:20 1664346022931 sshd[4622]: Disconnected from 172.105.198.48 port 53828 [preauth]
Oct 10 14:01:07 1664346022931 sshd[4677]: Invalid user teamspeak from 68.183.83.242 port 54174
Oct 10 14:01:07 1664346022931 sshd[4677]: input_userauth_request: invalid user teamspeak [preauth]

就这么才刚开的一个云主机,就这么无差别的给扫描,实在有点不甘心就算了。所以接下来的就是防恶意扫描破ssh了。

sshd防恶意扫描

fail2ban通过过扫描日志来查找恶意行为,并通过更新防火墙规则等操作来阻止可疑IP。

安装fail2ban

直接通过centos的yum源中安装。

1
yum install fail2ban

启动fail2ban

1
systemctl start fail2ban

配置sshd防恶意扫描

为fail2ban配置一个jail配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
cd /etc/fail2ban/
vim jail.local

[DEFAULT]
# IP 白名单
ignoreip = 127.0.0.1/8 ::1

# 封禁时间
bantime = 24h

# 查找失败时间
findtime = 600

# 允许失败次数
maxretry = 5

# 使用防火墙规则
# firewall (firewallcmd-ipset);
# iptables (iptables-multiport);
# 对应/etc/fail2ban/action.d目录下的文件
banaction = firewallcmd-ipset

# 触发规则后的选择行为:
# 只封禁IP:action_
# 封禁IP+邮件通知:action_mw
# 封禁IP+邮件通知+报告相关日志:action_mwl
action = %(action_)s

[sshd]
# 需要监听的项,对应/etc/fail2ban/filter.d目录下的文件
filter = sshd
enabled = true
port = 22

# 监听的日志路径:
# Debian系:/var/log/auth.log
# RedhAT系:/var/log/secure
logpath = /var/log/secure

重新启动fail2ban

1
2
3
4
5
6
7
8
9
10
11
12
13
14
sudo systemctl restart fail2ban
# 查看fail2ban的状态

sudo systemctl status fail2ban

● fail2ban.service - Fail2Ban Service
Loaded: loaded (/usr/lib/systemd/system/fail2ban.service; enabled; vendor preset: disabled)
Active: active (running) since 五 2022-09-30 21:09:23 CST; 1 weeks 2 days ago
Docs: man:fail2ban(1)
Main PID: 15611 (fail2ban-server)
CGroup: /system.slice/fail2ban.service
└─15611 /usr/bin/python2 -s /usr/bin/fail2ban-server -xf start

Warning: Journal has been rotated since unit was started. Log output is incomplete or unavailable.

查看fail2ban的状态

1
2
3
4
sudo fail2ban-client status 
Status
|- Number of jail: 1
`- Jail list: sshd

可以看到已经有一个sshd的服务了,然后,我们再详细一点:

1
2
3
4
5
6
7
8
9
10
sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 3
| |- Total failed: 7922
| `- Journal matches: _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
|- Currently banned: 26
|- Total banned: 264
`- Banned IP list: 43.143.67.17 140.206.186.171 144.91.122.254 203.76.241.10 193.142.146.35 177.101.221.195 137.184.37.59 101.33.253.29 103.47.81.79 54.38.35.98 45.42.247.79 175.178.178.194 195.3.147.76 57.128.11.39 84.201.177.42 120.48.41.223 139.59.12.104 74.208.108.167 123.156.230.147 193.243.182.204 192.210.196.55 20.127.87.36 80.76.51.230 195.19.96.168 120.199.82.50 179.43.155.133

看到总共ban了264个IP的,心安了一些,不过扫描真的是让人无语。不知道是不是京东云的问题,同样在阿里云上,也有遇到恶意扫描的,不过好像真没这么凶,阿里云上的扫描的很久没看到了。


centos 初步服务器配置续
https://ywmy.xyz/2022/10/10/centos-初步服务器配置续/
作者
ian
发布于
2022年10月10日
许可协议