本文档介绍 TencentOS Server 上常见服务(SSH、FTP、BIND、邮件)的安全加固方法,涵盖配置修改、访问控制、加密传输等方面的建议。请根据您实际的情况和需求调整以下设置。
SSH 安全加固
SSH 协议简介
SSH(Secure Shell)是一种使用客户机-服务器架构在两个系统之间提供安全通信的协议,允许用户远程登录到服务器主机系统。SSH 协议为两个不受信任的主机在不安全的网络上提供安全的加密通信。
TencentOS Server 提供 SSH 开源版本的实现,包含基础软件包 openssh、客户端软件包 openssh-clients 和服务端软件包 openssh-server,提供以下用户态工具:
工具 | 说明 |
ssh | SSH 客户端,用于远程登录服务器。 |
sshd | 存在于服务端的 SSH 守护进程。 |
scp | 基于 SSH 的安全远程文件复制程序。 |
sftp | 基于 SSH 的安全文件传输程序。 |
ssh-agent | 用于缓存私钥的身份验证代理。 |
ssh-add | 为 ssh-agent 添加私钥身份。 |
ssh-keygen | 生成、管理并转换 SSH 验证密钥。 |
配置文件
系统范围的 SSH 配置信息保存在
/etc/ssh/ 目录中。用户特定的 SSH 配置信息保存在用户主目录中的 ~/.ssh/ 中,主要文件如下:/root/.ssh/authorized_keys:用于保存已认证用户的公钥。/etc/ssh/ssh_config:SSH 客户端的全局配置文件。此文件中的设置将应用于系统上的所有用户。通常,该文件包含默认的连接设置。用户级别的配置文件(如 ~/.ssh/config)可以覆盖全局配置文件中的参数。/etc/ssh/sshd_config:SSH 服务器的主要配置文件。此文件定义了 SSH 服务器的行为和设置,如:端口号、root 登录选项、登录超时、密钥验证等。要更改 SSH 服务器设置,请编辑该文件并重启 SSH 服务。/etc/ssh/ssh_host_*key 和 /etc/ssh/ssh_host_*key.pub:这是 SSH 服务器的私钥和公钥文件,用于其身份验证和连接加密。文件名中的星号(*)可以是 rsa、ecdsa、ed25519 等不同类型的密钥。这些文件在服务器端生成,并在建立 SSH 连接时与远程客户端共享。SSH 连接的安全性基于这些密钥。安全加固案例
以下是一些安全加固建议。在系统中进行如下配置将增加您 SSH 服务的安全性,请根据您实际的情况和需求调整以下设置。
修改 SSH 默认端口
更改默认的 SSH 端口(22)以阻止基于端口的自动扫描。
1. 修改默认监听端口号
编辑
/etc/ssh/sshd_config 文件,找到并修改以下行:Port <custom_port_number>
将
<custom_port_number> 替换为您想要的自定义端口号。2. 调整 SELinux 端口标签
如果您的系统上运行了 SELinux,并设置为了
enforcing(TencentOS Server 默认配置),需要调整 SELinux 的策略以允许新的 SSH 端口。运行以下命令:sudo semanage port -a -t ssh_port_t -p tcp <custom_port_number>
3. 防火墙放行新端口
确保防火墙允许新端口上的 SSH 流量:
sudo firewall-cmd --add-port=<custom_port_number>/tcp --permanentsudo firewall-cmd --reload
4. 重启 sshd 服务
警告:
重启后 sshd 将监听新端口,原 22 端口不再接受连接。请您确认前述 SELinux 端口标签与防火墙放行均已配置完成,再执行重启;同时保持当前会话不断开,重启后先通过新端口验证 SSH 连接可正常建立,再断开当前会话。
sudo systemctl restart sshd
禁用 root 用户登录
禁止使用 root 用户远程登录,可以防止攻击者针对这个用户进行暴力破解攻击,同时限制了远程登录的权限。
修改
/etc/ssh/sshd_config 文件,修改以下配置。该配置可以降低被攻击的风险,同时可以帮助您更好地跟踪和审查在您的系统上执行的操作。PermitRootLogin no
警告:
若 sshd 配置存在错误,重启服务后可能无法建立新的 SSH 连接。请您在重启前执行
sudo sshd -t 验证配置语法,并保持当前会话不断开,重启后先确认新的 SSH 连接可正常建立,再断开当前会话。配置文件更新后,重启 sshd 服务:
sudo systemctl restart sshd
免密登录配置
以下操作均在客户端机器上进行。
1. 生成 SSH 公钥和私钥
ssh-keygen -t rsa
执行以上命令,将在当前用户的
/home/<username>/.ssh 目录下生成名为 id_rsa 的私钥文件和名为 id_rsa.pub 的公钥文件,-t 表示密钥类型是 rsa。2. 上传公钥
ssh-copy-id username@remote-server
这个命令将把本地计算机中的
id_rsa.pub 文件(即公钥)追加到远程服务器的 /home/<username>/.ssh/authorized_keys 文件中。如果该文件不存在,将自动创建。3. 验证
ssh username@server-ip
在本地计算机上验证是否可以免密登录。
FTP 安全加固
FTP 与 vsftpd 简介
FTP(File Transfer Protocol)是一种传统的、广泛使用的文件传输工具。在不需要身份验证的情况下(允许匿名用户连接到服务器)通过网络在服务器和客户端之间传输文件。FTP 在默认情况下是不安全的,因为它传输用户凭证和数据时没有对数据进行加密。
vsftpd(Very Secure File Transfer Protocol Daemon)是一个流行的、安全的、快速的、免费的 FTP 服务器软件,用于 Unix 和 Linux 类操作系统。它采用了许多安全和性能优化措施,因此广泛用于多种环境中,包括个人和企业服务器。
安装和启用
sudo dnf install vsftpdsudo systemctl enable vsftpdsudo systemctl start vsftpd
vsftpd 配置
编辑配置文件
/etc/vsftpd/vsftpd.conf,原始配置文件中可能包含以下参数,按照需求修改或添加以下配置:# 禁止匿名登录:只允许已验证的用户访问。anonymous_enable=NO# 启用本地用户的 FTP 访问。local_enable=YES# 开启写权限,用以创建/更新文件或目录。视需求决定是否开启。write_enable=YES# 允许基于 chroot 的安全性:将用户限制在其主目录。chroot_local_user=YES# 确保带有写权限的用户始终处于 chroot 环境。allow_writeable_chroot=YES# 启用用户登录信息的记录。xferlog_enable=YES# 监听:启用 pasv_min_port 和 pasv_max_port 之间的被动模式端口范围。pasv_enable=YESpasv_min_port=40000pasv_max_port=50000# 禁用 SSL/TLS 的隐式和显式连接,如果需要的话,# 还需要将 ssl_enable 关闭force_local_data_ssl=NOforce_local_logins_ssl=NOssl_enable=NO
FTP 服务相关防火墙设置
为 FTP 服务允许端口 21(默认情况下为 FTP 端口)以及被动模式端口范围。
sudo firewall-cmd --add-port=21/tcp --permanentsudo firewall-cmd --add-port=40000-50000/tcp --permanentsudo systemctl restart firewalld
配置 FTP 专用用户
创建新的用户和组,仅用于 FTP 访问,并限制其权限:
sudo groupadd ftp-userssudo useradd -m -g ftp-users -s /sbin/nologin <ftp_user>sudo passwd <ftp_user>
将用户 Shell 设为
/sbin/nologin 可禁止其交互式登录(如 SSH),仅保留 FTP 等非交互服务访问权限。使用 SFTP 替代 FTP
如要提高安全性,可以考虑使用 SFTP(Secure File Transfer Protocol)替代 FTP。SFTP 是一种基于 SSH 协议的安全文件传输方法,通过单个加密通道传输文件和命令,比基于明文的 FTP 更加安全。
BIND 安全加固
BIND 服务简介
BIND(Berkeley Internet Name Domain)服务是一个开源的 DNS(域名系统)服务器软件,用于将域名解析为 IP 地址,反之亦然。
限制对管理区域的查询
对于查询和操作 BIND 服务器的管理区域,应该限制访问权限。对 BIND 服务的管理区域进行访问限制主要是为了确保仅允许授权客户端对特定区域进行查询。这样可以防止未经授权的用户访问潜在敏感的 DNS 信息,以及减少 DDoS 攻击的威胁。例如,仅允许内部网络的客户端进行查询。编辑
/etc/named.conf,将以下内容添加到 options 块:options {...allow-query {localhost;192.168.0.0/24;};...};
在此示例中,仅允许本地计算机和 CIDR 范围为 192.168.0.0/24 的客户端查询。
限制区域传递
对 BIND 服务进行区域传递限制,是指仅允许特定的、经授权的辅助(secondary)DNS 服务器从主(primary)DNS 服务器获取和复制管理区域数据。通过限制区域传递(zone transfer),您可以确保敏感的 DNS 记录仅在可信任的服务器之间共享,从而增强网络安全。
为了实施这种限制,您需要在 BIND 的配置文件
/etc/named.conf 内修改相关区域(zone)的设置。具体操作是添加一个 allow-transfer 配置参数,仅指定允许接收区域传递的辅助 DNS 服务器的 IP 地址或地址范围。以下是一个区域传递限制的示例:zone "example.com" {type master;file "/etc/named/zones/db.example.com";allow-transfer {192.168.1.2;};};
在这个示例中,将区域传递限制为只允许 IP 地址为 192.168.1.2 的辅助 DNS 服务器接收
example.com 区域信息传递。禁用递归查询
递归解析是 DNS 服务器在响应查询时获取域名和 IP 地址映射的过程。当递归查询被禁用时,BIND 服务器将不再处理来自外部客户端的递归查询请求,不会追踪外部域名解析。禁用递归查询可以防止外部用户利用服务器进行攻击,诸如 DNS 放大攻击、DNS 缓存污染等。关闭递归查询还可以减轻服务器负担,从而提高其性能。
编辑
/etc/named.conf,将以下内容添加到 options 块即可禁止递归查询:options {...recursion no;...};
启用 DNSSEC
DNSSEC(Domain Name System Security Extensions,域名系统安全扩展)旨在为 DNS 查询提供额外的安全性。通过为 DNS 记录和查询添加数字签名(加密验证),DNSSEC 可以确保查询数据的完整性和源可靠性,使客户端能确认所接收到的 DNS 解析结果的真实性。
启用 DNSSEC 以提供额外的安全性。编辑
/etc/named.conf,将以下内容添加到 options 块:options {...dnssec-validation yes;...};
说明:
dnssec-enable 选项在 BIND 9.16 及以上版本已废弃并移除,无需配置。启用 DNSSEC 验证功能仅需保留 dnssec-validation yes; 即可。使用黑名单阻止恶意域名
通过创建一个黑名单文件,可以阻止特定的恶意域名。首先,在
/etc/named/ 目录下创建一个名为 named.blacklist 的文件。然后,在 /etc/named.conf 文件中,将以下内容添加到 options 部分:options {...response-policy { zone "blacklist"; };...};
接下来,在
/etc/named.conf 文件中添加以下内容:zone "blacklist" {type master;file "named.blacklist";allow-query { none; };};
对于要阻止的每个恶意域名,向
named.blacklist 文件中添加一行:bad-domain.example CNAME .
邮件服务安全加固
邮件服务简介
在 Linux 系统中,邮件服务涉及多个组件(邮件传输代理、邮件传递代理、IMAP/POP3 服务器和 Webmail)共同完成电子邮件的发送、接收、存储和检索。在 TencentOS Server 上,有许多不同的软件包可以为用户提供邮件服务,例如
postfix、sendmail 和 dovecot。在选择您的邮件服务软件包时,根据您的需求、偏好和环境综合考虑。postfix + dovecot 是目前流行的邮件服务软件组合,因为它提供了良好的安全性和性能。以下将基于这两个软件包列举一些实用的安全加固案例。安装 Postfix 和 Dovecot
在 TencentOS Server 上,可以使用
dnf 安装 Postfix 和 Dovecot:sudo dnf install postfix dovecot
安装完成后,设置开机自启并启动服务:
sudo systemctl enable postfix dovecotsudo systemctl start postfix dovecot
强制使用 SSL/TLS 加密
SSL/TLS 加密是一种安全技术,用于在客户端(如邮件客户端)与邮件服务器(如邮件传输代理 Postfix 和 IMAP/POP3 服务器 Dovecot)之间加密通信。它通过使用数字证书和密钥来实现安全连接,确保在传输过程中邮件内容以及用户的登录凭据不被窃听或篡改。
1. 生成 SSL/TLS 证书
以下示例使用 OpenSSL 生成自签名证书。您也可以使用可信 SSL 证书颁发机构提供的证书,例如 Let's Encrypt。使用 OpenSSL 生成自签名证书:
sudo openssl req -new -x509 -days 365 -nodes \\-out /etc/pki/tls/certs/mailserver.pem \\-keyout /etc/pki/tls/private/mailserver.keysudo chmod 0600 /etc/pki/tls/private/mailserver.key
生成证书期间,将被提示提供一些信息,如国家、组织等。
2. 配置 Postfix 使用 SSL/TLS
编辑 Postfix 配置文件
/etc/postfix/main.cf,添加或修改以下配置项:smtp_use_tls = yessmtpd_tls_security_level = maysmtpd_tls_auth_only = yessmtpd_tls_cert_file = /etc/pki/tls/certs/mailserver.pemsmtpd_tls_key_file = /etc/pki/tls/private/mailserver.keysmtpd_tls_loglevel = 1smtpd_tls_session_cache_timeout = 3600s
3. 配置 Dovecot 使用 SSL/TLS
编辑 Dovecot SSL 配置文件
/etc/dovecot/conf.d/10-ssl.conf,添加或修改以下内容:ssl = requiredssl_cert = </etc/pki/tls/certs/mailserver.pemssl_key = </etc/pki/tls/private/mailserver.key
其中
< 前缀为 Dovecot 配置语法,表示从指定文件中读取内容。4. 重启 Postfix 和 Dovecot 服务
sudo systemctl restart postfixsudo systemctl restart dovecot
配置邮箱认证
邮箱认证是用于验证用户身份的一种安全机制,通常由邮件传输代理(MTA,例如 Postfix)和 IMAP/POP3 服务器(例如 Dovecot)配合协同实现。为实现邮箱认证,您需要配置邮件传输代理(例如 Postfix)以使用诸如简单认证安全层(SASL)之类的认证机制。SASL 是一个通用的身份验证框架,支持各种身份验证协议(例如 PLAIN、LOGIN 等)。
1. Dovecot 配置
编辑
/etc/dovecot/dovecot.conf 文件,修改或添加以下行:auth_mechanisms = plain login
编辑
/etc/dovecot/conf.d/10-auth.conf 文件,找到以下行并取消注释,以禁用不安全的纯文本身份验证:disable_plaintext_auth = yes
2. Postfix 配置
编辑 Postfix 配置文件
/etc/postfix/main.cf,添加下列配置项:smtpd_sasl_auth_enable = yessmtpd_sasl_security_options = noanonymoussmtpd_sasl_local_domain = <myhostname>smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated, reject_unauth_destination
修改 Postfix 配置文件
/etc/postfix/master.cf,以将 Dovecot 用作邮件传输代理(MTA)的身份验证代理。找到以下部分:smtp inet n - n - - smtpd
在其后添加以下行,启用 SASL 认证:
-o smtpd_sasl_auth_enable=yes-o smtpd_sasl_type=dovecot