端口号分类
- 熟知端口号(well-known port)
- 已登记的端口(registered port)
- 临时端口号(ephemeral port)
熟知端口号
- 由 IANA 分配, 0~1023
已登记的端口
- 由 IANA 登记并提供它们的使用情况清单, 1024~49151
- 49151 = 65536 * 0.75 - 1
临时端口号
- 49152~65535
在 Linux 上能分配的端口范围由 /proc/sys/net/ipv4/ip_local_port_range
变量决定,一般 Linux 内核端口范围为 32768~60999
端口相关的命令
查看对方端口是否打开
开启:
telnet 10.211.55.12 6379
Trying 10.211.55.12...
Connected to 10.211.55.12.
Escape character is '^]'.
nc -v 10.211.55.12 6379
Ncat: Connected to 10.211.55.12:6379
未开启:
telnet 10.211.55.12 6380
Trying 10.211.55.12...
telnet: connect to address 10.211.55.12: Connection refused
nc -v 10.211.55.12 6380
查看端口被什么进程监听占用
使用 netstat:
sudo netstat -ltpn | grep :22
使用 lsof:
-n
不将 ip 转换为 hostname-P
不将 port number 转换为 service name
sudo lsof -n -P -i:22
查看进程监听的端口号
先用 ps -ef | grep sshd
找到 sshd 的进程号, 这里为 1333
使用 netstat:
-a
显示所有选项
sudo netstat -atpn | grep 1333
使用 lsof:
sudo lsof -n -P -p 1333 | grep TCP
使用 /proc/pid
:
利用端口进行网络攻击
把本来应该是内网或本机调用的服务端口暴露到公网是极其危险的事情
解决办法:
- 首要原则:不暴露服务到公网 让 redis 运行在相对可信任的内网环境
- 设置高强度密码 使用高强度密码增加暴力破解的难度
- 禁止 root 用户启动 redis 业务服务永远不要使用 root 权限启动
- 禁用或者重命名高危命令 禁用或者重命名 save、config、flushall 等这些高危命令,就算成功登陆了 Redis,也就只能折腾你的 redis,不能取得系统的权限进行更危险的操作
- 升级高版本的 Redis 出现如此严重的问题,Redis 从 3.2 版本加入了 protected mode, 在没有指定 bind 地址或者没有开启密码设置的情况下,只能通过回环地址本地访问,如果尝试远程访问 redis,会提示以下错误: