服务器安全基础指南
首先,VPS 服务器被黑怎么办?
第一, 10秒之内登录你的 VPS 提供商账号,关机。
第二,切断被黑机器的外网。
第三,在相同的 VPS 提供商重开一台机器,内网登录,备份重要的信息
第四,迁移数据
第五,报废之前被黑的 VPS
最近正好接触到一次服务器由于开启redis但没注意安全设置从而被提权的入侵的事件,以下是自己做的一些小总结。
此文章适用于系统版本为:Ubuntu 14.04 64位
Nginx 配置:
升级到稳定版
sudo apt-get update && sudo apt-get upgradesudo apt-get upgrade nginx
Nginx 目前在 Ubuntu 14.04 中稳定版本号是 1.4.6
可以通过在 VPS 上执行以下 curl 命令来查看信息:
curl -I http://localhost
返回大概是:
HTTP/1.1 200 OKServer: nginx/1.4.6 (Ubuntu)
这里直接显示了 Nginx 的版本号,可以通过配置隐藏:
sudo vi /etc/nginx/nginx.conf
在 http 部分添加:
http { ## # Basic Settings ## server_tokens off;}
重启 Nginx :
sudo service nginx reload
这样再次执行 curl 就可以看到隐藏了 Nginx 的版本号了:
curl -I http://localhost
HTTP/1.1 200 OKServer: nginx...X-Powered-By: PHP/5.5.9-1ubuntu4.14...
注意到上面 X-Powered-By: PHP/5.5.9-1ubuntu4.14 这一行暴露了 PHP 的版本号,所以我们来配置 php.ini 来隐藏之,即在 php.ini 文件中设置:
expose_php = Off
如果你的服务器的 php.ini 默认就隐藏了版本,那么恭喜你。
SSH 配置:
配置 ssh ,比如关掉密码认证式登录等:
sudo vi /etc/ssh/sshd_config
打开之后配置:
# 不允许空密码PermitEmptyPasswords no# 关闭密码验证登录,前提是你已经使用了 ssh 密钥验证方式登录PasswordAuthentication no# 如果你在服务器上手动添加了用户并将用户分配到 root 用户组,可以考虑禁止root用户登录PermitRootLogin no
重启 ssh :
sudo service ssh restart
iptables 配置
iptables 提供了一种可灵活配置安全策略防火墙框架,具体的原理可以看这篇文章:http://seanlook.com/2014/02/23/iptables-understand/
博主写文章很认真,推荐一下
开始之前,可以通过以下命令全新配置 iptables
iptables -F
注意上述命令会将你之前自己设置的过滤规则清空。
你可以查看 iptables 的相关资料,一条一条添加安全规则,也可以这样:
sudo vi /etc/iptables.up.rules
添加内容:
*filter# Accepts all established inbound connections -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT# Allows all outbound traffic# You could modify this to only allow certain traffic -A OUTPUT -j ACCEPT# Allows HTTP and HTTPS connections from anywhere (the normal ports for websites) -A INPUT -p tcp --dport 443 -j ACCEPT -A INPUT -p tcp --dport 80 -j ACCEPT# Allows SSH connections for script kiddies# THE -dport NUMBER IS THE SAME ONE YOU SET UP IN THE SSHD_CONFIG FILE -A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT# Now you should read up on iptables rules and consider whether ssh access# for everyone is really desired. Most likely you will only allow access from certain IPs.# Allow ping -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT# log iptables denied calls (access via 'dmesg' command) -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7# Reject all other inbound - default deny unless explicitly allowed policy: -A INPUT -j REJECT -A FORWARD -j REJECTCOMMIT
其中非常值得注意的是这三条:
# 443 通常是 ssl 的端口,如果 VPS 是作为一台web应用的服务器并且启用 https,你需要这个 -A INPUT -p tcp --dport 443 -j ACCEPT # 80 端口就不多说了 -A INPUT -p tcp --dport 80 -j ACCEPT # 这是 ssh 默认的 22 端口,开放给自己登录使用 -A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT
注意这里的 22 端口,你可以修改为其他的端口,并且关闭 22 端口。更有一种解决方案是:将生产机器 ssh 端口完全关闭,用一台同一子网下的跳板机,通过来登录目标生产机器。
其他的配置的话,你需要根据你的业务来具体配置相对应的安全策略。
写好这些配置项之后,告诉 iptables 你的配置在哪:
sudo iptables-restore shell 脚本来开机自启动:
sudo vi /etc/network/if-up.d/iptables
添加内容:
!/bin/sh
iptables-restore /etc/iptables.up.rules
给以可执行的权限:
chmod +x /etc/network/if-up.d/iptables
到这里,iptables 的基础设置就OK了。### 配置 Fail2BanFail2Ban 的工作原理是:通过监控系统的日志文件,并根据检测到的任何可疑的行为自动触发不同的防御动作,如将产生可疑行为的目标 ip 锁定等。安装:
sudo apt-get install fail2ban
打开配置文件,进行配置:
sudo vi /etc/fail2ban/jail.conf
写入:
[DEFAULT]
ignoreip = 127.0.0.1/8
bantime = 3600
maxretry = 3
destemail = email@yourdomain.com
action = %(action_mw)s
[ssh]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
到这里,就是我个人从上次被黑当中总结的一些基本的服务器安全,而至于群里 @little 大神说的跳板机的方案,容我再消化消化再尝试部署起来。### 总结**1.服务一些基本的安全配置得跟上。****2.关注安全圈的新闻和动态,及时升级软件和修复相关安全漏洞。****3.服务器上的服务,用哪个就看哪个,不用的坚决关掉。****4.服务器一旦被入侵,不急。关机,断网,备份,迁移,舍弃。**记住:The less information you provide, the more secure you are .#服务器、安全#
版权声明
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!