你以为你的vps很安全吗,先来跑两个命令瞅瞅:

查看尝试暴力破解机器密码的人

sudo grep "Failed password for root" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr | more

查看暴力猜用户名的人

sudo grep "Failed password for invalid user" /var/log/auth.log | awk '{print $13}' | sort | uniq -c | sort -nr | more

1.修改连接端口

vi /etc/ssh/sshd_config
找到#Port 22

删除注释,将22改成自己的端口,不容易被人发现的。比如999,5321等。
然后
service sshd restart

iptable放行

我们在设置新的非22端口之后,是否放行端口。有些时候服务器因为重启或者没有保存,导致自定义的SSH端口失效,我们需要检查或者重新设置放行。

/sbin/iptables -I INPUT -p tcp --dport 11222(你修改的端口) -j ACCEPT

/etc/init.d/iptables save

2. 设置免密登录

假设要登录的服务器机器为192.168.1.100,当前登录的linux机器为192.168.1.101。
首先在101的机器上生成密钥(如果已经生成可以跳过):
$ ssh-keygen -t rsa
一路回车即可。
然后在将生成的公钥复制到机器100上的~/.ssh/authorized_keys中,使用如下命令:
$ ssh-copy-id -i ~/.ssh/id_rsa.pub -p port root@192.168.1.100
root为需要登录到机器100上的身份,需要替换成需要的用户名。
windows系统下的securecrt免密码登录参考:
https://www.cnblogs.com/harrymore/p/8639331.html

关闭ssh的密码登录

vim /etc/ssh/sshd_config
在如上目录找到ssh服务的配置文件,将如下字段进行修改:
#PasswordAuthentication yes
//修改为如下内容:
PasswordAuthentication no
//使用命令重启ssh服务:
//ubuntu:
/etc/init.d/ssh restart
//centos7:
查看状态:
systemctl status sshd.service
启动服务:
systemctl start sshd.service
重启服务:
systemctl restart sshd.service
开机自启:
systemctl enable sshd.service

3. 限定登陆ip

比如我们在 /etc/hosts.allow中加入
all:218.24.129.
这样就会允许来自218.24.129.*域的所有的客户来访问。这只是举个例子,实际上,系统默认状态 下,都是能用这些网络服的

如果我们在 /etc/hosts.deny中加入,就限制了来自218.24.129.*域的所有的所有的IP。
all:218.24.129.

如果我们在 /etc/hosts.deny中加入
all:218.24.129.134,这样就限制了所有在218.24.129.134中的所有的用户的访问。

或者:
sshd:all

当hosts.allow和 host.deny相冲突时,以hosts.allow设置优化。

设置好后,要重新启动
/etc/rc.d/init.d/xinetd restart
/etc/rc.d/init.d/network restart
/etc/init.d/networking restart(ubuntu)

4. 禁用Linux多余端口(ubuntu)

centos设置参考文末

4.1 查看防火墙激活状态

ufw status
如果终端显示防火墙未激活(理论上都应该是这样,因为 ufw 是系统内置的。)
ufw enable

4.2 我们使用如下命令来添加规则:

ps:一定要添加好规则后再启动防火墙
ufw allow ssh
ufw allow http
ufw allow https
//请务必开启 ssh 端口,如果你不是标准端口,请记得开启,否则ssh就连接不上了!
ufw allow from your-login-ip-addr to any port you-set-port proto tcp
ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)?
y
//会提示你影响ssh 连接,但只要提前加入了规则,就不会影响。

删除规则

要首先删除其编号的 UFW 规则,您需要列出规则并找到要删除的规则编号:

sudo ufw status numbered

该命令将为您提供所有防火墙规则的列表,包含了规则的编号:

输出示例

Status: active

To                        Action      From
--                        ------      ----

[ 1] 22/tcp ALLOW IN Anywhere
[ 2] 80/tcp ALLOW IN Anywhere
[ 3] 443/tcp ALLOW IN Anywhere
[ 4] 8069/tcp ALLOW IN Anywhere

知道规则编号后,请使用 ufw delete 命令后跟要删除的规则编号。

例如,要删除编号为 4 的规则,您可以键入:

sudo ufw delete 4

4.3 开机启动

对了!记得使用如下命令来导出配置,然后配置启动加载,否则重启后各种规则就消失不见啦!

//导出配置,以后可以直接编辑;
iptables-save > /etc/iptables.up.rules
//导入配置
iptables-restore < /etc/iptables.up.rules
编辑之后就可以导入立即生效!
vim /etc/network/interfaces
auto eth0
iface eth0 inet dhcp
//最后这一条就是要添加进的命令!
pre-up iptables-restore < /etc/iptables.up.rules

5. 创建非root用户

adduser 新用户名
passwd 新用户名密码
su 新用户名

6.设置密码失效时间

强制定期修改密码,减少密码被泄漏和猜测风险,使用非密码登陆方式(如密钥对)请忽略此项。
加固建议
使用非密码登陆方式如密钥对,请忽略此项。在 /etc/login.defs 中将 PASS_MAX_DAYS 参数设置为 60-180之间,如:
PASS_MAX_DAYS 90
需同时执行命令设置root密码失效时间:
chage --maxdays 90 root

