专业的编程技术博客社区

网站首页 > 博客文章 正文

如何对服务器进行安全加固

baijin 2025-02-09 11:14:44 博客文章 11 ℃ 0 评论

本次以只开ssh端口 8022 为例,最终效果如下

本次以树莓派为例,之所以选用树莓派(由于疫情导致产能跟不上,目前价格暴涨,可以考虑其它同类产品,如华硕的tinker board 2s), 是因为功耗小, 且是个完整的基于Debian的Linux系统.且有40针GPIO接口,后续可以控制硬件,如继电器、电机…

一. 开防火墙.

一定要开防火墙,只开启需要的端口,防止被扫描入侵.

Debian系列的Linux常用ufw,没安装的先安装

apt install ufw

开服务 ,#关服务换成disable 即可

ufw enable

加端口 ,删除端口在allow前加delete即可.

ufw allow 8022/tcp

查状态

ufw status

二. 屏蔽攻击IP

虽然上一步把非必要的端口关了, 但是开着的8022端口依然有被攻击的风险.

经常看下/var/log/auth.log 就能看出有不断尝试登录的日志,一查这些IP大部分是国外的。如下:

Aug 21 06:16:59 localhost sshd[15898]: Invalid user ubnt from 179.60.147.161 port 9172

18 Aug 21 06:16:59 localhost sshd[15898]: input_userauth_request: invalid user ubnt [preauth]

也可以用lastb 命令查看登录失败的.

support ssh:notty 59.1.115.65 Fri Aug 26 15:43 - 15:43 (00:00)

default ssh:notty 37.157.226.236 Fri Aug 26 13:30 - 13:30 (00:00)

user ssh:notty 98.143.104.200 Fri Aug 26 09:04 - 09:04 (00:00)

是不是惊出一身冷汗, 接下来就解决这个问题.

  • 解决思路

通过lastb读取一段时间的记录, 解析后把IP地址追加到/etc/hosts.deny文件中. 只要是在这个文件中的IP都会被直接拒绝连接.

可以用现成的DenyHost,python写的,安装后,配置,运行.(自行百度)

我嫌这玩艺配置起来麻烦,自己用go按上述思路写了简单的denyAttack,不用配置, 直接加参数运行.示例如下

/usr/local/bin/denyAttack -c 5 -qf "15" #一小时内超5次错误登录的IP,写入hosts.deny

/usr/local/bin/denyAttack -c 5 -qf "" #一天内超5次错误登录的IP,写入hosts.deny

/usr/local/bin/denyAttack -c 5 #10分钟内超5次错误登录的IP,写入hosts.deny

/usr/local/bin/denyAttack #10分钟内超5次错误登录的IP,写入hosts.deny

#-c 数量可以改. -qf是固定用法,参考上边任何一行即可

denyAttack文件的下载, 包括x64和arm的

链接:
https://pan.baidu.com/s/1r3OBDK8rUWrcEkHDkF3PoA 提取码: lto8

  • 实际操作

可以把命令加到定时器每10分钟运行一次,crontab -e

*/10 * * * * /usr/local/bin/writeAttackIpToHostsDeny -c 5 -qf "15" > /dev/null 2>&1

三. 设置复杂密码, 建议用密钥登录

1. 密码至少8位,包含字母(大小写)、数字、特殊符号

2. 最好禁用ssh密码登录. 修改/etc/ssh/sshd_config中的PasswordAuthentication no

3. 用密钥登录

客户端

ssh-keygen -t rsa -f ./id_rsa

#可以不用输入密码直接回车,来生成密钥

#会在当前目录自动生成id_rsa 和 id_rsa.pub 两个文件


服务端

#把客户端的id_rsa.pub的内容追加到服务端~/.ssh/authorized_keys 文件中


客户端登录

ssh -i ./id_rsa root@server.com -p 1022


注* 如果提示Permissions 0644 for './id_rsa' are too open. 请修改其权限为600.

chmod 600 ./id_rsa

注* centos系列思路是一样的. 只是命令或及相应日志文件稍有差别如下

防火墙可用firewall-cmd命令

查看ssh登录日志/var/log/secure

-----------------end-----------------

欢迎大神补充指正! 如有疑问请留言!

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表