服务器安全加固与扫描工具部署
1. 服务器安全加固与报告查看
在服务器安全加固过程中,我们使用Ansible和OpenSCAP进行操作。操作完成后,会生成相应的报告。例如,执行相关操作后,会有如下输出:
box1 : ok=8 changed=7 unreachable=0 failed=0
我们可以使用以下命令打开生成的报告:
$ open generated/box1_report_04-final-fixes.html
打开报告后,可能会发现仍有两个已知问题的中级检查未通过。希望在你阅读时,服务器能通过所有检查。完成所有操作后,别忘了销毁Vagrant盒子,避免闲置虚拟机占用资源。销毁命令如下:
$ vagrant destroy
销毁盒子后,建议在全新安装环境中多次进行扫描和修复操作,以了解如何在新主机上实施这些操作。
2. 安全加固总结与相关技术
通过创建剧本,我们可以修复扫描过程中发现的PCI - DSS合规性错误。这种方法非常实用,尤其在管理数十台需要合规且有完整审计历史的服务器时。现在我们已经有了一个基础剧本,可以每天对目标主机进行审计,并将结果存储在主机之外。根据配置,还能自动解决扫描中发现的不符合项。
以下是一些相关技术和组织的链接:
| 技术/组织 | 链接 |
| — | — |
| OpenSCAP | https://www.open-scap.org/ |
| Security Content Automation Protocol (SCAP) | https://scap.nist.gov/ |
| NIST | https://www.nist.gov/ |
| MITRE Corporation | https://www.mitre.org/ |
| Asset Identification (AID) | https://csrc.nist.gov/Projects/Security-Content-Automation-Protocol/Specifications/aid |
| Asset Reporting Format (ARF) | https://csrc.nist.gov/Projects/Security-Content-Automation-Protocol/Specifications/arf |
| Common Configuration Enumeration (CCE) | https://cce.mitre.org |
| Common Configuration Scoring System (CCSS) | https://www.nist.gov/publications/common-configuration-scoring-system-ccss-metrics-software-security-configuration |
| Common Platform Enumeration (CPE) | https://nvd.nist.gov/products/cpe |
| Common Weakness Enumeration (CWE) | https://cwe.mitre.org/ |
| Common Vulnerabilities and Exposures (CVE) | https://cve.mitre.org |
| Common Vulnerability Scoring System (CVSS) | https://www.first.org/cvss/ |
| Extensible Configuration Checklist Description Format (XCCDF) | https://csrc.nist.gov/Projects/Security-Content-Automation-Protocol/Specifications/xccdf |
| Open Checklist Interactive Language (OCIL) | https://csrc.nist.gov/Projects/Security-Content-Automation-Protocol/Specifications/ocil |
| Open Vulnerability and Assessment Language (OVAL) | https://oval.mitre.org |
| Trust Model for Security Automation Data (TMSAD) | https://www.nist.gov/publications/trust-model-security-automation-data-10-tmsad |
3. 部署WPScan和OWASP ZAP - 准备工作
接下来,我们将创建一个剧本,用于部署和运行WPScan和OWASP ZAP这两个安全工具,并启动一个WordPress安装供其扫描。
我们将使用Vagrant启动两个盒子:
- 第一个盒子用于安装扫描工具,会安装Docker,并使用Docker Ansible模块与软件交互。
- 第二个盒子用于托管WordPress安装,作为扫描目标。
创建一个Vagrantfile,内容如下:
# -*- mode: ruby -*-
# vi: set ft=ruby :
API_VERSION = "2"
BOX_NAME = "centos/7"
BOX_IP_SCAN = "10.20.30.40"
BOX_IP_WP = "10.20.30.41"
DOMAIN = "nip.io"
PRIVATE_KEY = "~/.ssh/id_rsa"
PUBLIC_KEY = '~/.ssh/id_rsa.pub'
Vagrant.configure(API_VERSION) do |config|
config.vm.define :scan do |scan|
scan.vm.box = BOX_NAME
scan.vm.network "private_network", ip: BOX_IP_SCAN
scan.vm.host_name = BOX_IP_SCAN + '.' + DOMAIN
scan.ssh.insert_key = false
scan.ssh.private_key_path = [PRIVATE_KEY,
"~/.vagrant.d/insecure_private_key"]
scan.vm.provision "file", source: PUBLIC_KEY, destination:
"~/.ssh/authorized_keys"
end
config.vm.define :wp do |wp|
wp.vm.box = BOX_NAME
wp.vm.network "private_network", ip: BOX_IP_WP
wp.vm.host_name = BOX_IP_WP + '.' + DOMAIN
wp.ssh.insert_key = false
wp.ssh.private_key_path = [PRIVATE_KEY,
"~/.vagrant.d/insecure_private_key"]
wp.vm.provision "file", source: PUBLIC_KEY, destination:
"~/.ssh/authorized_keys"
end
config.vm.provider "virtualbox" do |v|
v.memory = "2024"
v.cpus = "2"
end
config.vm.provider "vmware_fusion" do |v|
v.vmx["memsize"] = "2024"
v.vmx["numvcpus"] = "2"
end
end
从上述代码可以看出,我们将启动两个CentOS 7盒子,一个名为
scan
,主机名为
10.20.30.40.nip.io
;另一个名为
wp
,主机名为
10.20.30.41.nip.io
。
库存主机文件
production
内容如下:
box1 ansible_host=10.20.30.40.nip.io
box2 ansible_host=10.20.30.41.nip.io
[scan]
box1
[wordpress]
box2
[boxes]
box1
box2
[boxes:vars]
ansible_connection=ssh
ansible_user=vagrant
ansible_private_key_file=~/.ssh/id_rsa
host_key_checking=False
这里定义了三个主机组:
-
scan
组包含用于运行扫描工具的主机。
-
wordpress
组包含WordPress主机,可包含多个主机。
-
boxes
组用于为所有主机应用连接配置。
启动两个盒子的命令如下:
$ vagrant up
$ vagrant up --provider=vmware_fusion
4. WordPress剧本与扫描剧本
-
WordPress剧本
:部署WordPress非常简单,只需从仓库的
Chapter05/lemp文件夹复制group_vars、roles文件夹及其内容,还有site.yml文件即可。这体现了Ansible“一次编写,多次使用”的优势。唯一的修改是在site.yml文件中添加部署软件的任务。 - 扫描剧本 :我们将使用Docker运行WPScan和OWASP ZAP,这样可以简化安装过程,同时学习Docker Ansible模块。
5. Docker角色创建与配置
首先,使用
ansible-galaxy
命令生成Docker角色的结构:
$ ansible-galaxy init roles/docker
在
roles/docker/defaults/main.yml
中设置默认值:
docker:
gpg_key: "https://download.docker.com/linux/centos/gpg"
repo_url: "https://download.docker.com/linux/centos/docker-ce.repo"
repo_path: "/etc/yum.repos.d/docker-ce.repo"
packages:
- "docker-ce"
- "device-mapper-persistent-data"
- "lvm2"
- "python-setuptools"
- "libselinux-python"
pip:
- "docker"
以下是安装Docker的详细步骤:
1.
更新主机软件包
:在
roles/docker/tasks/main.yml
中添加以下任务:
- name: update all of the installed packages
yum:
name: "*"
state: "latest"
update_cache: "yes"
- 添加GPG密钥 :
- name: add the gpg key for the docker repo
rpm_key:
key: "{{ docker.gpg_key }}"
state: "present"
- 下载并配置Docker仓库 :
- name: add docker repo from the remote url
get_url:
url: "{{ docker.repo_url }}"
dest: "{{ docker.repo_path }}"
mode: "0644"
- 安装Docker软件包 :
- name: install the docker packages
yum:
name: "{{ item }}"
state: "installed"
update_cache: "yes"
with_items: "{{ docker.packages }}"
- 安装pip :
- name: install pip
easy_install:
name: pip
state: latest
- 安装Docker Python库 :
- name: install the python packages
pip:
name: "{{ item }}"
with_items: "{{ docker.pip }}"
- 禁用SELinux :
- name: put selinux into permissive mode
selinux:
policy: targeted
state: permissive
- 启动Docker服务并设置开机自启 :
- name: start docker and configure to start on boot
service:
name: "docker"
state: "started"
enabled: "yes"
6. 测试剧本
在运行剧本之前,需要更新
site.yml
文件,添加扫描主机的任务:
---
- hosts: scan
gather_facts: true
become: yes
become_method: sudo
vars_files:
- group_vars/common.yml
roles:
- roles/docker
- hosts: wordpress
gather_facts: true
become: yes
become_method: sudo
vars_files:
- group_vars/common.yml
roles:
- roles/stack-install
- roles/stack-config
- roles/wordpress
更新后,使用以下命令运行剧本:
$ ansible-playbook -i production site.yml
运行剧本后,会有详细的输出,显示每个任务的执行结果。例如,扫描主机的任务执行结果可能如下:
PLAY [scan]
***************************************************************************
**********
TASK [Gathering Facts]
**************************************************************************
ok: [box1]
TASK [roles/docker : update all of the installed packages]
**************************************
changed: [box1]
...
WordPress主机的任务执行结果也会有相应输出,可能会有一些任务失败,但部分失败任务会被忽略,继续执行后续任务。最后,还会运行处理程序来重启Nginx服务。
通过以上步骤,我们完成了服务器安全加固、Vagrant盒子的准备、WordPress和扫描工具的部署以及剧本的测试。这些操作可以帮助我们更好地保障服务器的安全,并对WordPress网站进行安全扫描。
服务器安全加固与扫描工具部署(续)
7. 测试剧本结果分析
运行剧本后,详细的输出结果展示了每个任务的执行情况。下面是对扫描主机和WordPress主机任务执行结果的进一步分析:
| 主机类型 | 任务示例 | 执行结果 | 分析 |
| — | — | — | — |
| 扫描主机 |
TASK [Gathering Facts]
|
ok: [box1]
| 成功收集扫描主机的事实信息,为后续任务提供基础。 |
| 扫描主机 |
TASK [roles/docker : update all of the installed packages]
|
changed: [box1]
| 成功更新扫描主机的所有软件包,使系统保持最新状态。 |
| WordPress主机 |
TASK [roles/wordpress : do we need to install the plugins?]
|
failed: [box2] (item=jetpack)等
| 安装插件时部分任务失败,但通过
...ignoring
忽略失败,继续后续任务。可能是网络问题或插件依赖问题导致。 |
| WordPress主机 |
RUNNING HANDLER [roles/stack-config : restart nginx]
|
changed: [box2]
| 成功运行处理程序重启Nginx服务,确保WordPress网站正常访问。 |
mermaid流程图展示测试剧本的执行流程:
graph TD;
A[开始] --> B[更新site.yml文件];
B --> C[运行剧本 ansible-playbook -i production site.yml];
C --> D{扫描主机任务};
C --> E{WordPress主机任务};
D --> D1[收集事实信息];
D --> D2[更新软件包];
D --> D3[安装Docker相关];
E --> E1[安装WordPress相关];
E --> E2[安装插件];
E --> E3[重启Nginx服务];
D1 --> D4{是否成功};
D2 --> D4;
D3 --> D4;
E1 --> E5{是否成功};
E2 --> E5;
E3 --> E5;
D4 --> F[扫描主机任务结束];
E5 --> G[WordPress主机任务结束];
F --> H[测试剧本完成];
G --> H;
8. 总结与注意事项
- 总结 :通过使用Ansible和OpenSCAP进行服务器安全加固,我们可以高效地修复PCI - DSS合规性错误,并生成详细的报告。利用Vagrant创建虚拟环境,结合Docker运行WPScan和OWASP ZAP等安全工具,简化了安装过程。同时,Ansible的模块化设计使得剧本可以重复使用,提高了工作效率。
-
注意事项
:
- 在销毁Vagrant盒子后,多次在全新安装环境中进行扫描和修复操作,有助于熟悉在新主机上的实施流程。
- 运行剧本时,若遇到任务失败,可根据输出信息排查问题,部分失败任务可通过忽略继续执行后续任务。
- 安装Docker和相关软件包时,确保网络连接正常,避免因网络问题导致安装失败。
9. 常见问题解答
以下是一些常见问题及解答:
1.
添加
>
到多行变量有什么作用?
:暂未提及具体作用,可进一步查阅相关文档。
2.
OpenSCAP是否通过NIST认证?
:可通过访问https://www.open-scap.org/ 和https://scap.nist.gov/ 查看相关认证信息。
3.
为什么告诉Ansible在扫描命令标记为失败时继续执行?
:可能是为了确保即使部分扫描任务失败,仍能继续执行后续任务,获取更多信息,避免因单个任务失败而中断整个流程。
4.
为什么对某些角色使用标签?
:使用标签可以更灵活地控制剧本的执行,只运行特定标签的任务,提高执行效率。
5.
是否使用
copy
命令将HTML报告从远程主机复制到Ansible控制器?
:暂未提及是否使用该命令,可根据实际需求添加相关任务。
10. 进一步学习建议
- 深入学习Ansible :Ansible是一个强大的自动化工具,可进一步学习其高级特性,如动态库存、条件判断、循环等,以实现更复杂的自动化任务。
- 掌握Docker技术 :Docker在容器化应用部署方面具有很大优势,学习Docker的网络配置、镜像构建、容器编排等知识,可更好地利用Docker运行安全工具。
- 研究安全标准和协议 :了解PCI - DSS、SCAP等安全标准和协议,有助于提高服务器的安全性和合规性。
- 实践与总结 :不断实践上述操作,总结经验教训,遇到问题及时查阅文档或社区论坛,逐步提升服务器安全加固和扫描的能力。
通过以上内容,我们全面介绍了服务器安全加固、扫描工具部署以及相关测试的流程和注意事项,希望能帮助你更好地保障服务器的安全。
服务器安全加固与扫描工具部署
超级会员免费看
1262

被折叠的 条评论
为什么被折叠?



