内容转自 做好VPS的基础安全防护工作
使用linode VPS也有好长一段时间了,爱好linux也有很久好久了,自从2004年自己买了笔记本后就尝试安装各种linux发行版,包括FreeBSD这样的unix鼻祖,不过当时仅仅把爱好停留在装系统上面,并没有对linux网络服务器做深入的研究。
很多朋友认为买了vps把系统安装上去,环境搭建好就万事大吉了,实际上并非如此,网络一直是不安全的,我们只能尽我们最大的努力做好基础的安全防护工作,尽可能的减少被攻击的可能,尽量减少非人为因素宕机的可能。
直到自己真正的使用linux服务器后,才系统的对linux进行了学习,我的知识来源主要是鸟哥的linux私房菜基础版第三版以及鸟哥的linux私房菜服务器第三版。以下是我平时维护自己vps以及帮个别朋友维护linux服务器的一点心得,如何做好VPS的基础安全防护?
在linode新手起步教程里,我们学习了如何安装liunx操作系统,重启linode vps,执行一些基本的系统管理任务。现在我们来进一步做好VPS的安全工作,以防非法入侵。您会学习到如何启动防火墙(iptables),设置SSH安全访问密钥,自动ban某些非法ip(Fail2ban)。当然这都是非常基础的安全防护工作。
添加一个普通用户
参考linux添加用户useradd命令说明,添加一个普通用户。
比如我在root用户登录的情况下,新增一个laoyi用户:
useradd laoyi
passwd laoyi
就算添加好用户laoyi了,将来你ssh登录系统就可以ssh laoyi@106.187.xxx.xxx登录系统。
ssh公钥私钥
客户端生产ssh公钥私钥,配对连接,可参考http://www.linode.im/1573.html,操作成功以后客户端访问服务器端,将不需要输入密码,这样可以减少暴力破解密码工具的可能性。当然您要将您的私钥保护好。
在客户端,执行:ssh-keygen,产生公钥密钥,
将公钥传至服务器端,scp ~/.ssh/id_rsa.pub laoyi@106.187.xx.xx,
在服务器端,
mkdir .ssh
mv id_rsa.pub .ssh/authorized_keys
chown -R laoyi:laoyi .ssh
chmod 700 .ssh
chmod 600 .ssh/authorized_keys
修改ssh配置和端口
禁止root管理员直接登录linux服务器。root帐号就是玉皇大帝,掌管着linux服务器的生杀大权,如果一不小心误操作,那后果是很严重的,建议添加个普通的linux用户帐号,如果需要用root帐号的时候,su或者sudo可以获得root的管理员权限。另外更重要的是,现在总有些无聊的人猜密码,如果你的root密码设置的过于简单,那被他人用软件猜出root密码的概率较高,不幸中弹,基本你的linux服务器就毁了。。
vi /etc/ssh/sshd_config
,将端口默认的22改成其他端口;
将密码认证设置成NO:PasswordAuthentication no;
同时将root直接登录系统取消:PermitRootLogin no
重启ssh服务:/etc/init.d/sshd restart
避免root密码被篡改
chattr +i /etc/passwd; chattr +i /etc/shadow
,避免root密码被篡改。
让系统日志只能增加数据
chattr +a /var/log/messages
,让系统日志只能增加数据,而不能删除也不能修改数据。
md5校验指纹比对
建立脚本做好重要数据的md5校验指纹比对(初期可不考虑)。
设置简易iptables防火墙
开启iptables防火墙进行软防。很多vps厂家为了减少成本,比如linode是裸机,本身是没有任何硬件防护的,此时iptables软防就特别重要,建议把不用的端口服务都禁掉。
看看iptables是否开启,默认防火墙规则都是空的,也就是不管事的。
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
需要我们自己建立防火墙规则:
vi /etc/iptables.firewall.rules
*filter
# Allow all loopback (lo0) traffic and drop all traffic to 127/8 that doesn’t use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT -d 127.0.0.0/8 -j REJECT
# Accept all established inbound connections
-A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
# Allow all outbound traffic – you can modify this to only allow certain traffic
-A OUTPUT -j ACCEPT
# Allow HTTP and HTTPS connections from anywhere (the normal ports for websites and SSL).
-A INPUT -p tcp –dport 80 -j ACCEPT
-A INPUT -p tcp –dport 443 -j ACCEPT
# Allow SSH connections
#
# The -dport number should be the same port number you set in sshd_config
#
-A INPUT -p tcp -m state –state NEW –dport 22 -j ACCEPT
# Allow ping
-A INPUT -p icmp -m icmp –icmp-type 8 -j ACCEPT
# Log iptables denied calls
-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 REJECT
COMMIT
以上防火墙规则只开启了http(80端口),https(443端口),ssh(22端口),根据您的服务器开启服务情况,请自己修改防火墙规则。
让防火墙规则生效:iptables-restore < /etc/iptables.firewall.rules
然后再查看防火墙是否生效:iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all – anywhere anywhere
REJECT all – anywhere 127.0.0.0/8 reject-with icmp-port-unreachable
ACCEPT all – anywhere anywhere state RELATED,ESTABLISHED
ACCEPT tcp – anywhere anywhere tcp dpt:www
ACCEPT tcp – anywhere anywhere tcp dpt:https
ACCEPT tcp – anywhere anywhere state NEW tcp dpt:ssh
ACCEPT icmp – anywhere anywhere icmp echo-request
LOG all – anywhere anywhere limit: avg 5/min burst 5 LOG level debug prefix `iptables denied: ‘
REJECT all – anywhere anywhere reject-with icmp-port-unreachable
Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all – anywhere anywhere reject-with icmp-port-unreachable
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all – anywhere anywhere
接下来我们需要设置下只要开机防火墙就开启服务:
cd /usr/local
mkdir virus
vi firewall
#!/bin/sh
/sbin/iptables-restore < /etc/iptables.firewall.rules
chmod +x firewall
vi /etc/rc.d/rc.local
/usr/local/virus/firewall
安装配置Fail2Ban
Fail2Ban可以阻挡字典攻击您的服务器,当Fail2Ban检测到同一个ip企图攻击您的服务器,他将创建临时的防火墙规则来阻挡这些ip地址,Fail2Ban可以监控SSH,HTTP,SMTP等,默认情况下,Fail2Ban只监控SSH。具体安装Fail2Ban,以及配置,将在下篇专门讲解。