Apr 20 23:40:03 debian99 sshd[2443]: Failed password for invalid user liyanjun from 134.209.229.252 port 44720 ssh2
Apr 20 23:40:03 debian99 sshd[2450]: Failed password for invalid user liyaocheng from 134.209.229.252 port 44948 ssh2
Apr 20 23:40:03 debian99 sshd[2453]: Failed password for invalid user liyifei from 134.209.229.252 port 45180 ssh2
Apr 20 23:40:03 debian99 sshd[2431]: Failed password for invalid user lixy from 134.209.229.252 port 43946 ssh2
Apr 20 23:40:03 debian99 sshd[2415]: Failed password for invalid user lixiang from 134.209.229.252 port 43168 ssh2
Apr 20 23:40:03 debian99 sshd[2459]: Failed password for invalid user liyongmin from 134.209.229.252 port 45918 ssh2
Apr 20 23:40:03 debian99 sshd[2441]: Failed password for invalid user liyanhao from 134.209.229.252 port 44636 ssh2
Apr 20 23:40:03 debian99 sshd[2446]: Failed password for invalid user liyanjun from 134.209.229.252 port 44794 ssh2
@:~$ sudo cat /var/log/auth.log | grep 134.209.229.252 | grep invalid | wc -l
948
@:~$
暂时没用 fail2ban ,自己写个脚本,每一分钟扫一次 auth.log,大于 10 次就 ban ,但是有的 ip 一分钟就能尝试 1000 次,太凶残了,能限制 ssh 并发个数吗,超过 10 个,就不要管了。
这么多回复还有收藏,我把脚本贴出来,也是网上搜的,然后改改只能算能用,大家帮忙多提意见。
第一,第二行是搜集auth.log中失败的
第三行是我用ngrok做内网穿透,这台机是服务端,12345是透给内网一台机器的ssh端口,也会被敲,但是不好在内网机器上做类似的屏蔽,因为在内网机器看起来都是127.0.0.1登录的,不能区分正常和恶意的。只好在服务端上查,如果4个以上session同时登录ssh,那就是不正常的,从服务端禁止掉。
这个脚本每分钟运行一次,syslog.conf里关掉cron的log,否则auth.log都是cron的记录。
#!/bin/sh
#ssh login fail 4 times,will be put in denyhosts
cat /var/log/auth.log |awk '/Failed/{print $(NF-3)}' |sort |uniq -c |awk '{print $2"="$1;}' >/var/log/black.list
cat /var/log/auth.log |awk '/Connection closed/{print $( NF-3)}' | sort | uniq -c | awk '{print $2"="$1;}' >> /var/log/black.list
netstat -anp |awk '/6:12345/{print$(NF-2)}' | awk -F: '{print$1}' | sort | uniq -c | awk '{print $2"="$1;}' >> /var/log/black.list
for i in `cat /var/log/black.list`
do
IP=`echo $i |awk -F= '{print $1}'`
NUM=`echo $i |awk -F= '{print $2}'`
if [ $NUM -gt 4 ]; then
grep $IP /etc/hosts.deny >/dev/null
if [ $? -gt 0 ]; then
echo "ALL: $IP" >>/etc/hosts.deny
iptables -I INPUT -s $IP -j DROP
echo "$IP is denied now."
fi
fi
done
查日志,2022.6.16-17之间居然封了180个IP,来源全球都有,难道是真的被盯上了,间隔大概10几分钟一波,从下午到半夜。
不过碰巧拨号21天了,早上换了ip。
DROP all -- 50-239-114-84-static.hfc.comcastbusiness.net anywhere
DROP all -- 210-65-10-144.hinet-ip.hinet.net anywhere
DROP all -- host81-133-189-239.in-addr.btopenworld.com anywhere
DROP all -- 125-227-75-51.hinet-ip.hinet.net anywhere
DROP all -- 5.145.161.9 anywhere
DROP all -- 45.55.75.215 anywhere
DROP all -- 123.139.156.125 anywhere
DROP all -- 43.247.102.81 anywhere
DROP all -- 161.132.96.90 anywhere
DROP all -- 117.22.228.62 anywhere
DROP all -- 190-107-162-132.levefibra.net.br anywhere
DROP all -- 18.43.175.210.in-addr.arpa anywhere
DROP all -- 190-107-162-136.levefibra.net.br anywhere
DROP all -- 218.92.175.102 anywhere
DROP all -- 191-243-61-57.netpeu.com.br anywhere
DROP all -- ip-36-4.sn3.clouditalia.com anywhere
DROP all -- 125-227-87-122.hinet-ip.hinet.net anywhere
DROP all -- 120.221.150.219 anywhere
DROP all -- 1.234.79.66 anywhere
DROP all -- 223.95.81.159 anywhere
DROP all -- 106.14.61.79 anywhere
DROP all -- ipv4-80-39-78.as55666.net anywhere
DROP all -- 85.184.70.58 anywhere
DROP all -- 110.188.70.99 anywhere
DROP all -- 113.105.94.66 anywhere
1
villivateur 2022-04-22 08:06:39 +08:00 via Android
禁用密码登录就好了
|
2
billgong 2022-04-22 08:13:38 +08:00 via iPhone 3
f2b 当然有用了,就是为了防这种情况的。这一点并发问题不大,没必要自己写。
|
3
JeromeCui 2022-04-22 08:13:46 +08:00 1
如果是自己的机器,把用 geoip 把国外的 ip 全给禁了会好很多
|
4
Mithril 2022-04-22 08:15:37 +08:00
我自己的服务器都是直接把端口封了,需要的时候再从控制台里开。
主要是也没什么需要经常 SSH 上去的工作,甚至有的时候直接用网页的就够了。 |
5
lijinma 2022-04-22 08:29:26 +08:00
禁用密码登陆吧
|
6
mingl0280 2022-04-22 08:35:50 +08:00
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --name sshuser --set
iptables -A INPUT -m recent --update --name sshuser --seconds 3600 --hitcount 5 -j DROP 随便抄了个 IPTables 规则,一小时内只能连接 5 次,超过则阻断。 顺便一提 f2b 其实也差不多…… |
7
imnpc 2022-04-22 08:38:09 +08:00
我的都是密钥登录 + 更换高位端口
|
8
deasty 2022-04-22 08:38:37 +08:00 via iPhone
fail2ban + Google 动态口令
|
9
elboble OP @billgong 我看 f2b 原理也是定期扫 log ,1 分钟是最低间隔了,如果不能限制访问频率,那和我这个脚本效果一样啊,1 分钟疯狂跑字典,从 di 跑到 li 了
|
10
anytk 2022-04-22 08:42:36 +08:00
复杂点用 iptables ,简单点 ufw limit ,外加改 ssh 端口,禁止密码登陆
|
11
markgor 2022-04-22 08:43:43 +08:00
>能限制 ssh 并发个数吗,超过 10 个,就不要管了。
那别人一直打,你正常登陆不也登陆不了? 我一般都是改 sshd 端口+f2b 的,但就现有日志来看,就算不加 f2b 也一样。所以建议你还是直接改 ssh 端口吧 |
12
cslive 2022-04-22 08:46:57 +08:00
禁用密码登录,让他扫
|
13
angryfish 2022-04-22 08:49:01 +08:00
使用防火墙,平常不用的时候关闭所有目标访问,自己用的时候,允许自己 ip 访问就好了。
我一般情况都不怎么登录 ssh ,只有发布程序的时候登录,感觉还行。 |
14
luxor 2022-04-22 09:03:04 +08:00
这不是被打,而是有人在暴力破解 ssh 的账号。改端口也没啥用,很快就能再次连过来。最有效的办法还是建立 iptables ssh 端口的白名单规则。
|
16
moxuanyuan 2022-04-22 09:06:52 +08:00
我家里路由器也是。。天天被扫
Fri Apr 22 08:56:40 2022 auth.info sshd[12203]: Invalid user demo from 93.95.230.165 port 54250 Fri Apr 22 08:56:40 2022 auth.info sshd[12203]: Connection closed by invalid user demo 93.95.230.165 port 54250 [preauth] Fri Apr 22 08:57:09 2022 auth.info sshd[12316]: Invalid user demo from 93.95.230.165 port 54478 Fri Apr 22 08:57:10 2022 auth.info sshd[12316]: Connection closed by invalid user demo 93.95.230.165 port 54478 [preauth] Fri Apr 22 08:57:39 2022 auth.info sshd[12487]: Invalid user demo from 93.95.230.165 port 54702 Fri Apr 22 08:57:40 2022 auth.info sshd[12487]: Connection closed by invalid user demo 93.95.230.165 port 54702 [preauth] |
18
wu67 2022-04-22 09:09:10 +08:00
先把密码登陆关了.
我印象中是可以用白名单的吧? ssh 只放行自己常用的机器的 ip. 当然如果没有公网 ip 、全是动态的, 那可能有点难办 |
19
HeyEvan 2022-04-22 09:16:39 +08:00 1
我的做法
1. 禁用 root 登录,更改默认 22 端口 2. 服务器防火墙开放 SSH ,云防火墙关闭 SSH 3. 安装 ZeroTier 平时通过 Zerotier 连过去,要是连不上或连接缓慢,直接开放云防火墙,用完再关 |
20
aru 2022-04-22 09:23:37 +08:00
怎么会没用呢。
攻击者的 IP 是有限的,封一个少一个,一段时间就清净了 但是 fail2ban 的默认封禁时间是 10 分钟,记得调成一周或一月,还有扫描时间范围设成 1 天 |
21
m4d3bug 2022-04-22 09:25:49 +08:00 via Android
开个 cockpit 用算了,sshd 都不开
|
22
duzhor 2022-04-22 09:32:40 +08:00 3
修改以下设置减少 99%攻击
``` 生成密钥 ssh-keygen -t rsa -f ~/.ssh/id_rsa -N '' -q ``` 把密钥保存到本地 ``` #/etc/ssh/sshd_config Port 23456 #修改 SSH 端口 PermitRootLogin prohibit-password #root 禁止密码和交互登录 PasswordAuthentication no #禁止密码登录 ``` 修改前记得开启防火墙端口. 重启 ssh 服务 |
23
des 2022-04-22 09:47:54 +08:00 via iPhone 1
你可能搜索的是 端口敲门
|
24
makelove 2022-04-22 09:50:21 +08:00
从来不折腾这种,只要起个合理长度的密码或禁密码就可以了
|
26
Mark24 2022-04-22 10:12:47 +08:00 1
上周好像有个新闻。美国对中国网络发起攻击。提权了就会当肉鸡攻击俄罗斯、白俄罗斯。
|
27
lolizeppelin 2022-04-22 10:17:44 +08:00
端口改了没....?
没改端口的话,改个端口能屏蔽 95% |
28
iqoo 2022-04-22 10:21:03 +08:00
|
30
FullBridgeRect 2022-04-22 11:05:35 +08:00
@elboble 如果对自己的用户名密码有自信,f2b 也够用了,即使再凶残被探测到了就 ban 了,就 1 分钟的事
|
31
yEhwG10ZJa83067x 2022-04-22 11:32:45 +08:00
关闭密码登录就不管了,我刚才去看了下每天 10w 条扫描日志,不管他就行了。
|
32
davidyin 2022-04-22 11:37:31 +08:00 via Android
指定允许登录的 IP ,白名单。
|
33
yujinchn 2022-04-22 12:32:31 +08:00
可以设置连续超过多少次就 ban 掉 ip 的吧
|
34
yujinchn 2022-04-22 12:33:10 +08:00
就用 fail2ban 限制,很快的
|
35
huangzxx 2022-04-22 12:34:43 +08:00
正确姿势:换端口,只允许密钥登录
|
36
iBugOne 2022-04-22 12:53:24 +08:00 via Android
fail2ban 没有性能问题,只要你姿势正确。它扫描日志有个 inotify ( pyinotify )后端,可以随日志变化来增量扫描,就像 tail -f 一样
|
37
dengshen 2022-04-22 13:01:20 +08:00 via iPhone
禁用密码登陆+证书登陆+改 sshd 端口
|
38
woshinide300yuan 2022-04-22 13:05:52 +08:00
我都是用安全组里的限制 IP 访问 22 端口,不知道有用没。反正我不写自己的 IP ,我打不开 SSH 都!~
|
39
hgc81538 2022-04-22 13:51:59 +08:00
改成很長+複雜密碼
例如: ZZ&7A:Y_J@Te2]mM2I#Fy@U?N8jmg~`q|0!M%Zi-|e-8vsD?|9l]llg2!6~q6zkb |
40
tiny1994 2022-04-22 13:55:00 +08:00
可以试试新出来的工具~
CrowdSec |
41
mingl0280 2022-04-22 14:07:02 +08:00
@elboble 你自己给你自己的 IP 开白名单啊,有啥困难的?不就是在前面加一条 ACCEPT 的事情?另外不知道为啥你不设这个但是我 22 端口是不用密码的……
|
42
suifengdang666 2022-04-22 14:44:42 +08:00
fail2ban 的搜索时间可以说是近实时,基本上 1s 左右可以检测到 login failed 存在并输出到 fail2ban.log
|
43
gesse 2022-04-22 16:42:45 +08:00
直接 ban c 段 ip 啊。
|
44
ctro15547 2022-04-22 16:52:59 +08:00
有用,已经 ban 了几个 W 的 ip 了 ,每个都封 1 个月 爱打就打吧 累了
|
45
shellic 2022-04-22 17:30:59 +08:00
禁掉密码登录换密钥登录,瞬间清净了
|
46
documentzhangx66 2022-04-22 18:09:41 +08:00
这其实非常简单。
攻击者,会先扫描 tcp 22 端口,如果扫不出来,才去扫高位端口。 所以,你在服务器上,先把 ssh 改为高位端口,然后做个脚本: 只要有 IP 连接 tcp 22 ,直接永久封掉它的 IP 。 |
47
cco 2022-04-22 18:33:15 +08:00
从来不开放 22 端口
从来不使用密码登录 |
48
linglin0924 2022-04-22 18:33:58 +08:00
当时端口默认,也是一堆脚本小子扫。后来端口改成 6w+以上,每次登录的 banner 就很清爽了。
|
49
zpfhbyx 2022-04-22 18:54:35 +08:00
😃 加个 2fa 就屏蔽了大部分了..
|
50
elboble OP @documentzhangx66 是个办法,但是不能轮询,要用中断。
|
51
SpicaStar 2022-04-22 19:22:18 +08:00
22 端口只对 ipv6 开放不就行了,如果是服务器域名不要直接解析到机器上
想扫你无异于大海捞针 |
52
datocp 2022-04-22 19:31:14 +08:00 via Android
搜索一下 iptables recent hacker/ipset ,实现一点不输 fail2ban 。制造陷阱,动态封锁。
|
53
documentzhangx66 2022-04-22 19:43:55 +08:00
@elboble 直接改 fail2ban 的代码就是轮询,改 iptables 代码就是中断。看你怎么用。我喜欢后者。
|
54
acbot 2022-04-22 19:54:38 +08:00
除开 Web 80 443 这种端口不方便改之外,其他服务改非常用端口 + IP 白名单段(不要给我说动态 IP ,或者说么有公网啥的,我要说在现有大 NAT 环境下,都不难统计出来),能解决大部分安全问题!
|
55
AS4694lAS4808 2022-04-22 20:05:00 +08:00 via Android
@m4d3bug 如果要远程管理还得开着 sshd 。。
|
56
icegaze 2022-04-22 20:05:17 +08:00 via Android
敲端口很好,
自己设置几个不特定端口顺序, 能杜绝一切 ssh 登录的尝试… … |
57
yeqizhang 2022-04-22 20:29:11 +08:00 via Android
host.deny 禁 22 host.allow 再允许国内的 ip 段,比如我就 allow 我这个省份,最后一道防线是定时处理日志找出 ip 用 iptable 禁用
|
58
pengtdyd 2022-04-22 21:29:09 +08:00
换端口啊!!!!!!把 22 端口封了
|
59
EVJohn 2022-04-22 21:34:23 +08:00
换端口,或者上个 zerotier/tinc/wg ,22 只对 sdlan 服务
|
60
aaa5838769 2022-04-22 21:38:52 +08:00
换端口+key 登陆+防火墙白名单。
|
61
tomcats 2022-04-22 22:09:14 +08:00
看了你的贴,我才想起我有 2 台 vps ,买了几年一直都是默认的,上去看了下日志,幸好我密码够长字符种类够多,没被破解。赶紧改了端口,禁止密码登陆,日志干净多了。
|
62
docx 2022-04-22 22:14:03 +08:00 via iPhone
sshd 整个白名单,只加自己常用的 IP 段,一般都能安静了
|
63
YaakovZiv 2022-04-22 22:14:25 +08:00
不需要往系统里安软件,如果自己发起访问的 IP 是固定的,在虚拟防火墙开启白名单,只允许制定 IP 进行 ssh ,其他的会自动被虚拟防火墙拦截,系统内无开支压力。 系统内安软件,量大的时候,系统就浪费一部分资源。
|
64
Dart 2022-04-22 23:03:54 +08:00
这种不是用 aws 的 security group 吗
|
65
saleacy 2022-04-23 03:36:15 +08:00 via Android
我服务端防火墙是关闭状态 就把 ssh 端口 禁止 root 登录 脚本遍历 secure 一分钟超过三次拉入 hosts.deny
|