操作系统为CentOS7
A-1 任务一 登录安全加固(Windows, Linux)
请对服务器 Windows、Linux 按要求进行相应的设置,提高服务
器的安全性。
1.密码策略(Windows, Linux)
a.最小密码长度不少于 13 个字符;
b.密码必须符合复杂性要求。
步骤1:安装libpwquality
包
首先,确保你已经安装了libpwquality
包,这是用于密码策略配置的工具。
yum install libpwquality
步骤2:编辑/etc/security/pwquality.conf
文件
接下来,需要编辑/etc/security/pwquality.conf
文件来设置密码策略。
vi /etc/security/pwquality.conf
在文件中添加或修改以下内容:
minlen = 13
minclass = 4
minlen
参数设置最小密码长度,这里我们设置为13。minclass
参数设置密码复杂性要求。值为4表示密码必须包含至少一个小写字母、大写字母、数字和特殊字符。
步骤3:编辑/etc/pam.d/system-auth
文件
接下来,需要配置PAM(可插入认证模块)来使用这些策略。编辑/etc/pam.d/system-auth
文件:
vi /etc/pam.d/system-auth
找到以下行,并添加参数(不论先后顺序,ucredit\lcredit\dcredit\ocredit
):
password requisite pam_pwquality.so try_first_pass retry=3 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1
参数解释
-
password
: 这是 PAM(可插入认证模块)中的一个管理组,表示这个规则适用于密码管理。 -
requisite
: 这是 PAM 控制标志之一,表示如果此模块失败,则立即返回失败状态,并且不调用堆栈中剩余的模块。简单来说,如果pam_pwquality.so
模块未能通过认证,整个认证过程将立即终止。 -
pam_pwquality.so
: 这是具体执行密码质量检查的模块。pwquality
模块用于强制执行密码复杂性要求。 -
try_first_pass
: 这个选项告诉 PAM 尝试使用用户第一次输入的密码。如果第一次输入的密码不符合策略要求,PAM 会提示用户重新输入。 -
retry=3
: 这个选项允许用户有三次机会输入符合要求的密码。如果用户连续三次输入的密码都不符合策略要求,认证将失败。 -
ucredit=-1
: 这个选项表示密码中必须至少包含一个大写字母。ucredit
的负值表示需要多少个大写字母。 -
lcredit=-1
: 这个选项表示密码中必须至少包含一个小写字母。lcredit
的负值表示需要多少个小写字母。 -
dcredit=-1
: 这个选项表示密码中必须至少包含一个数字。dcredit
的负值表示需要多少个数字。 -
ocredit=-1
: 这个选项表示密码中必须至少包含一个特殊字符。ocredit
的负值表示需要多少个特殊字符。
A-2 任务二 Nginx 安全策略(Linux)
进入配置文件 /etc/nginx/nginx.conf
vi /etc/nginx/nginx.conf
3.禁止目录浏览和隐藏服务器版本和信息显示;
要在 Nginx 中实现这些安全策略,需要修改 Nginx 配置文件。
(1). 禁止目录浏览
在 Nginx 配置文件中(通常是 /etc/nginx/nginx.conf
或者某个包含特定站点配置的文件),设置 autoindex
指令为 off
。
在 http
块中添加以下配置来禁止目录浏览
autoindex off;
(2). 隐藏服务器版本和信息显示
在 http
块中添加以下配置来隐藏服务器版本:
server_tokens off;
4.限制 HTTP 请求方式,只允许 GET、HEAD、POST;
/etc/nginx/conf.d/default.conf
是 Nginx 的默认配置文件,可以在其中添加或修改配置。将 if
语句写入该文件,以限制除了 GET、HEAD 和 POST 之外的所有请求方法,并返回 501 Not Implemented 状态码,是一种常见的做法。
以下是如何修改 /etc/nginx/conf.d/default.conf
文件的示例:
- 打开
default.conf
文件:
vi /etc/nginx/conf.d/default.conf
- 在
server
块中添加以下配置:
server {
listen 80 default_server;
server_name _;
# 其他配置...
# 限制请求方法
if ($request_method !~* ^(GET|HEAD|POST)$ ) {
return 501;
}
# 其他配置...
}
- 保存并关闭文件。
5.设置客户端请求主体读取超时时间为 10;
添加 client_body_timeout
指令:在 http
块中添加以下配置:
http {
# ... 其他全局配置 ...
client_body_timeout 10s; # 设置全局超时时间
# ... 其他全局配置 ...
}
6.设置客户端请求头读取超时时间为 10;
. 在 http
块中添加 client_header_timeout
指令:
http {
# ... 其他全局配置 ...
client_header_timeout 10s; # 设置客户端请求头读取超时时间为 10 秒
# ... 其他全局配置 ...
}
7.将 Nginx 服务降权,使用 www 用户启动服务。
(1).添加 user
指令:
添加 user www;
指令,指定 Nginx 运行的用户。例如:
user www; # 设置 Nginx 运行的用户为 www
(2).保存并关闭配置文件。
是用nginx -t 命令查看配置文件是否有错
nginx -t
重启Nginx服务,让配置生效
systemctl restart nginx
查看状态
systemctl status nginx
A-4 任务四 中间件服务加固 SSHD\VSFTPD\IIS(Windows, Linux)
11.SSH 服务加固(Linux)
a.修改 ssh 服务端口为 2222;
-
编辑 SSH 配置文件:
vi /etc/ssh/sshd_config
-
找到
Port
行并将其修改为 2222:Port 2222
b.ssh 禁止 root 用户远程登录;
-
编辑 SSH 配置文件:
vi /etc/ssh/sshd_config
-
找到
PermitRootLogin
行并将其修改为no
:PermitRootLogin no
c.设置 root 用户的计划任务。每天早上 7:50 自动开启 ssh 服务,22:50 关闭;每周六的 7:30 重新启动 ssh 服务;
-
使用
crontab
编辑 root 用户的计划任务:crontab -e
-
添加以下条目:
# 每天早上7:50启动SSH服务 50 7 * * * systemctl start sshd # 每天晚上22:50关闭SSH服务 50 22 * * * systemctl stop sshd # 每周六的7:30重新启动SSH服务 30 7 * * 6 systemctl restart sshd
- 保存并退出编辑器。
- 使用命令crontab -l 确认任务是否生效
crontab -l
d.修改 SSHD 的 PID 档案存放地。
为了加强 SSH 服务的安全性,您可以按照以下步骤进行配置:
-
编辑 SSH 配置文件:
vi /etc/ssh/sshd_config
-
找到
PidFile
行并将其修改为新的路径(例如/root/sshd.pid
):PidFile /root/sshd.pid
-
保存并退出文件,然后重新启动 SSH 服务:
systemctl restart sshd
4.查看服务运行状态
systemctl status sshd
5、验证(这里就验证端口)
netstat -antlp | grep sshd
12.VSFTPD 服务加固(Linux)
a.设置运行 vsftpd 的非特权系统用户为 pyftp;
编辑 vsftpd 配置文件:
打开 vsftpd 配置文件 /etc/vsftpd/vsftpd.conf
,添加或修改以下配置项:
nopriv_user=pyftp
b.限制客户端连接的端口范围在 50000-60000;
- 编辑 vsftpd 配置文件:
在/etc/vsftpd/vsftpd.conf
文件中添加以下行:pasv_min_port=50000 pasv_max_port=60000
c.限制本地用户登录活动范围限制在 home 目录。
编辑 vsftpd 配置文件:
在 /etc/vsftpd/vsftpd.conf
文件中添加或修改以下行:
chroot_local_user=YES
3. 重启 VSFTPD 服务
重启 VSFTPD 服务以使新的配置生效:
systemctl restart vsftpd
4. 验证服务状态
确认 VSFTPD 服务已成功启动并正在运行:
systemctl status vsftpd
5. 验证配置生效(只 验证非特权用户 pyftp)
确保 vsftpd 是以你指定的非特权用户 pyftp
运行的:
ps aux | grep vsftpd
A-6 任务六 防火墙策略(Linux)
19.设置防火墙允许本机转发除 ICMP 协议以外的所有数据包;
下面是针对每个任务的详细防火墙策略配置。我们将使用 iptables
来实现这些策略。
- 启用 IP 转发:
echo 1 > /proc/sys/net/ipv4/ip_forward
- 修改
/etc/sysctl.conf
文件以永久启用 IP 转发:net.ipv4.ip_forward = 1
- 设置 iptables 规则允许转发除 ICMP 协议以外的所有数据包:
iptables -A FORWARD -p icmp -j DROP iptables -A FORWARD -j ACCEPT
20.为防止 Nmap 等扫描软件探测到关键信息,设置 iptables 防火墙策略对 80 号端口进行流量处理;
- 阻止 Nmap 探测:
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --set iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP
21.为防御拒绝服务攻击,设置 iptables 防火墙策略对传入的流量进行过滤,限制每分钟允许 3 个包传入,并将瞬间流量设定为一次最多处理 6 个数据包(超过上限的网络数据包将丢弃不予处理)
设置限制规则:
iptables -A INPUT -m limit --limit 3/minute --limit-burst 6 -j ACCEPT
iptables -A INPUT -j DROP
22.只允许转发来自 172.16.0.0/24 局域网段的 DNS 解析请求数据包。
- 设置允许转发来自 172.16.0.0/24 的 DNS 请求:
iptables -A FORWARD -p udp -s 172.16.0.0/24 --dport 53 -j ACCEPT iptables -A FORWARD -p tcp -s 172.16.0.0/24 --dport 53 -j ACCEPT
保存和加载 iptables 配置
为了确保在重启后规则依然有效,可以使用以下命令保存规则:
保存当前规则(CentOS 7):
service iptables save