当前位置: 首页 > 科技观察

防止服务器成为bot的对策

时间:2023-03-22 01:41:09 科技观察

在公网中,总有人试图通过暴力破解密码字典的方式登录到你的服务器。如果您不相信我,请查看日志文件大小du-sh`ls/var/log|grepbtmp,存储ssh登录失败的记录。文件越大/增长越快,意味着你的服务器有被他人暴力破解的危险!为了避免这种危险,必须做两件事:修改默认的SSH端口,使用强密码,不想往后看废话就跳过。事实上,在整个网络空间中存在着许多弱口令服务器。假设弱口令服务器的用户名为root,密码为123456,SSH登录端口默认为22。我有一台服务器,它一直使用密码字典来使用弱密码登录这些机器。登录成功的机器以肉鸡(傀儡)的身份继续登录其他机器。假设一台服务器每天登录2次,那么我有三台机器(包括你自己的),第二天是6+3=3^2=9,第三天是18+9=3^3=27,第N天是3^N。看到肉鸡/傀儡服务器是不是呈指数增长!为什么总是有人登录别人的机器来获取肉鸡?如果我有很多来自世界各地的肉鸡,那就有更多的玩法A:你不喜欢什么网站?操纵这些傀儡机器不停地请求网站,让别人无法使用,服务瘫痪,这就是传说中的DDoS。如果你想赚点小钱,偷偷挖矿是你最好的选择。肉鸡这么多,虽然每台机器的计算能力都不是很好,但是组合起来也是不容小觑的。这种肉鸡俗称矿鸡当代理?我不会深入探讨这个话题。在中国大陆算是敏感话题了……窥探肉鸡主人的数据……满足窥探欲望。肉鸡那么多,说明你的IP那么多。拥有大量IP可以做什么?又是一个浩大的话题……1.基础知识/var/log/wtmp用于记录登录成功的用户信息,是一个二进制文件,只能通过last命令查看。2100.87.41.98FriFeb1511:38-down(01:35)rootpts/1100.87.41.98FriFeb1511:38-down(01:35)rootpts/0100.87.41.98FriFeb1511:38-down(01:35)查看前十名恶意登录尝试IP:sudolastb|awk'{print$3}'|awk'{++S[$NF]}END{for(ainS)printa,S[a]}'|sort-rk2|head检查恶意IP登录尝试次数:lastb|awk'{print$3}'|sort|uniq-c|sort-n当然,如果要清理这个日志,在创建rm-rf/var/log/btmptouch/var/log/btmp之前删除/var/log/btmp用于记录登录失败的用户信息,是一个二进制文件,只能通过lastb命令查看。166SatFeb1602:08-02:08(00:00)ejabberdssh:notty123.207.233.84SatFeb1602:08-02:08(00:00)rsyncssh:notty157.230.102.166SatFeb1602:08-02:08(00:00)/var/log/lastlog用于记录用户的历史登录状态。它是一个二进制文件,只能通过lastlog命令查看。用户名PortFromLatestrootpts/0100.87.41.98SatFeb1601:28:34+00002019bin**Neverloggedin**daemon**Neverloggedin**adm**Neverloggedin**/var/run/utmp用于记录当前登录用户的信息。是二进制文件,只能who命令使用查看rootpts/02019-02-1601:28(100.87.41.98)2.修改SSH默认端口环境:CentOS7步:添加SSH端口->>重启sshd服务-->>添加防火墙规则-->>尝试新端口登录-->>关闭原来的22端口1.添加新的SSH端口(column:1000)vi/etc/ssh/sshd_config找到Port22这一行,去掉前面的注释,加上一行Port1000,如下,这样做的目的是为了防止新端口无法登录,旧端口无法使用!Port22Port1024#AddressFamilyany#ListenAddress0.0.0.0#ListenAddress::2。重新启动sshd服务。如果是CentOS7,使用systemctlrestartsshd查看端口是否有效。可以使用systemctlstatus如果sshd是CentOS7之前的系统,重启后使用/etc/init.d/sshdrestart或者servicesshdrestart测试本地端口是否连通,telnet127.0.0.110003。添加防火墙规则。如果是iptables防火墙,执行以下命令添加规则iptables配置文件位置/etc/sysconfig/iptables添加1000端口规则iptables-AINPUT-mstate--stateNEW-mtcp-ptcp--dport1000-jACCEPT保存规则serviceiptablessave重启服务serviceiptablesrestart如果防火墙是Firewall,参考以下步骤:首先检测防火墙是否开启,enable返回值running,否则不运行firewall-cmd--state如果没有启用,则需要启用systemctlstartfirewalldsystemctlenablefirewalld如果启用,则进入下一步查看防火墙的default和activezones(区域),看两个命令的返回值是否包含public,如果是,则为正确的firewall-cmd--get-default-zonefirewall-cmd--get-active-zonesportopening为了防止出错,22个端口一起开和临时开的区别是永久firewall-cmd--permanent--zone=public--add-port=22/tcpfirewall-cmd--permanent--zone=public--add-port=1000/tcpfirewallreloadfirewall-cmd--reload查看暴露的端口firewall-cmd--permanent--list-portfirewall-cmd--zone=public--list-all4。尝试用新的端口登录,尝试用1000端口登录,看看能不能成功!5、关闭原来的22端口,参考上面的操作,先把ssh配置文件中的22端口去掉,重启sshd服务,再配置防火墙去掉22端口,重启防火墙!我不会在这里详细介绍。6、将弱密码修改为强密码,输入修改密码命令passwd。此时系统提示修改root用户密码。新密码:输入密码两次,按回车键。请注意,重新键入新密码:passwd:allauthenticationtokens已成功更新。7.推荐:shell随机密码生成函数:生成随机密码($1位)#echo$(getRandomPwd10)#echo$(getRandomPwd)getRandomPwd(){num=32if[$#==1];thennum=$1fiecho"$(date+%s)$(shuf-i10000-65536-n1)"|sha256sum|base64|head-c$num;echo}8.Extension虽然修改上面的端口和密码可以大大提高安全性,但在某些情况下端口或密码不能修改。这时候可以推荐使用DenyHosts或者fail2ban,可以封禁大量尝试登录的IP。或者可以用最简单的方法查看前十名尝试恶意登录的IP,然后使用防火墙禁止它。这里只是一个想法。