1、编写一个脚本,实现每5分钟检查一次,如果发现通过ssh登录失败次数超过10次,自动将此远程IP放入Tcp Wrapper的黑名单中予以禁止防问。
代码:
[root@wjl ~]# vim /scripts/test/loginck.sh
#!/bin/bash
#
ip_list()
{
#取出所有通过ssh远程登录系统的IP
cat /var/log/secure | grep "Failed password" | grep -o "\([[:digit:]]\+\.\)\{3\}[[:digit:]]\+"
}
for login_ip in $(ip_list | sort -u); #sort -u 将列表中的重复IP去除,相当于uniq命令
do
if [ $(ip_list | sort -nr | uniq -c | grep $login_ip | awk '{print $1}') -gt 10 ];
then
echo "sshd:$login_ip" >> /etc/hosts.deny
echo "Warning:$login_ip is illegal ip,remote connection is denied"
else
echo "$login_ip: legal ip!"
continue
fi
done
制定计划任务:(每5分钟检查一次)
[root@wjl ~]# crontab -e
*/5 * * * * /bin/bash /scripts/test/loginck.sh
执行脚本结果:
[root@wjl ~]# bash /scripts/test/loginck.sh
192.168.10.1: legal ip
Warning:192.168.10.20 is illegal ip,remote connection is denied
[root@wjl ~]# cat /var/log/secure | grep "Failed password" | grep -o "\([[:digit:]]\+\.\)\{3\}[[:digit:]]\+" | sort -nr | uniq -c
3 192.168.10.1
12 192.168.10.20 #此ip登录次数为12次
注:(1)sort -u #取出重复的行,相当于uniq命令
(2)/etc/hosts.deny 文件中记录了本机上支持libwrap库且基于tcp协议的部分禁止被访问的服务。(Tcp Wrapper服务程序所依赖的拒绝服务的配置文件)
(3)大多数情况下/var/log/secure 文件中记录了登录系统的远程IP的所有行为,无论密码输入正确还是失败均会被记录在此文件中。若文件过大,则说明有人通过暴力破解的方式登录该系统。
2、配置magedu用户的sudo权限,允许magedu用户拥有root权限
visudo是编辑/etc/sudoers文件的命令行工具,其具有如下特性:
(1)锁定文件,避免多人同时编辑sudoers文件;
(2)检查文件中语法的完整性;
(3)检查解析错误,避免错误输入。
[root@wjl ~]# visudo #用于直接编辑/etc/sudoers文件的命令
...
98 root ALL=(ALL) ALL
#大概在99行的位置添加如下内容
99 magedu ALL=(ALL) ALL
...
格式:用户 主机=(用户身份) 命令
用户:要设定权限的用户
主机:指定用户在哪台主机上被设定了权限(指定主机时可以是主机名或主机IP)
用户身份:指定用户在哪个主机上要以谁的身份去运行命令
命令:设定用户可以执行的命令
权限设置验证:
[root@wjl ~]# su - magedu
[magede@wjl ~]# sudo cat /etc/shadows #普通用户要运行root用户权限时,需要加sudo才能运行
...
postfix:!!:18230::::::
sshd:!!:18230::::::
tcpdump:!!:18230::::::
magedu:!!:18504:0:99999:7:::