Linode安全设置

开通了Linode账号,部署完操作系统后,下面还有一件很重要的事要做,那就是linode的安全设置,以防止外部的攻击。以下命令以ubuntu为例。

增加一个新用户

Root用户是linux系统中具有最大权限的用户,root用户秘密泄露或者被黑客得到,那么后果可能十分严重,因为root用户可以做任何事情,让你的vps毁于一旦。基于这个原因,linode推荐创建一个新用户,代替root用户操作,实际上利用sudo命令,普通用户也可以运行只有root用户可以运行的命令。

1. 首先打开终端,例如putty,链接到你的linode账号。

2. 用一下命令创建一个新用户,用你希望创建的用户名代替命令中的example_user

adduser example_user

3. 将新增的用户加入管理员组

usermod -a -G sudo example_user

4. 退出root登陆

logout

就算添加好用户laoyi了,将来你ssh登录系统就可以ssh example_user@106.187.xxx.xxx 登录系统。

2、客户端生产ssh公钥私钥,配对连接,操作成功以后客户端访问服务器端,将不需要输入密码,这样可以减少暴力破解密码工具的可能性。当然您要将您的私钥保护好。

在客户端,执行: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

3、修改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/ssh restart

4、chattr +i /etc/passwd; chattr +i /etc/shadow,避免root密码被篡改。

5、chattr +a /var/log/messages,让系统日志只能增加数据,而不能删除也不能修改数据。

6、建立脚本做好重要数据的md5校验指纹比对(初期可不考虑)。

7、设置简易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

8、安装配置Fail2Ban,

Fail2Ban可以阻挡字典攻击您的服务器,当Fail2Ban检测到同一个ip企图攻击您的服务器,他将创建临时的防火墙规则来阻挡这些ip地址,Fail2Ban可以监控SSH,HTTP,SMTP等,默认情况下,Fail2Ban只监控SSH。具体安装Fail2Ban,以及配置,将在下篇专门讲解。