使用环境一般在内网没有防火墙设备保护的情况可以使用linux自带防火墙来屏蔽其它网络扫描
文件说明
| 文件 | 类型 | 适用系统 | 说明 |
|---|
firewall-config.sh | Shell 脚本 | 所有 Linux | iptables 配置脚本 |
nftables-config.nft | nftables 配置 | RHEL 8+/Debian 10+/Ubuntu 20.04+ | 现代防火墙配置 |
firewall-README.md | 文档 | - | 本说明文档 |
🔥 iptables 配置
使用方法
# 1. 添加执行权限chmod +x /tmp/documents/firewall-config.sh# 2. 执行脚本(需要 root 权限)sudo /tmp/documents/firewall-config.sh# 3. 查看规则sudo iptables -L -n -v# 4. 保存规则sudo iptables-save > /etc/iptables/rules.v4
配置说明
默认策略:
INPUT: DROP(拒绝所有入站)
OUTPUT: ACCEPT(允许所有出站)
FORWARD: DROP(拒绝转发)
允许的端口:
| 端口 | 协议 | 说明 |
|---|
| 22 | TCP | SSH(带暴力破解防护) |
| 80 | TCP | HTTP |
| 443 | TCP | HTTPS |
| 8080 | TCP | API(可选) |
| 3306 | TCP | MySQL(仅内网) |
安全特性:
🛡️ nftables 配置
使用方法
# 1. 检查 nftables 状态sudo systemctl status nftables# 2. 应用配置sudo nft -f /tmp/documents/nftables-config.nft# 3. 查看规则sudo nft list ruleset# 4. 保存配置sudo nft list ruleset > /etc/nftables.conf# 5. 启用服务sudo systemctl enable nftablessudo systemctl start nftables
配置特点
优势(相比 iptables):
更简洁的语法
更好的性能
支持 IPv4/IPv6 统一配置
内置集合和映射
原子规则更新
安全特性:
✅ IP 白名单/黑名单
✅ SSH 速率限制
✅ SYN Flood 防护
✅ 端口扫描防护
✅ 连接跟踪
✅ 限制日志量
📋 配置自定义
修改端口
编辑脚本/配置文件,修改以下变量:
# iptables (firewall-config.sh)SSH_PORT="22"HTTP_PORT="80"HTTPS_PORT="443"API_PORT="8080"DB_PORT="3306"INTERNAL_NETWORK="192.168.1.0/24"
# nftables (nftables-config.nft)define ssh_port = 22define http_port = 80define https_port = 443define api_port = 8080define db_port = 3306define internal_net = "192.168.1.0/24"
添加 IP 白名单
nftables:
set ip_whitelist { type ipv4_addr elements = { 192.168.1.100, 10.0.0.50 }}
iptables -A INPUT -s 192.168.1.100 -j ACCEPT
🔧 常用命令
iptables
# 查看规则iptables -L -n -viptables -L -n -v --line-numbers# 查看 NAT 规则iptables -t nat -L -n -v# 删除规则iptables -D INPUT <行号># 清空规则iptables -F# 保存规则iptables-save > /etc/iptables/rules.v4# 恢复规则iptables-restore < /etc/iptables/rules.v4# 查看连接跟踪conntrack -L# 实时监控watch -n1 'iptables -L -n -v | head -20'
nftables
# 查看规则nft list rulesetnft list ruleset -a # 显示句柄# 查看特定表nft list table inet filter# 删除规则nft delete rule inet filter input handle <句柄># 清空规则nft flush ruleset# 检查配置语法nft -c -f /etc/nftables.conf# 查看集合内容nft list set inet filter ip_whitelist# 添加 IP 到黑名单nft add element inet filter ip_blacklist { 1.2.3.4 }# 实时监控watch -n1 'nft list ruleset | head -50'
🚨 故障排除
无法 SSH 连接
# 1. 检查 SSH 规则iptables -L INPUT -n | grep 22# 2. 临时允许所有 SSH(调试用)iptables -I INPUT -p tcp --dport 22 -j ACCEPT# 3. 检查 SSH 服务状态systemctl status sshd# 4. 查看日志journalctl -u sshd -f
规则不生效
# 1. 检查默认策略iptables -L -n# 2. 检查是否有其他规则冲突iptables -L -n -v --line-numbers# 3. 检查服务状态systemctl status iptablessystemctl status nftables# 4. 查看内核日志dmesg | grep -i firewalljournalctl -k | grep -i drop
恢复访问(如果被锁在外面)
方法 1:通过控制台访问
方法 2:定时清空规则(危险!)
# 在执行新规则前,设置定时清空(crontab -l 2>/dev/null; echo "*/5 * * * * /usr/sbin/iptables -F") | crontab -# 应用新规则后记得删除crontab -r
📊 性能对比
| 特性 | iptables | nftables |
|---|
| 语法 | 复杂 | 简洁 |
| 性能 | 较好 | 更好 |
| IPv6 支持 | 独立表 | 统一配置 |
| 规则更新 | 逐条 | 原子 |
| 学习曲线 | 陡峭 | 中等 |
| 推荐场景 | 旧系统 | 新系统 |
🎯 最佳实践
先测试后应用
在测试环境验证规则
使用 iptables-apply 或定时恢复
保持规则简洁
启用日志但限制量
使用 limit 模块限制日志频率
定期查看日志分析攻击
备份配置
监控告警