温馨提示×

ubuntu防火墙如何设置定时任务

小樊
45
2025-10-06 04:16:49
栏目: 智能运维

Ubuntu防火墙(UFW)定时任务设置指南

在Ubuntu系统中,UFW(Uncomplicated Firewall)是基于iptables的前端防火墙工具,用于简化防火墙规则的管理。若需要让UFW规则随时间动态调整(如定期开关、备份或切换策略),可通过cron定时任务实现。以下是具体操作步骤及示例:

一、前置准备

  1. 确保cron服务运行
    cron是Ubuntu默认的定时任务调度器,需先确认其已安装并启动:

    sudo apt update && sudo apt install cron  # 安装cron(若未安装)
    sudo systemctl start cron                  # 启动cron服务
    sudo systemctl enable cron                 # 设置开机自启动
    
  2. 掌握cron时间格式
    cron任务的执行时间由5个时间字段和命令组成,格式为:
    分 时 日 月 周 命令
    示例:

    • 0 2 * * *:每天凌晨2点执行;
    • */10 * * * *:每10分钟执行一次;
    • 0 8-17 * * 1-5:周一至周五8:00-17:00每小时执行(工作时间)。

二、创建UFW定时任务脚本

定时任务通常通过Shell脚本调用UFW命令实现,脚本需具备可执行权限。以下是常见场景的脚本示例:

1. 备份UFW规则

定期备份UFW规则可防止规则丢失,便于恢复:

#!/bin/bash
# 脚本路径:/usr/local/scripts/ufw_backup.sh
BACKUP_DIR="/path/to/ufw_backups"  # 备份目录(需提前创建)
DATE=$(date +%Y-%m-%d_%H-%M-%S)    # 当前时间(用于文件名)

# 创建备份目录(若不存在)
sudo mkdir -p "$BACKUP_DIR"

# 导出UFW规则到备份文件
sudo ufw show rules > "$BACKUP_DIR/ufw_rules_$DATE.txt"
sudo ufw status verbose > "$BACKUP_DIR/ufw_status_$DATE.txt"

echo "[$(date)] UFW规则备份完成:$BACKUP_DIR/ufw_rules_$DATE.txt" >> /var/log/ufw_backup.log

赋予权限

sudo chmod +x /usr/local/scripts/ufw_backup.sh

2. 定时开关UFW(测试用)

测试期间,为避免误操作导致无法连接,可设置定时开关:

#!/bin/bash
# 脚本路径:/usr/local/scripts/ufw_toggle.sh
LOG_FILE="/var/log/ufw_toggle.log"

# 检查UFW当前状态(1表示启用,0表示禁用)
STATUS=$(sudo ufw status | grep -c "Status: active")

if [ "$STATUS" -eq 1 ]; then
    sudo ufw disable
    echo "$(date):UFW已禁用" >> "$LOG_FILE"
else
    sudo ufw enable
    echo "$(date):UFW已启用" >> "$LOG_FILE"
fi

赋予权限

sudo chmod +x /usr/local/scripts/ufw_toggle.sh

三、添加cron定时任务

通过crontab命令编辑当前用户的定时任务(若需root权限,使用sudo crontab -e):

1. 添加备份任务(每天凌晨2点)

crontab -e

在文件末尾添加以下行:

0 2 * * * /usr/local/scripts/ufw_backup.sh

保存并退出(vi编辑器按Esc:wq;nano编辑器按Ctrl+XYEnter)。

2. 添加定时开关任务(每10分钟切换一次)

crontab -e

添加以下行:

*/10 * * * * /usr/local/scripts/ufw_toggle.sh

注意:此任务仅用于测试,生产环境不建议频繁开关防火墙!

四、验证定时任务

  1. 查看任务列表

    crontab -l  # 查看当前用户的cron任务
    sudo crontab -l  # 查看root用户的cron任务(若有)
    
  2. 查看执行日志

    • 通过journalctl查看cron服务日志:
      sudo journalctl -u cron -f  # 实时查看cron日志
      
    • 查看脚本自定义日志(如/var/log/ufw_backup.log/var/log/ufw_toggle.log):
      tail -f /var/log/ufw_backup.log
      

五、高级场景:基于时间的动态规则调整

若需实现“工作时间允许HTTP/HTTPS流量,非工作时间禁止”的策略,可编写更复杂的脚本:

#!/bin/bash
# 脚本路径:/usr/local/scripts/ufw_time_based.sh
HOUR=$(date +%H)  # 当前小时(0-23)

# 工作时间:8:00-17:00(允许80/443端口)
if [ "$HOUR" -ge 8 ] && [ "$HOUR" -lt 17 ]; then
    sudo ufw allow 80/tcp
    sudo ufw allow 443/tcp
    sudo ufw delete deny 80/tcp  # 删除之前的拒绝规则(若有)
    sudo ufw delete deny 443/tcp
    echo "$(date):工作时间,已开启HTTP/HTTPS" >> /var/log/ufw_time_based.log
else
    sudo ufw deny 80/tcp
    sudo ufw deny 443/tcp
    echo "$(date):非工作时间,已关闭HTTP/HTTPS" >> /var/log/ufw_time_based.log
fi

添加cron任务(每30分钟检查一次):

crontab -e

添加:

*/30 * * * * /usr/local/scripts/ufw_time_based.sh

注意事项

  1. 权限问题:UFW命令需root权限,脚本中必须使用sudo(cron任务默认以当前用户身份运行,若需root权限,需用sudo crontab -e编辑)。
  2. 测试脚本:添加定时任务前,先手动运行脚本,确保命令正确无误。
  3. 日志监控:定期检查脚本日志,及时发现执行失败问题(如权限不足、命令不存在)。
  4. 避免冲突:若同时使用UFW图形界面和定时任务,需确保两者规则一致,避免混乱。

通过以上步骤,可实现UFW规则的定时自动化管理,提升系统安全性与运维效率。

0