加固修复-01
加强SSH服务的安全性
为了防止SSH服务被暴力破解攻击,应禁用密码登录并改用密钥认证。
请在Linux服务器上为root用户配置以下公钥以进行验证ssh-ed25519
AAAAC3NzaC1lZDI1NTE5AAAAIEhw/9RBAh4qW36/LZXn80sLIZhq2hAJ7qY9KhzfJ3rW
输入history查看历史命令,发现有vim /etc/ssh/sshd_config的历史命令,这个正是禁用密码的那个文件
禁用密码:
PasswordAuthentication no
配置ssh公钥:编辑/.ssh/authorized_keys文件改下即可
加固修复-02
配置Nginx重定向和HSTS
配置Linux服务器的Nginx服务,将所有站点的HTTP请求重定向到HTTPS,并配置严格传输安全策略
(HSTS),以确保客户端与服务器之间的通信安全。
配置Nginx
sudo apt update
sudo apt install nginx
配置HTTP到HTTPS的重定向
sudo vim /etc/nginx/sites-available/example.com
然后,在配置文件中添加以下内容来设置HTTP到HTTPS的重定向
server {
listen 80;
server_name example.com www.example.com;
# 重定向到HTTPS
return 301 https://$host$request_uri;
}
启用HSTS
server {
listen 443 ssl;
server_name example.com www.example.com;
ssl_certificate /path/to/your/certificate.pem;
ssl_certificate_key /path/to/your/certificate.key;
# HSTS (to include all subdomains, use "includeSubDomains")
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
# 其他SSL配置...
location / {
try_files $uri $uri/ =404;
}
}
加固修复-03
启用Web应用防火墙
为Nginx服务的默认站点启用ModSecurity Web应用防火墙,并集成OWASP核心规则集(CRS),以防御常
见的Web攻击和漏洞利用。
安装ModSecurity和OWASP CRS
sudo apt install modsecurity libmodsecurity3
git clone https://github.com/coreruleset/coreruleset /usr/share/modsecurity-crs
配置ModSecurity以使用OWASP CRS规则集
编辑ModSecurity主配置文件
编辑ModSecurity的主配置文件/etc/modsecurity/modsecurity.conf-recommended,将其复制为modsecurity.conf:
sudo cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
编辑modsecurity.conf文件
vim /etc/modsecurity/modsecurity.conf
SecRuleEngine On
SecRequestBodyAccess On
SecResponseBodyAccess On
SecDebugLog /var/log/modsecurity/debug.log
SecDebugLogLevel 3
SecAuditEngine RelevantOnly
SecAuditLogParts ABIJDEFHZ
SecAuditLogType Serial
SecAuditLog /var/log/modsecurity/audit.log
SecDataDir /tmp
SecTmpDir /tmp
配置OWASP CRS规则集
创建一个目录来存放OWASP CRS规则集,并将规则集文件链接到Nginx的配置目录中:
sudo mkdir -p /etc/nginx/modsecurity
sudo ln -s /usr/share/modsecurity-crs/crs-setup.conf.example /etc/nginx/modsecurity/crs-setup.conf
sudo ln -s /usr/share/modsecurity-crs/rules/ /etc/nginx/modsecurity/
配置Nginx以使用ModSecurity
编辑Nginx的默认站点配置文件,通常位于/etc/nginx/sites-available/default:
sudo nano /etc/nginx/sites-available/default
server {
listen 80;
server_name your_domain.com;
# ModSecurity configuration
include /etc/modsecurity/modsecurity.conf;
include /etc/nginx/modsecurity/crs-setup.conf;
include /etc/nginx/modsecurity/rules/*.conf;
location / {
# Your existing configuration
proxy_pass http://your_backend;
# Other settings...
}
}
加固修复-04
加强防火墙策略
配置Linux服务器的防火墙,使其仅允许通过以下端口的访问:22/tcp(SSH)、53/tcp和53/udp
(DNS)、80/tcp(HTTP)、443/tcp(HTTPS)。
关闭其他不必要的端口,减少攻击面。
清除现有规则
sudo iptables -F
sudo iptables -X
sudo iptables -t nat -F
sudo iptables -t nat -X
sudo iptables -t mangle -F
sudo iptables -t mangle -X
允许特定端口
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 53 -j ACCEPT
sudo iptables -A INPUT -p udp --dport 53 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
保存规则
sudo sh -c "iptables-save > /etc/iptables/rules.v4"
加固修复05
赛后学习的
优化Kubernetes RBAC权限 配置App1应用的Kubernetes RBAC权限,只允许读取App1应用命名空间下所有Pods的信息,防止越权访问 其他命名空间的资源。
需要创建一个Role和一个RoleBinding
创建Role
首先,定义一个Role,该角色允许在指定命名空间内对Pods执行get, list, 和 watch操作。假设你的应用程序位于名为app1-namespace的命名空间中。
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: app1-pod-reader
namespace: app1-namespace # 更改为你实际使用的命名空间名称
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list", "watch"]
保存上述内容到一个名为app1-role.yaml的文件中。
创建ServiceAccount
apiVersion: v1
kind: ServiceAccount
metadata:
name: app1-service-account
namespace: app1-namespace # 确保与Role所在的命名空间一致
将这段代码保存为app1-serviceaccount.yaml
创建RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: read-pods
namespace: app1-namespace # 同样保持一致性
subjects:
- kind: ServiceAccount
name: app1-service-account # 使用正确的服务账号名称
namespace: app1-namespace
roleRef:
kind: Role
name: app1-pod-reader
apiGroup: rbac.authorization.k8s.io
此配置保存为app1-rolebinding.yaml
使用kubectl命令行工具应用这些配置
kubectl apply -f app1-role.yaml
kubectl apply -f app1-serviceaccount.yaml
kubectl apply -f app1-rolebinding.yaml
加固修复06
修复Kubernetes服务 使Pods状态为running,确保应用的可用性。
赛后学习的
检查Pod的状态
kubectl get pods -n <namespace> # 列出指定命名空间下的所有Pods
kubectl describe pod <pod-name> -n <namespace> # 获取特定Pod的详细信息
查看日志
kubectl logs <pod-name> -n <namespace>
Pod处于ImagePullBackOff状态
1.检查镜像名称和标签是否正确。
2.确保镜像存在于指定的仓库中,并且对集群可见(例如,私有仓库需要正确的认证信息)。
3.如果使用的是私有仓库,确保已经配置了imagePullSecrets
Pod处于Pending状态
增加节点数量或调整现有节点的资源分配。
调整Pod的资源请求(requests)和限制(limits),使其与可用资源匹配
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
重新创建Pod
删除Pod让控制器自动重新创建它
kubectl delete pod <pod-name> -n <namespace>