跳至主要內容

vps服务器安全

wangdx大约 8 分钟

注意

    1. 不建议使用权限过高的管理面板比如某塔,更何况还是闭源

申请证书,配置代理,完全可以使用诸如 Nginx Proxy Manager,具有可视化面板,源代码开源,全球用户检验过的。 熟悉之后或者动手能力更强的可以手搓配置。

    1. 本文涉及的代码以 Debian/Ubuntu 举例,CentOS 及其他系统相应更改即可

系统更新

一些恶性漏洞必须通过更新得到修补

建议不要升级大版本/更新内核,除非你的是物理服务器;各种架构的 VPS 和云主机大版本升级或者更新内核可能出现问题(专家可以忽略)

#新机器到手, 应当立即进行软件包更新:
apt update && apt upgrade -y && apt dist-upgrade -y && apt full-upgrade -y && apt autoremove -y
#更新完成后建议重启一下:
reboot

注意

大版本升级/更新内核前务必备份重要数据!

SSH 安全

不要使用账户密码登录,一定使用密钥登陆

需要安装 Git 客户端 (地址:https://git-scm.com/)傻瓜式安装就可以(疯狂下一步)

#查看openssh版本
ssh -V
#查看错误信息
cat /var/log/auth.log
#查看支持的公钥类型
sudo sshd -T | egrep "pubkey"

#生成密钥
[root@linuxcool ~]# ssh-keygen -t ed25519

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 直接回车,以默认路径保存Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): 直接回车,不额外设置密钥密码
Enter same passphrase again: 直接回车,确认不额外设置密钥密码
Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: SHA256:tUB6SjLnvqM7p2l+bmHUZGNqUyyOPmXGyiMp3tC9xNA root@linuxcool.com The key's randomart image is: +---[RSA 2048]----+ | .. | | .oB | | +++Oo.. | | ..E@o.o . | | .++Bo.S . | |..o.*=o | |..o..+o. | | . .oo=. | | o*Xo. | +----[SHA256]-----+
#手动指定加密格式并添加注释信息,创建一个SSH密钥文件
[root@linuxcool ~]# ssh-keygen -t rsa -C "welcome to linuxcool.com"
Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): 直接回车,以默认路径保存 Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): 直接回车,不额外设置密钥密码
Enter same passphrase again: 直接回车,确认不额外设置密钥密码 Y
our identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: SHA256:OQodor0B83DoxbFOY+KUo0swrQAgo8tL3qIHA0t40gQ welcome to linuxcool.com The key's randomart image is: +---[RSA 2048]----+ |E. . | |+o.+ o | |*o@ X . | |BXo/ + . . | |*B+ * . S | |B.o + . . | |.* .. . | |. o | |.. | +----[SHA256]-----+
原文链接:https://www.linuxcool.com/ssh-keygen

root@homeper:~# ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (/root/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_ed25519
Your public key has been saved in /root/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:Oz9vlVSc/V+Lk9B65706S73aozXYI7KokMyN0XlTXwA root@homeper
The key's randomart image is:
+--[ED25519 256]--+
|           E.. .o|
|              ..+|
|           ..  o.|
|      . . ....o o|
|     . oSo  ooo.+|
|    o = .... =*o.|
|     * .o  ..=+*.|
|      .  oo =.+o=|
|       ....=.=*+o|
+----[SHA256]-----+

##1. 修改配置文件
vim  /etc/ssh/sshd_config

#端口配置
port 2208
#开启公钥
PubkeyAuthentication yes
#允许root
PermitRootLogin yes
#公钥位置
AuthorizedKeysFile      .ssh/public.home.key
#禁用密码登录
PasswordAuthentication no

#2. 创建配对密钥,复制到公钥文件
cd ~/.ssh/
vim public.home.key
more public.home.key
#3. 保存私钥,重启sshd /etc/init.d/ssh restart  | reboot
systemctl restart sshd
#4.用密钥链接ubuntu,第一次需要输入密钥的密码,选择登录用户

防火墙

  • 你的云服务器提供商提供了安全组/防火墙,比如 AWS 亚马逊,GCP 谷歌云,Oracle 甲骨文等等,基本不用另外安装防火墙

  • 商家默认没有安全组,你的鸡在裸奔。需要我们自己在 VPS 上配置防火墙, 比如 Debian/Ubuntu 使用 ufw:

iptables

ufw

ufw(Uncomplicated Firewall)是一个简化的、易于使用的 Linux 防火墙工具,旨在方便用户管理 iptables 防火墙规则。它为用户提供了一个直观且易于理解的命令行界面,使得配置防火墙规则变得更加简单。

ufw 的一些主要特点和功能:

  • 简化的防火墙管理:ufw 提供了一个简洁的命令行界面,让您能够轻松地添加、删除和修改防火墙规则。
  • 基于 iptables:ufw 是基于 iptables 的,因此它与 Linux 内核中现有的防火墙技术兼容。它实际上是 iptables 的一个友好的前端。
  • 允许和拒绝规则:您可以使用 ufw 创建允许和拒绝规则,以控制入站和出站流量。这让您可以精确地控制允许哪些连接进入或离开您的系统。
  • 放行特定端口、协议和 IP:ufw 允许您放行特定端口、协议(TCP 或 UDP)以及特定来源或目标 IP 地址的连接。
  • 限制特定 IP 访问:您可以使用 ufw 限制特定 IP 地址访问您的系统上的特定端口。
  • 日志记录:ufw 可以记录防火墙活动,这对于监视您的系统安全和解决网络问题非常有用。
  • 易于启用和禁用:ufw 可以轻松启用和禁用,让您在需要时可以迅速启用防火墙,或在进行系统维护时暂时关闭防火墙。

