虚拟机经常连接不上
由于工作需要,自己在亚马逊买了台EC2主机,并在上面安装了工作要用的软件,以前是只有关键时间点才会连不上,可是最近几乎每隔一天就连不上,导致工作受影响,所以决定花时间看看怎么回事。
定位问题
一般来说是设置的端口出现I/O read timedout,是由于端口被攻击。于是我登录到AWS上,进入主机的Instance -> Connect using SSH, 当然你也可以用SSH client连接。
进入找到/var/log目录
cd /var/log
ls
less -f auth.log
正如你所见,来自不同的IP,不同的端口,持续不断地进行请求,这个应该是有人故意这样做的。因为开始也就我自己用,域名什么我都没有公开过,所以端口限制什么的都没有设置。防人之心不可无。。。
解决问题
知道问题在哪里就比较好处理:
第一: 限制端口。 从Instance - > Networking进入,添加只有必要的端口到防火墙规则
第二:采用第三方工具。 这里用的是fail2ban,它的用处简单说就是把经常攻击你的IP关进小黑屋.
安装fail2ban:
apt install fail2ban
systemctl start fail2ban
systemctl enable fail2ban
配置:
#主要的配置你可以查看这个vi /etc/ssh/sshd_config
# 通过jail.local来配置生效
cd /etc/fail2ban
head -20 jail.conf#拷贝一份名为jial.local的设置
cp jail.conf jail.local
vi jial.local#改以下部分试试
[sshd]# To use more aggressive sshd modes set filter parameter "mode" in jail.local:
# normal (default), ddos, extra or aggressive (combines all).
# See "tests/files/logs/sshd" or "filter.d/sshd.conf" for usage example and details.
#mode = normal
enabled = true # 这里
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
bantime = 3600 # 这里#以及改jail.local:
[recidive]
enabled = true # 这里
maxtry = 4
logpath = /var/log/fail2ban.log
banaction = %(banaction_allports)s
bantime = 1w
findtime = 1d
输入wq保存后再restart fail2ban,过段时间再来检查less +G /var/log/fail2ban.log 看看有没有被禁用的IP添加:
less +G /var/log/fail2ban.log
sudo iptables -S | grep f2b
或者查看auth.log也可以看到那些是"惯犯" IP,并已经添加到规则当中了。而我查看auth.log的时候还是看到像这样以存在用户登录的
然后我在[sshd]处改一下mode = aggressive, 这个模式包含防止DOS
[sshd]# To use more aggressive sshd modes set filter parameter "mode" in jail.local:
# normal (default), ddos, extra or aggressive (combines all).
# See "tests/files/logs/sshd" or "filter.d/sshd.conf" for usage example and details.
mode = aggressive
enabled = true
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
bantime = 3600
查看sshd部分的ban信息
fail2ban-client status sshd
这个是我昨天写的,今天早上想听TED,结果发现又连不上了,登录到AWS上查看log信息,一切正常,没有上面乱七八糟的请求了,但。。。我的域名端口还是被封,不知道是不是网络服务商会上报个人连接数据,真的是一万匹羊驼问候某些人。
底层人民真不容易,没工作没饭吃没人管,说句话上个网管的比谁都严,怕什么呢?!
历史的车轮不会倒退,也许一时会,但不可能永久会