项目场景:
实际上很多人在安装好服务之后都会选则将默认的端口改掉,美其名曰防止端口扫描。实际上,如果仅仅更改端口就想阻止扫描,那多少有点掩耳盗铃的味道了。看完这篇文章你就明白了。
问题描述
就拿sshd来说吧,加密的安全通讯协议,可以说是未加密的telnetd的完美替换了。今天就围绕着只改默认端口能不能阻止扫描来展开。目的就是找到更改后的sshd端口和成功确认协议。
开始验证:
默认端口
一般不改的话默认是22,用nmap轻松扫描,不用任何额外配置。
nmap 192.168.1.1
PORT STATE SERVICE
22/tcp open ssh
1935/tcp open rtmp
8000/tcp open http-alt
8443/tcp open https-alt
10000/tcp open snet-sensor-mgmt
10001/tcp open scp-config
19350/tcp open unknown
看到了没有,轻松扫出。这里不一定说22端口就一定是sshd服务,但是黑客拿到这个端口就可以着手攻击了。
更改端口
这里更改为18022,依然是使用nmap扫描,不用额外配置。
nmap 192.168.1.1
PORT STATE SERVICE
1935/tcp open rtmp
8000/tcp open http-alt
8443/tcp open https-alt
10000/tcp open snet-sensor-mgmt
10001/tcp open scp-config
19350/tcp open unknown
看到22端口消失了,这是不是意味着你就安全了?别高兴太早!
我们换个方式:
#指定扫描端口范围
sudo nmap -p1-65535 -sV 192.168.1.1
ORT STATE SERVICE VERSION
1935/tcp open rtmp?
8000/tcp open http-alt ZLMediaKit(git hash:9fd5152/2022-11-19T09:52:10+08:00,branch:master,build time:2
8332/tcp open ssl/unknown
8443/tcp open ssl/https-alt?
8554/tcp open rtsp
10000/tcp open snet-sensor-mgmt?
10001/tcp open scp-config?
18022/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
19350/tcp open ssl/unknown
时间长了点,但是依然扫描出来了。如果收益够大,这点时间不是问题。到这里已经证明单纯更改默认绑定端口是避不开攻击的。
禁ping
禁ping可以直接让ping命令无法得到回应,进而引发超时,但是对端口扫描有用吗?请继续看:
ping 192.168.1.1
正在 Ping 192.168.1.1 具有 32 字节的数据:
请求超时。
请求超时。
sudo nmap -p1-65535 -sV 192.168.1.1
PORT STATE SERVICE VERSION
1935/tcp open rtmp?
8000/tcp open http-alt ZLMediaKit(git hash:9fd5152/2022-11-19T09:52:10+08:00,branch:master,build time:2
8332/tcp open ssl/unknown
8443/tcp open ssl/https-alt?
8554/tcp open rtsp
10000/tcp open snet-sensor-mgmt?
10001/tcp open scp-config?
18022/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
19350/tcp open ssl/unknown
和上面一摸一样,所以禁ping只是在网路里隐藏自己,和端口无关。
解决方案:
我的理解是如果你的端口对外开放,那么是可以扫到的,除非你绑定为localhost。也不是说端口暴露了就一定处在危险之中,像ssh本身就是加密传输,安全性有一定保障,下面就提供几个加固办法,也是我一直在用的。
禁ping
有一丁点用,防菜鸟不防高手。
更改默认端口
有一丁点用,防菜鸟不防高手。
使用私钥登录
禁用密码登录,改用纯私钥登录,安全性比密码高很多。
私钥双重加密
私钥本身还可以添加一个密码,相当于双重密码了。
复杂密码
使用复杂密码,最好是数字+大小写字母+下划线等等,数目越长,破解难度越大。
超时断线
可以设置超时断线,一旦没有数据传输就断开,防止泄密
设置错误重试次数
如果多次重试失败就禁止用户登录
防火墙
如果你的ssh是内网用,可以设置防火墙仅支持指定ip登录
禁用非法ip登录
将疑似攻击的ip假如黑名单来阻止进一步侵害,这种工具很多。
多说一句:
网上很多人说通过替换sshd版本字符串让sshd不返回具体版本信息,因为不同版本有不同的漏洞。通过误导攻击者只能拖延攻击时间,还是不能避免被攻克的命运。我无法评估这个方法用处有多大,毕竟我也没见过真正的黑客能强到怎样可怕的地步,至少防一些普通攻击者是够了吧。
据我所知,ssh基本每个版本都有漏洞,如果真的被自己遇到了,可能修复漏洞才是更好的办法。
总结:
我接触过的很多项目和公司几乎不怎么注意这类安全问题,大公司一般有自己的安全团队。虽说可能服务器上没有什么特别值钱的数据,但是遇到恶意攻击的也不失没可能,到那个时候,法律就是最后的屏障了吧,毕竟使用黑客手段攻击他人是违法行为。