7.设置SSH空闲超时退出时间

可降低未授权用户访问其他用户ssh会话的风险
加固建议
编辑/etc/ssh/sshd_config,将ClientAliveInterval 设置为300到900,即5-15分钟,将ClientAliveCountMax设置为0-3之间。
ClientAliveInterval 600
ClientAliveCountMax 2

8.设置密码修改最小间隔时间,限制密码更改过于频繁

加固建议
在 /etc/login.defs 中将 PASS_MIN_DAYS 参数设置为7-14之间,建议为7:
PASS_MIN_DAYS 7
需同时执行命令为root用户设置:
chage --mindays 7 root

9.密码复杂度检查

检查密码长度和密码是否使用多种字符类型
加固建议
1、安装PAM的cracklib模块,执行命令:
apt-get update&&apt-get install libpam-cracklib
2、编辑/etc/pam.d/common-password,在password requisite pam_cracklib.so开头的这一行配置minclass(至少包含小写字母、大写字母、数字、特殊字符等4类字符中的3类或4类)设置为3或4,即在行末尾加上参数minclass=3;在password [success=1 default=ignore] pam_unix.so开头的这一行增加配置minlen(密码最小长度)设置为9-32位,建议为9,即在行末尾加上参数minlen=9

10.强制用户不重用最近使用的密码,降低密码猜测攻击风险

加固建议
编辑/etc/pam.d/common-password,在password [success=1 default=ignore] pam_unix.so开头的这一行增加配置remember设置为5-24之间,建议为5,即在行末尾加上参数remember=5

11.设置用户权限配置文件的权限

加固建议
执行以下5条命令
chown root:root /etc/passwd /etc/shadow /etc/group /etc/gshadow
chmod 0644 /etc/group
chmod 0644 /etc/passwd
chmod 0400 /etc/shadow
chmod 0400 /etc/gshadow


日常检查

第一点,检查用户行为记录。

more /var/log/secure
who /var/log/wtmp
通过以上两个命令可以检查VPS是否有用户登录过的记录,第二个命令是登陆VPS的IP记录。如果有不是自己的IP登陆,那说明我们VPS有安全问题,需要检查文件。

第二点,检查网页文件是否有被修改过的痕迹。

find /home/wwwroot/ -name "*.php" -mtime -5

以上的意思是检查wwwroot目录下是否有PHP文件后缀的文件在5天之内被修改过。如果有就会有列表展示出来。这两个方法应该可以检测我们的Linux VPS的安全问题。

禁用Linux多余端口及ip

firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" \
source address="192.168.0.4/24" service name="http" accept"

仅允许部分IP访问本机端口配置
firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" \
source address="192.168.0.4/24" \
port protocol="tcp" port="443" accept"

统计 TCP连接数 命令:
netstat -an |grep 'ESTABLISHED' |grep 'tcp' |wc -l
端口控制
netstat -apn | grep 443
定期检查tcp连接:
netstat -na|grep ESTABLISHED
封自己不熟悉的ip:
firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='118.31.180.41' reject"
生效
firewall-cmd --reload
其他命令:

#查看firewall状态,LINUX7默认是安装并开启的;
firewall-cmd --state
#安装
yum install firewalld

#启动
systemctl start firewalld 
#设置开机启动
systemctl enable firewalld
#关闭
systemctl stop firewalld
#取消开机启动
systemctl disable firewalld
#允许端口:3389
firewall-cmd --permanent --add-port=3389/tcp
#禁止IP(123.56.161.140)访问机器
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address="123.56.161.140" drop'
#禁止一个IP段,比如禁止123.56.*.*
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address="123.56.0.0/16" drop'
#禁止一个IP段,比如禁止123.56.161.*
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address="123.56.161.0/24" drop'
#禁止机器IP(123.56.161.140)从防火墙中删除
firewall-cmd --permanent --remove-rich-rule='rule family=ipv4 source address="123.56.161.140" drop'
#允许http服务(对应服务策略目录:/usr/lib/firewalld/services/)
firewall-cmd --permanent --add-service=http
#关闭http服务(对应服务策略目录:/usr/lib/firewalld/services/)
firewall-cmd --permanent --remove-service=http

#允许端口:1-3389
firewall-cmd --permanent --add-port=1-3389/tcp
#关闭放行中端口:3389
firewall-cmd --permanent --remove-port=3389/tcp
#查看firewall的状态
firewall-cmd --state        
#查看防火墙规则(只显示/etc/firewalld/zones/public.xml中防火墙策略,在配置策略前,我一般喜欢先CP,以后方便直接还原)
firewall-cmd --list-all 
#查看所有的防火墙策略(即显示/etc/firewalld/zones/下的所有策略)
firewall-cmd --list-all-zones 
#重新加载配置文件
firewall-cmd --reload
#更改配置后一定要重新加载配置文件:
firewall-cmd --reload

linode不想走ipv6浪费流量:
https://www.linode.com/community/questions/17409/how-do-i-remove-my-ipv6-from-my-linode

更多参考:

购买了VPS之后你应该做足的安全措施


https://zhuanlan.zhihu.com/p/26282070