2023.05.08 ssh 防火墙

今天下午我不能从笔记本ssh到Virgo了,昨晚还正常,很可能是上午在配置wiki的时候做了什么导致的。 提示错了”operation timed out“,但是可以从笔记本ping通Virgo,开始怀疑Virgo的IP被禁了, 但Virgo仍然能ssh到另外的服务器上,可能是ssh server的问题。

下面的命令,检查ssh的状态,没发现问题。

 systemctl status ssh 
                
service ssh status

回顾我上午做了什么和ssh有关的事情。发现我运行了一条:

sudo ufw allow ssh 

我打开/安装了ssh的防火墙,难道我之前没有?

检查防火墙状态:

sudo ufw status 
其中没有我用的ssh的port号,添加相应的port号就恢复了!
sudo ufw allow XXXX 

顺手把默认的22给禁了。

sudo ufw deny 22 

我爱解决问题!

2023.07.08 未知IP暴力破解跑了7000多条试图ssh登录服务器

Ubuntu查看失败登录记录:

 sudo lastb
			
sudo lastb -n 30 #查看最新的30条
sudo lastb |awk ‘{print $3}’|sort |uniq -c #查看失败记录并统计次数。
sudo last #显示成功登录的信息
sudo cat /var/log/auth.log #因为开了一个每分钟执行一次的cron任务,此log基本被cron刷屏。

如何提高ssh登录安全系数:
1. 更改ssh默认端口。
2. 禁止root用户ssh登录。只允许某些user和group登录。
3. 禁止明码登录,使用RSA私钥登录,但现在工作站上用户太多,以及其它需要临时登录的情况,如果你不许要考虑这些,如下操作禁止明码登录。

sudo vi etc/ssh/sshd_config 
修改Port,linux端口1024以下是系统保留,从1024-65535是用户使用的。这三条都是在sshd_config文件中修改。修改完后重启ssd服务。
systemctl restart sshd 

4. 将恶意的IP放进/etc/hosts.deny,把允许的IP放进/etc/hosts.allow。
这里可以使用一些脚本和方法,定时一段时间,检查出恶意IP,然后自动放进 /etc/hosts.deny。
比如,在/etc/cron.hourly/文件夹中放一个脚本,每小时检查一次日志,链接超过10次拉黑。
 
				#! /bin/bash
				data=` cat /var/log/auth.log | grep "Failed password" | grep -v "times:" | grep -v "invaild user" | awk '{print $11}' | sort |uniq -c | awk 'print $2"="$1'`
				for i in $data
				do
				IP=`echo $i |awk -F= '{print $1}'`
				NUM=`echo $i |awk -F= '{print $2}'`
				echo $IP $NUM
				if [ $NUM -gt 10 ]; then
					EXIST=`grep $IP /etc/hosts.deny |wc -l`
					echo "$[EXIST]"
					if [$[EXIST] -eq 0 ];then
						echo "sshd:$IP:deny" >> /etc/hosts.deny
					fi
				fi
				done
			

1. 注意Ubuntu 20.04可以直接用,其它环境需要按实际情况修改。
2. 注意文件命名,不要加后缀和点,否则可能不会执行。

2023.07.08 周期性执行脚本的命令crontab

安装和启动cron


			安装:sudo apt-get install cron
			启动:service cron start
			重启:service cron restart
			停止:service cron stop
			检查状态:service cron status
			查询cron可用的命令:service cron
			检查Cronta工具是否安装:crontab -l
			使用帮助:man crontab
			列出当前用户的cron任务:crontab -l
			查看其他用户的cron任务:crontab -l -u username
			编辑cron任务:crontab -e
			* * * * * echo "test crontab is work or not" >> /var/www/html/testcrontab.txt 
			移除已计划的cron任务:crontab -r
			移除所有已计划的cron作业,且无需再次确认:crontab -ir

		
除了通过配置文件来处理计划cron作业之外,还有别的方法可以做到。如果你查看/etc目录,你会发现有这样的目录:cron.daily、cron.hourly、cron.monthly等等。因此,把cron脚本放入这些目录中,那么系统会根据这些目录名定时执行这些作业脚本的。

参考:https://blog.csdn.net/chszs/article/details/47276899

参考:

[]