Linux 修改SSH 默认端口 22,防止被破解密码
Linux/Unix 系统,很多人使用SSH + 密码来登陆服务器,默认 22端口,这样会有被暴力破解密码的危险(除非密码足够复杂且长度很长),因此最好修改SSH默认的22端口为其它随机端口号。
为了保险起见,推荐先添加一个SSH 随机端口号并添加对应的防火墙规则,然后用这个新的端口连接服务器试试,如果没问题了,我们再删除默认的22端口。这样做的好处,就是因为如果新修改的端口号无法连接,可以仍然使用默认的22端口登录,否则,可能无法连接或出现一些问题后会导致你无法通过SSH连接到服务器,那就惨了。
本文原文来自米扑博客:Linux 修改SSH 默认端口 22,防止被破解密码
本文实例的系统环境
阿里云 CentOS 7.4
一、修改配置文件
1. 修改配置文件 /etc/ssh/sshd_config
vim /etc/ssh/sshd_config
修改
#Port 22
#ListenAddress 0.0.0.0
#ListenAddress ::
为
Port 22
Port 23456
#ListenAddress 0.0.0.0
#ListenAddress ::
如上,取消注释 Port 22,并在其下方增加一行 Port 23456
说明:
SSH默认监听端口是22,如果不强制说明,”Port 22”注释或不注释,都会默认开放端口22远程登录
上面取消注释并保留了22端口,防止可能各种权限和配置问题,导致22端口不能访问,那就尴尬了
增加了一行 Port 23456 端口,就是为了来替换默认端口22的,大家在修改端口时候最好挑10000~65535之间的端口号,10000以下容易被系统或一些特殊软件占用,或是以后新安装的应用可能占用该端口,所以10000以下的端口号都不要使用。
二、使其 sshd 配置生效
1、执行如下命令,使 sshd 配置修改后生效
1)CentOS 7.x 以上系统,执行命令
systemctl restart sshd.service
2)CentOS 6.x 以下系统,执行命令
/etc/init.d/sshd restart
2、生效后,使用新端口号登录
ssh root@47.106.126.167 -p 23456
# ssh root@47.106.126.167 -p 23456 root@47.106.126.167's password:
输入密码即可成功登录
注:此时 22 和 23456 两个端口都可以成功登录ssh
3、确认新端口可登录,注释掉22端口
vim /etc/ssh/sshd_config
注释掉端口22,最后的配置内容如下
#Port 22
Port 23456
#ListenAddress 0.0.0.0
#ListenAddress ::
最后,别忘了修改配置文件后,使其生效
1)CentOS 7.x 以上系统,执行命令
systemctl restart sshd.service
2)CentOS 6.x 以下系统,执行命令
/etc/init.d/sshd restart
三、防火墙允许新端口号
阿里云使用 CentOS 7 以前的版本并开启默认防火墙 iptables 时,应注意 iptables 默认不拦截访问
如果您配置了 iptables 规则,需要执行命令允许新端口:
iptables -A INPUT -p tcp --dport 23456 -j ACCEPT
然后执行重启防火墙命令
service iptables restart
说明:
CentOS 7 以后版本默认安装 Firewalld
首先,查看防火墙是否开启了 23456 端口号
firewall-cmd --permanent --query-port=23456/tcp
若打印结果为 no 表示没有开放 23456 端口号,那么添加允许新端口号,运行命令
firewall-cmd --permanent --add-port=23456/tcp
返回结果为 success 即表示放行 TCP 23456 端口号
接着,重新加载防火墙策略,使配置生效
firewall-cmd --reload
最后,再次查询是否开放了 23456 端口号
firewall-cmd --permanent --add-port=23456/tcp
若开放了新端口号,此时会打印 yes
四、策略组允许新端口号
阿里云、腾讯云等很多云服务器商都有安全组策略,若防火墙开放了新端口号,但安全组没有开放新端口号,也是无法ssh登录的,因此还需要在安全组开放新端口号
登录 ECS 管理控制台,找到该实例,选择 网络和安全组
在安全组规则页面,单击添加安全组规则,根据实际的使用场景来定义安全规则,允许新配置的远程端口进行连接。
关于如何设置安全组参见 添加安全组规则
- 对象的序列化和反序列化
- java父类,子类静态块和构造方法的执行顺序
- 一键换肤的简单实现
- mybatis配置文件模板(增删查改)
- MD5加密代码(工具类)
- lambda+reduce的一句艰深代码
- CRT连接mysql数据库操作
- 基于springMVC拦截器实现操作日志统计
- datepicker小插件(日期时间 & 日期 & 月份)
- 封装好的MAP工具类和HBASE工具类
- JSP+ajax+springMVC+MayBatis处理excel上传导入
- 绚丽的javascript拾色器(不兼容IE8及以下)
- 魔波广告恶意病毒简析
- javascript生成.xls文件(兼容IE&Chrome&Firefox)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- C# ref实例讲解
- [Oracle 故障处理]记一次undo表空间使用率99%的问题
- C# 队列(Queue)
- 记住没:永远不要在 MySQL 中使用 UTF-8!
- C#多线程委托ParameterizedThreadStart应用
- [Python爬虫]使用Selenium操作浏览器订购火车票
- IDEA多线程调试
- 为什么wait和notify方法要在同步块中调用?
- 一文说清楚Mysql Innodb的B+树索引原理及其推理过程
- [Oracle数据泵全解析]expdp交互式命令行模式命令
- SpringBoot Feign文件上传
- Docker_000
- 如何应对面试官的JVM调优问题
- Docker_001
- Docker_002