1.初始设置
禁用22端口弱口令登录,推荐使用高位端口+密钥登陆
https://github.com/247like/linux-ssh-init-sh
使用该仓库一键脚本快速完成对服务器的初始化安全加固
curl -fsSL https://raw.githubusercontent.com/247like/linux-ssh-init-sh/main/init.sh -o init.sh && chmod +x init.sh && ./init.sh
Windows生成密钥指令:win+R
ssh-keygen -t ed25519 -C "xxxxxxxx"
2.开启防火墙
检查目前端口状态
sudo ss -tunlp
检查防火墙状态
sudo ufw status
启动防火墙前准备工作
sudo ufw allow "ssh端口"/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
检查无误后启动防火墙(注意再次确认ssh端口已放行,避免失联)
sudo ufw enable
3.为docker额外设置防火墙规则
通常情况,安装docker后其会绕过ufw,导致端口暴露于公网,ufw形同虚设,因此添加额外规则使docker端口全部隐藏,仅限内部转发
https://github.com/chaifeng/ufw-docker 该项目提供了一个非常简便的解决方案,仅需将以下代码添加于该文件末尾:
sudo nano /etc/ufw/after.rules
# BEGIN UFW AND DOCKER
*filter
:ufw-user-forward - [0:0]
:ufw-docker-logging-deny - [0:0]
:DOCKER-USER - [0:0]
-A DOCKER-USER -j ufw-user-forward
-A DOCKER-USER -m conntrack --ctstate RELATED,ESTABLISHED -j RETURN
-A DOCKER-USER -m conntrack --ctstate INVALID -j DROP
-A DOCKER-USER -i docker0 -o docker0 -j ACCEPT
-A DOCKER-USER -j RETURN -s 10.0.0.0/8
-A DOCKER-USER -j RETURN -s 172.16.0.0/12
-A DOCKER-USER -j RETURN -s 192.168.0.0/16
-A DOCKER-USER -j ufw-docker-logging-deny -m conntrack --ctstate NEW -d 10.0.0.0/8
-A DOCKER-USER -j ufw-docker-logging-deny -m conntrack --ctstate NEW -d 172.16.0.0/12
-A DOCKER-USER -j ufw-docker-logging-deny -m conntrack --ctstate NEW -d 192.168.0.0/16
-A DOCKER-USER -j RETURN
-A ufw-docker-logging-deny -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW DOCKER BLOCK] "
-A ufw-docker-logging-deny -j DROP
COMMIT
# END UFW AND DOCKER
为避免特殊容器网络互联被阻断,向ufw添加额外放行规则:
sudo ufw route allow from 172.0.0.0/8 to 172.0.0.0/8
sudo ufw reload
可通过在其他主机执行以下命令检查防护效果:
# 扫描最常用的 1000 个端口
nmap IP
# 扫描全部 65535 个端口(耗时较长)
nmap -p- IP
# 探测端口上的服务版本和防火墙状态
nmap -sV -Pn IP
Comments NOTHING