使用腾讯云/阿里云服务器时,登录时经常会出现There were XX failed login attempts since the last success,并且这个数量经常成百上千,那么该如何预防境外IP的尝试登录和国内IP的尝试登录次数呢?
可以设置一个动态防火墙,自动监控IP所属的国家地区等,并记录登录时间、失败次数,将非正常访问的IP地址添加到防火墙中
屏蔽指定地区、国家的IP
- 建议先将ssh接收端口更改为非22端口
vi /etc/ssh/sshd_config
更改为其他端口 XX
并执行semanage port -a -t ssh_port_t -p tcp XX
再重启systemctl restart sshd.service
ssh登录时指定 -p 指定端口
1. 使用
项目链接:DynamicIpTables
在release中下载DynamicIpTables.tar
,内含可执行文件DynamicIpTables
和config.yaml
以下执行都是在CentOS 7.6的操作系统下执行的,其它操作系统可能需要自己重新编译为适合自己系统的DynamicIpTables
,参考第3点,另仅适合使用iptables作为防火墙表的系统
执行 nohup ./DynamicIpTables -c config.yaml &
就运行了
执行 tail -f dynamic_log.txt
可实时查看日志
secure_log: /var/log/secure log_file: /var/log/dynamiciptables.log allow_ip: - 127.0.0.1 - 202.197.74.82 - 119.28.22.215 rules: - port: -1 country: 中国 regionName: city: time: 120 count: 5 - port: -1 country: regionName: city: time: 1 count: 0
2 创建service自启动
可以nohup ./DynamicIpTables -c config.yaml &
启动,也可以创建service
vi /etc/systemd/system/dynamiciptables.service
,内容如下,其中执行路径改成自己的
[Unit] Description=dynamic ip tables daemon After=syslog.target network.target Wants=network.target [Service] Type=simple ExecStart=/path/to/DynamicIpTables -c /path/to/config.yml Restart= always RestartSec=1min [Install] WantedBy=multi-user.target
启动前应先将刚才nohup启动的进程kill掉,ps -aux| grep DynamicIpTables
获取到进程id再kill
3. 如果使用自己的服务器编译
pyinstaller -F DynamicIpTables.py
将会生成一个build和一个dist的文件夹
生成的可执行为文件在dist中
ps:运行时用ps查看进程会发现有两个进程,原因是当指明-F参数构建时,程序被解压缩到一个临时目录并从那里运行。第二个进程是实际的程序,而第一个进程是在程序退出或崩溃后清理临时目录。因此, 去除 -F参数时, 就可以显示一个进程, 但是如果只有一个进程,那么在崩溃的情况下就无法清理临时目录
监控/var/log/secure
文件变化,记录每个ip登录失败的次数和时间,在线查询IP所处国家和地区,符合设置规则的加入至防火墙(iptables)中,程序由Python编写