1.安装 ufw

# 安装ufw
sudo apt-get update
sudo apt-get install ufw
# 启动ufw
sudo ufw enable
# 设置为开机自启
sudo systemctl enable ufw

执行 sudo ufw status 查看当前状态,通常有 3 种状态:

  • Status: inactive(未启用):表示 UFW 没有启用,防火墙处于关闭状态。
  • Status: active(已启用):表示 UFW 已经启用,并且防火墙规则正在应用于系统。
  • Status: inactive (dead)(未启用且未运行):表示 UFW 已被禁用,并且防火墙未在系统中运行。

2.ufw 放行端口

# 将 <port> 替换为你要放行的具体端口号。例如,要放行 TCP 端口 80,可以执行 sudo ufw allow 80。
sudo ufw allow <port>
# 将 <port> 替换为端口号,<protocol> 替换为协议类型(如 tcp、udp)。例如,要放行 UDP 端口 53,可以执行 sudo ufw allow 53/udp。
sudo ufw allow <port>/<protocol>
#放行一个端口范围
#将 <start-port> 替换为起始端口号,<end-port> 替换为结束端口号,<protocol>为协议。
#例如,要放行 TCP 端口范围 8000 到 9000,可以执行sudo ufw allow 8000:9000/tcp
sudo ufw allow <start-port>:<end-port>/<protocol>

3.ufw 删除已经放行的规则或端口

  • 方法 1:通过规则号删除
#查看当前ufw的状态和现有规则:
sudo ufw status numbered

#确定您要删除的规则的编号,然后使用以下命令删除它,将[rule_number]替换为实际的规则编号
#例如,要删除编号为1的规则,运行: sudo ufw delete 1
sudo ufw delete [rule_number]
  • 方法 2:通过放行条件删除
#您还可以通过指定放行条件(例如端口和协议)来删除规则。例如,要删除允许TCP端口80的规则,您可以运行
#或者,如果要删除允许UDP端口5000的规则,您可以运行: sudo ufw delete allow 5000/udp
sudo ufw delete allow 80/tcp

##删除规则后,再次运行sudo ufw status以确认所选规则已从ufw中删除。
sudo ufw status

4.阻止某个特定的 IP

#使用以下命令阻止来自特定IP(例如123.57.22.204)的连接:
sudo ufw deny from 123.57.22.204

5.允许特定 IP 访问特定端口

#使用以下命令允许特定IP访问特定端口。
#将[ip_address]替换为要允许的实际IP地址,
#将[port_number]替换为要允许访问的实际端口号,
#将[protocol]替换为tcp或udp,具体取决于您要放行的协议

sudo ufw allow from [ip_address] to any port [port_number]/[protocol]

#例如,要允许IP地址192.168.1.10访问TCP端口22,您可以运行:
sudo ufw allow from 192.168.1.10 to any port 22/tcp

firewall

防火墙是 Linux 系统的主要的安全工具 ,可以提供基本的安全防护,在 Linux 历史上已经使用过的防火墙工具包括:ipfwadm、ipchains、iptables(即 Centos6 就是使用的 iptables),而在 firewalld 中新引入了 区域(Zone)这个概念。

以前的 iptables 防火墙是静态的,每次修改都要求防火墙完全重启,这个过程包括内核 netfilter 防火墙模块的卸载和新配置所需模块的装载等,而模块的卸载将会破坏状态防火墙和确立建立的连接,现在 firewalld 可以动态管理防火墙,firewalld 把 netfilter 的过滤功能集于一身。

特点

  • 1.firewalld 提供了支持 网络/防火墙区域(zone)定义网络链接以及接口安全等级的动态防火墙管理工具。
  • 2.支持 IPv4,IPv6 的防火墙设置以及以太网桥接。
  • 3.支持服务或者应用程序直接添加防火墙规则的接口。
  • 4.拥有运行时配置和永久配置两种选项。
#列出所支持的zone和查看当前的默认zone
firewall-cmd --get-zones
#默认使用区域
firewall-cmd --get-default-zone
#查看防火墙规则
firewall-cmd --list-all
查看规则状态
firewall-cmd --state
#加载规则
firewall-cmd --reload
#开放3306端口
firewall-cmd --add-port=3306/tcp --permanent
#开放网段
firewall-cmd --permanent --add-source=192.168.0.0/22
#移除规则
firewall-cmd --permanent --remove-source=192.168.0.0/22
#开放服务
firewall-cmd --permanent --add-service=http
#移除服务
firewall-cmd --permanent --remove-service=http
#添加服务
#cp ssh.xml tomcat.xm 添加模块
vim tomcat.xml
#systemctl restart firewalld.service
#firewall-cmd --add-service=tomcat --permanent
#开启12222端口
firewall-cmd -add-port=12222/tcp --permanent
cat /etc/firewalld/zones/public.xml
#删除规则
firewall-cmd --remove-port=12222/tcp --permanent
#允许192.168.0.142访问80端口
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.0.142" port protocol="tcp" port="80" accept"
#family  对哪个协议
#source address	源地址
#accept	允许
#drop	拒绝
#拒绝192.168.0.142访问80端口

firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.0.142" port protocol="tcp" port="80" drop"
#注:同一规则允许及拒绝时,效果为拒绝,不会跟iptables一样,没有先后顺序优先匹配,为全文匹配,拒绝大于允许

上次编辑于: