ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

4小时企业网络安全加固实战:从端口安全到日志审计全拆解

4小时企业网络安全加固实战:从端口安全到日志审计全拆解 简介这份资料是广东省第三届职业技能大赛世界技能大赛选拔赛网络安全赛项A模块的赛题原文面向网络安全竞赛选手、职业院校师生及企业安全运维人员可作为实战化备赛与技能考核的参考题源。赛题聚焦“企业基础设施安全”场景完整呈现竞赛项目简介、任务描述、评分方案以及详细工作任务覆盖基本配置验证、网络设备加固、公共服务保护、安全审核策略配置、登录与密码策略配置、防火墙策略等核心考核点能够帮助读者理解大赛对网络设备安全加固、远程访问策略、Windows域配置等能力的具体要求。资源包内含1个PDF文件体积约1.02MB目录结构清晰便于按模块查阅与对照练习。目前已有715人学习下载适合需要熟悉世赛选拔题型、演练企业网络防护流程的备赛者使用。1. 这不是攻防赛是 4 小时的企业安全加固A 模块赛题拆解第一次打开广东省第三届职业技能大赛网络安全赛项 A 模块样题的人大概率会愣一下4 小时30 分没有攻防对抗没有夺旗任务列表里全是“加固”和“策略”。这一模块的设计思路是模拟一家运行中的企业网络——服务全部正常但没有做任何安全配置。你要做的不是修复故障而是在不打断业务的前提下把网络设备、Web、FTP、数据库、域控、日志系统和防火墙逐层收紧。它非常适合正在备赛的技能选手也适合想按企业真实加固流程走一遍的网络安全工程师。整张卷子的难度不在某个单点技术而在时间分配和细节校验任何一个评分项“只做一半”都等于零分。2. 网络设备加固端口安全与加密隧道先解决网络层信任2.1 端口安全的写法maximum 2、restrict 与空闲端口关闭赛题在 A1 网络设备加固部分给了一个很容易被忽略的约束所有端口上的 MAC 地址数量上限为 2违规处理必须设成 restrict不能设成 shutdown。很多人看到端口安全下意识就配violation shutdown但这道题明说不能把端口置于错误禁用状态err-disable。原因很实际shutdown 会把端口彻底弹掉一旦评分脚本或后续运维触发违规端口直接不可用后面的分支通信全断。以 Cisco IOS 风格为例SW1 的配置可以这样写SW1(config)# interface range fastEthernet 0/1 - 24 SW1(config-if-range)# switchport port-security SW1(config-if-range)# switchport port-security maximum 2 SW1(config-if-range)# switchport port-security violation restrict SW1(config-if-range)# switchport port-security mac-address sticky SW1(config-if-range)# exitswitchport port-security是总开关maximum 2限制端口最多学习 2 个 MACviolation restrict表示违规时丢弃非法帧并记录日志但端口保持 upmac-address sticky会把首次学到的 MAC 写进运行配置防止合法终端换口后误触发违规。SW2 完全同理只是接口编号可能不同。接下来是关闭空闲端口。常见做法是先用show interfaces status看一遍哪些口被拓扑占用再对剩余端口统一 shutdown避免把级联口关掉SW1(config)# interface range fastEthernet 0/10 - 24 SW1(config-if-range)# shutdown注意这里不是把 0/1 - 24 全关通常只有少量接口接入终端其余空闲。关错口的后果是分支之间直接失联这种低级失误在赛场上几乎不可挽回因为拓扑里设备之间没有冗余链路。2.2 FW 与 IAR 之间的加密隧道IKE v1 参数必须精确到算法FW 和 IAR 这条隧道是 A1 分值最高的点之一拓扑上它负责连通分支机构和办公区。赛题把加密参数限定得很死IKE v1 策略用 aes 加密、sha 摘要、pre-shared-key 认证变换集用 esp-aes 和 esp-sha-hmac。任何一个算法不匹配隧道就起不来。以 FW 为例Cisco 风格配置如下crypto isakmp policy 10 encryption aes hash sha authentication pre-shared-key group 2 crypto isakmp key Skills!#258 address 192.168.30.2 crypto ipsec transform-set TRA esp-aes esp-sha-hmac access-list 100 permit ip 192.168.10.0 0.0.0.255 192.168.30.0 0.0.0.255 crypto map CMAP 10 ipsec-isakmp set peer 192.168.30.2 set transform-set TRA match address 100 interface GigabitEthernet0/0 crypto map CMAPIAR 侧做镜像配置内网网段和 peer 地址都要反过来。crypto isakmp key是对端地址和预共享密钥两端必须一致access-list 100是“感兴趣流量”只有匹配这条 ACL 的数据流才会被送进加密通道。如果两端 ACL 网段不对应隧道状态会一直停在 MM_NO_STATE 或者 QM_IDLEv3.0 之后还能看到具体错误码老版本就只能靠debug crypto isakmp慢慢看。有个坑必须提设备上同时跑着 OSPF而赛题说了 OSPF 暴露了内部网络信息。我不会去动 OSPF 本身但会在 NAT 策略里做豁免避免加密流量被地址转换改写access-list 101 deny ip 192.168.10.0 0.0.0.255 192.168.30.0 0.0.0.255 access-list 101 permit ip 192.168.10.0 0.0.0.255 any ip nat inside source list 101 interface GigabitEthernet0/1 overload常见做法是让去往对端内网的流量绕过 NAT否则感兴趣流量被 NAT 改写后IPsec 报文身份校验直接失败。配完用show crypto isakmp sa和show crypto ipsec sa验证前者状态要变成 active后者要看到加密和解密的 packet 计数在涨。2.3 设备自身身份enable 密码、banner 与配置持久化网络设备自身也要按 A4 登录密码策略加固。代码很短但每一项都对应一个评分点enable secret QWEqwe258!# security passwords min-length 12 banner motd ^C For authorized users only ^C service password-encryptionenable secret设置特权模式密码security passwords min-length 12强制所有明文密码最少 12 位banner motd是登录横幅service password-encryption让配置里的 password 以密文形式保存。IAR、SW1、SW2 都要执行还要设置本地用户username user privilege 1 algorithm-type scrypt secret Skills!#258这里把本地用户密码用 scrypttype 8存储满足赛题“本地用户密码应作为 scrypt hash 存储在配置中”的要求。不同版本 IOS 对algorithm-type scrypt的支持度不一样老版本可能只认 type 5如果设备不支持评分大概率会看 show run 里没有明文密码这一条至少把底线守住。最后是全员都会踩的坑配置完不保存。设备一旦重启所有加固全部清零。做完一个模块就执行一次copy running-config startup-config这条命令在 FW、IAR、SW1、SW2 上都要跑而且是最后提交前必须再跑一遍。配置类比赛丢分最常见的原因不是不会配而是没保存。3. 公共服务保护Web、FTP、数据库三层分开收紧3.1 Web 层HTTPS 重定向、关闭目录浏览、隐藏服务版本WWW 服务器上跑的 Web 服务要求所有请求走 HTTPSHTTP 全部 301 重定向到 HTTPS证书从 CA 签发。赛题环境里带了 OpenSSL CA所以证书签发流程是生成私钥和 CSR用 CA 签出证书再把证书和私钥放到 Web 服务器的对应路径。Apache 的站点配置可以这样组织VirtualHost *:80 ServerName www.skills.cn RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R301,L] /VirtualHost VirtualHost *:443 ServerName www.skills.cn SSLEngine on SSLCertificateFile /etc/pki/tls/certs/skills.crt SSLCertificateKeyFile /etc/pki/tls/private/skills.key DocumentRoot /var/www/html Directory /var/www/html Options -Indexes /Directory /VirtualHost ServerTokens ProductOnly ServerSignature OffRewriteCond %{HTTPS} off配合RewriteRule是标准的 HTTP 到 HTTPS 重定向写法R301 是永久重定向。Options -Indexes关闭目录浏览访问目录时不再列出文件列表。ServerTokens ProductOnly和ServerSignature Off分别控制响应头里的版本信息和错误页脚部的服务器签名合起来就是“隐藏 Web 服务名称及版本号”。如果环境是 nginx对应的是server_tokens off;和autoindex off;效果一致。建议先确认比赛环境装了哪个服务再下手配置错了服务起不来反而丢更多分。改完配置后apachectl configtest检查语法再systemctl reload httpd。3.2 应用层拦截ModSecurity 方法与 Snort ICMP 告警规则ModSecurity 的规则要求拦截所有请求方式为 HEAD、PUT、DELETE、CONNECT、TRACE 的 HTTP 数据包。先确保模块加载并开启规则引擎LoadModule security2_module modules/mod_security2.so SecRuleEngine On然后加一条自定义规则SecRule REQUEST_METHOD ^(HEAD|PUT|DELETE|CONNECT|TRACE)$ \ id:10001,phase:1,deny,status:405,msg:Method blocked by policyphase:1表示在请求头阶段就拦截deny直接拒绝status:405返回 Method Not Allowed。测试时用curl -X TRACE -v http://www.skills.cn能看到 405 就说明规则生效。注意规则文件要 include 进 ModSecurity 主配置否则改了不加载。Snort 这边要求检测并告警所有发向本机的超过 1024 字节的 ICMP 数据包告警消息设置为 ICMPFLOOD。规则可以追加到本地规则文件echo alert icmp any any - $HOME_NET any (msg:ICMPFLOOD; dsize:1024; sid:1000001; rev:1;) /etc/snort/rules/local.rulesdsize在 Snort 里匹配的是 IP 数据包的总长度单位是字节1024正好对应赛题“超过 1024 字节”。测试命令用ping -s 1100 www.skills.cn然后看/var/log/snort/alert里是否出现 ICMPFLOOD。这里有个容易误判的地方Snort 2.x 和 3.x 的规则语法有差异上面是 2.x 最常见写法如果比赛环境是 3.x要按安装包自带的规则模板调整格式。3.3 FTP 服务仅接受 TLS 连接并禁止匿名登录FTP 服务器的要求集中在“仅接受 SSL/TLS 连接”和“禁止匿名访问”两条底层是 vsftpd。配置片段如下anonymous_enableNO local_enableYES ssl_enableYES allow_anon_sslNO force_local_data_sslYES force_local_logins_sslYES ssl_tlsv1YES ssl_sslv2NO ssl_sslv3NO rsa_cert_file/etc/pki/tls/certs/vsftpd.crt rsa_private_key_file/etc/pki/tls/private/vsftpd.keyforce_local_data_ssl和force_local_logins_ssl分别强制数据连接和登录认证走 TLSanonymous_enableNO关闭匿名。证书同样要从 CA 签发路径和 Web 证书可以不同但不能用自签名临时证书敷衍。重启 vsftpd 后用支持 FTPS 的客户端测试FileZilla 里选择“要求显式 FTP over TLS”能登录就说明配置通过。用curl -k --ftp-ssl ftp://ftp.skills.cn也可以验证。注意这里 FTP 和 WWW 是两台不同的 Linux 虚拟机证书要分别签、分别放不要为了省事共用一份评分脚本很可能按主机名校验。3.4 数据库最小权限密码生命周期、读写路径与本地登录数据库侧的需求全部围绕 web 用户展开。以 MySQL 为例四条 SQL 依次处理ALTER USER weblocalhost IDENTIFIED BY Skills!#258 PASSWORD EXPIRE INTERVAL 90 DAY; SET PERSIST secure_file_priv /dev/null; REVOKE ALL PRIVILEGES ON website.* FROM weblocalhost; GRANT SELECT, INSERT, UPDATE, DELETE ON website.* TO weblocalhost; DROP USER IF EXISTS web%;第一条把 web 用户密码生命周期设为 90 天第二条把secure_file_priv设为/dev/null限制数据库客户端读写数据文件的路径——这个参数在 MySQL 5.7 和 8.0 里都支持SET PERSIST会把配置写进持久化文件重启后仍有效第三条先撤销全部权限第四条只授予增删查改正好对应“取消所有授权仅授予对 website 库的增删查改权限”。最后一条DROP USER IF EXISTS web%是为了满足“禁止远程登录数据库 Web 用户仅允许本地登录”。先执行SELECT user, host FROM mysql.user WHERE user web;确认是否存在任何非 localhost 的登录项有就删掉。weblocalhost本身只允许本机登录不需要额外配置 skip-networking。完成后用SHOW GRANTS FOR weblocalhost;核对权限列表只看到 SELECT、INSERT、UPDATE、DELETE 四项才算合格。4. 安全审核策略与日志集中把域事件和防火墙日志送进 Splunk4.1 Windows 域与本地策略审核项严格按列表落地Windows 域配置这块Manager 和 Staff 要加入 skills.cn 域DC 是域控。加域时用赛题给的 user1、user2 账户分别对应两台客户机。加域成功后重启再在 DC 上执行后面的策略。如果 DC 上还没有 user1、user2先用域管理员创建注意别改默认密码。接下来是审核策略赛题给了非常明确的清单凭据验证、计算机帐户管理、安全组管理、帐户锁定、登录/注销、敏感特权使用每一项都有成功/失败的具体组合。用 auditpol 命令行比图形界面快得多而且三台机器能保持一致auditpol /set /subcategory:Credential Validation /success:enable /failure:enable auditpol /set /subcategory:Computer Account Management /success:enable /failure:enable auditpol /set /subcategory:Security Group Management /success:enable /failure:enable auditpol /set /subcategory:Account Lockout /success:enable auditpol /set /subcategory:Logon /success:enable /failure:enable auditpol /set /subcategory:Logoff /success:enable auditpol /set /subcategory:Sensitive Privilege Use /success:enable /failure:enable gpupdate /force这里最容易被坑的是“帐户锁定”只有成功没有失败。不少人习惯把所有项都设成成功失败反而和赛题要求不一致。另一个坑是中文系统的子类别名称可能是中文先执行auditpol /list /subcategory对照一遍列名再操作否则会报“策略不存在”。密码策略和登录 banner 也在这一块。最小密码长度 12 位和复杂度要求可以通过组策略设置命令行用一个简单方式处理net accounts /minpwlen:12复杂度的开关在“本地安全策略 → 帐户策略 → 密码策略 → 密码必须符合复杂性要求”图形界面点一下启用即可。banner 用注册表写入reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v LegalNoticeText /t REG_SZ /d For authorized users only /f reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v LegalNoticeCaption /t REG_SZ /d Warning /f gpupdate /forceLegalNoticeText是登录时显示的横幅内容LegalNoticeCaption是标题。DC、Manager、Staff 三台都要执行。登录失败锁定策略同样用 net accounts 一把梭net accounts /lockoutthreshold:5 /lockoutduration:1 /lockoutwindow:1lockoutthreshold:5表示 5 次失败lockoutduration:1锁定 1 分钟lockoutwindow:1是重置失败计数的时间窗口三个参数合起来就是“一分钟内 5 次失败锁定 1 分钟”。4.2 网络设备日志推送Splunk 监听 UDP 8090 与 FW 配置LOG 服务器上要装 Splunk安装包在 /root 下。安装和开启 UDP 监听cd /root tar xzf splunk-*.tgz -C /opt /opt/splunk/bin/splunk start --accept-license /opt/splunk/bin/splunk enable listen 8090 -protocol udp /opt/splunk/bin/splunk restartenable listen 8090 -protocol udp让 Splunk 监听 UDP 8090 端口用于接收外部日志。Splunk 默认的管理端口是 8000WEB 界面在这里访问但如果 LOG 服务器本身防火墙开着要先放行 8000 和 8090。常见做法是把这两个端口加入允许列表再设置默认拒绝。FW 侧推送日志到 LOG 服务器的 8090/UDPlogging on logging host 192.168.x.x transport udp port 8090 logging trap debugging logging buffered 32000logging host后面必须是 LOG 服务器的实际 IPtransport udp port 8090指定协议和端口。赛题还要求日志记录缓存区 32000对应logging buffered 32000日志记录级别 debugging对应logging trap debugging。没有transport udp port 8090的话设备默认往 514 端口发Splunk 收不到这条是血泪经验。配完在 Splunk 里搜索index* sourcetypeudp:8090能看到 FW 的日志就通了。注意 FW 上同样要保存配置copy running-config startup-config。4.3 域细节安全通道加密、数字签名与禁用缓存登录域环境里还有两个容易被漏掉的点。第一个是“域成员对安全通道数据进行数字加密或数字签名始终”注册表写法reg add HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters /v RequireSignOrSeal /t REG_DWORD /d 1 /fRequireSignOrSeal1表示安全通道必须签名或加密。第二个是“对通信进行数字签名如果可能”对应 SMB 签名reg add HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters /v EnableSecuritySignature /t REG_DWORD /d 1 /f这两条在 DC、Manager、Staff 上都要执行然后gpupdate /force。有些选手在图形界面里找半天找不到因为安全选项里的显示名称和注册表键名不一致直接改注册表反而快。“禁用系统缓存登录”对应注册表reg add HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon /v CachedLogonsCount /t REG_SZ /d 0 /fCachedLogonsCount0表示不缓存上次登录的域凭据。这个键是字符串值不是 DWORD写错类型会导致策略不生效这是我在实际环境里踩过的坑。5. 避坑登录与密码策略 8 分怎么拿才不翻车5.1 Linux 侧PAM 密码质量、登录失败锁定与 SSH 加固Linux 端的密码策略常见做法是用 authselect 统一管理 PAM 配置比直接改 /etc/pam.d 文件更稳妥。RHEL 系可以直接authselect select with-pwquality authselect enable-feature with-faillockwith-pwquality启用密码质量控制with-faillock启用登录失败锁定。然后写配置文件# /etc/security/pwquality.conf minlen 12 dcredit -1 ucredit -1 lcredit -1 ocredit -1minlen12对应最小密码长度 12 位dcredit/ucredit/lcredit/ocredit分别控制数字、大写字母、小写字母、特殊字符的数量负数表示“至少包含 1 个”这正好满足“包含大小写字母、数字和特殊字符”的复杂度要求。注意如果写成正数含义就变成“最多允许多少个”方向完全相反。faillock 的锁定参数写在这里# /etc/security/faillock.conf deny 5 unlock_time 60deny5允许 5 次失败unlock_time60锁定 60 秒。配置完用faillock --user root --reset清掉现有失败记录避免历史失败次数影响测试。SSH 的两个收尾项也在这里处理。第一个是禁止 root 远程登录对应赛题公共服务保护的 f 项echo PermitRootLogin no /etc/ssh/sshd_config systemctl restart sshd第二个是登录 bannerecho For authorized users only /etc/issue echo For authorized users only /etc/issue.net echo Banner /etc/issue.net /etc/ssh/sshd_config systemctl restart sshd这里有个高频翻车点/etc/issue只对本地登录生效SSH 要额外在 sshd_config 里配置Banner指令指向/etc/issue.net否则远程登录根本看不到横幅。每次配完要ssh localhost实测一遍。5.2 网络设备侧console 本地认证与最小权限登陆IAR、SW1、SW2 上要求启用本地控制台身份验证登录后进入权限级别 1非活动超时不超过 1 分钟。Cisco 风格配置line console 0 login local privilege level 1 exec-timeout 1 0 exitlogin local让 console 使用本地用户数据库认证privilege level 1确保验证成功后直接进入最小权限的用户模式而不是特权模式exec-timeout 1 0表示 1 分钟 0 秒无操作自动断开。同时还要把本地用户建好username user privilege 1 algorithm-type scrypt secret Skills!#258 enable secret QWEqwe258!# service password-encryptionalgorithm-type scrypt生成 type 8 密码哈希满足“本地用户密码作为 scrypt hash 存储”的要求。service password-encryption让配置里的明文密码变成可逆密文对应“所有密码必须作为可逆密文存储在配置中”。这两条同时存在并不冲突普通口令用 type 7 加密防偷看本地登录口令用 type 8 强哈希评分脚本通常会分别检查。5.3 高频翻车记录现象、原因与解决翻车点 1配置完 faillock 后 SSH 直接连不上。 现象用正确密码登录也被拒系统提示账户已锁定。 原因测试过程中反复输错密码deny5触发了锁定而锁定期间即使密码正确也不放行。 解决用本地控制台登录执行faillock --user root --reset或者等 60 秒自动解锁。从那以后我配置锁定策略前会先确认当前会话不会断再动 PAM。翻车点 2SSH 登录时看不到 banner。 现象本地登录有横幅SSH 登录什么都没有。 原因只写了/etc/issue没在 sshd_config 里配置Banner。 解决在 sshd_config 中追加Banner /etc/issue.net并重启 sshd。这个点看着小分值却不低属于典型的“会但不拿分”。翻车点 3设备重启后 enable 密码丢失。 现象重启后enable命令不需要密码或者密码变成默认值。 原因没有执行copy running-config startup-config。 解决每完成一个设备模块就保存一次提交前统一再保存一遍。翻车点 4用户名密码都正确但进不了特权模式。 现象登录后能敲enable但输入 enable 密码报错。 原因privilege level 1限制了下发命令的权限同时enable secret的哈希类型和设备版本不匹配导致 enable 认证失败。 解决确认enable secret已配置且密码正确必要时用enable secret重新配置一次再看show privilege确认当前权限级别。翻车点 5密码复杂度规则不生效。 现象设置一个长度 12 位但全是小写的密码系统竟然接受了。 原因pwquality.conf里dcredit/ucredit/lcredit/ocredit全没写或者写成了正数。 解决把四个参数设为 -1 并重启相关服务faillock --reset清掉旧记录后重新测试。6. 最后一步防火墙最小权限与重启后的按表自查6.1 Windows 与 Linux 防火墙的最小权限写法防火墙策略的要求是所有设备默认拒绝只放行业务必需流量。这里要先给 Windows 侧的基线netsh advfirewall set allprofiles state on注意顺序先把必要的入站端口加白再开防火墙否则域控的 RPC 流量被直接丢弃加入域的操作会失败。域环境里常见的必需流量包括 53DNS、88Kerberos、135/139/445域通信、49152 以上动态 RPC 端口评分环境如果对端口有明确限定按拓扑里的服务清单逐条加。Linux 侧用 iptables 做最小权限常见做法是先放行已建立的连接和明确需要的端口再把默认策略改成 DROPiptables -P INPUT DROP iptables -P FORWARD DROP iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT iptables -A INPUT -p tcp --dport 990 -j ACCEPT iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A INPUT -p udp --dport 8090 -j ACCEPT service iptables saveWWW 放行 443FTP 放行 990FTPS 控制端口LOG 放行 22 和 8090各台机器的放行项按实际运行的服务调整。这里最容易翻车的是把 SSH 也拦住导致设备无法远程访问所以 22 端口一定要留并且要先加白再改默认策略。6.2 重启后按评分表逐项自查所有配置完成后强制重启一遍所有设备再按评分表逐项验证检查项命令预期结果端口安全show port-security违规策略为 restrict加密隧道show crypto ipsec sa隧道 activepacket 计数增长HTTPS 重定向curl -I http://www.skills.cn返回 301 到 HTTPSModSecurity 拦截curl -X TRACE -v http://www.skills.cn返回 405Snort 告警ping -s 1100 www.skills.cnalert 文件出现 ICMPFLOODFTP TLScurl -k --ftp-ssl ftp://ftp.skills.cn登录成功且为 TLS 连接Splunk 接收Splunk 里搜sourcetypeudp:8090能看到 FW 日志登录锁定连续输错密码 5 次账户锁定 60 秒这个自查过程一定要在“重启后”做而不是在配置刚完成时做。设备一重启未保存的配置清零、隧道重新协商、iptables 规则丢失这些只有重启后才会暴露。从那以后我每次做完一套加固都会强制把所有设备重启一遍从 console 逐台登录确认 banner、密码、隧道和策略都还在再按评分表从 A1 到 A5 过一遍。希望帮到你。本文还有配套的精品资源点击获取
返回列表