自动化防火墙放行目标域名IP

powershell 复制代码
#!/bin/bash
# 设置要获取IP地址的域名
domain="yourdomain.com"

# 获取域名的IP地址
new_ip=$(dig +short A $domain)

# 移除之前添加放行的IP地址(通过备注找它的编号)
rule_number=$(iptables -L INPUT -n --line-numbers -v | awk -v domain="${domain}" '$0 ~ "Allow from " domain {print $1}')

# 如果有就删除
if [ -n "$rule_number" ]; then
    iptables -D INPUT $rule_number
fi

# 添加新的IP地址到iptables规则(带备注)
iptables -A INPUT -s $new_ip -m comment --comment "Allow from $domain" -j ACCEPT

#保存规则,如果有docker请省略这一步
service iptables save

正则表达式部分的解释:

  • Allow from : 这是一个固定的文本字符串,表示规则中的注释内容开始部分。
  • domain: 这是一个变量,其中存储了您要匹配的注释内容。在命令中使用-v选项将该变量传递给awk命令。
  • ~操作符: 在awk中,~操作符用于进行模式匹配。
  • $0: 这是awk中的一个特殊变量,表示整个输入行。
  • ~操作符后面的部分 "Allow from " domain 是我们的模式。它指示awk在输入行中查找以"Allow from
    "开头,后面跟着domain变量的内容的部分。

因此,使用模式"Allow from " domain,我们可以匹配包含所需注释的规则行。一旦找到匹配的行,print $1将打印该行的第一个字段,即规则行号。

有docker为啥不保存:

在使用Docker时,iptables规则是由Docker自动管理的。Docker使用自己的网络桥接和转发机制来管理容器之间的通信,它会自动更新iptables规则以适应容器的网络需求

当你运行service iptables save命令时,它会尝试保存当前系统的iptables规则到配置文件中,但是这个命令不会考虑Docker所管理的规则。

如果你希望保存Docker所管理的iptables规则,你可以使用Docker自带的命令来实现。例如,使用docker save命令将Docker的iptables规则保存到文件中,然后在需要的时候使用docker load命令重新加载规则。

另外,从Docker 1.13版本开始,Docker引入了新的命令docker savedocker load,用于保存和加载容器的状态,包括网络规则。这样你就可以使用docker save命令保存Docker的状态,并在需要的时候使用docker load命令重新加载状态,包括iptables规则。

总之,如果你在使用Docker,并且希望保存iptables规则,建议使用Docker提供的相关命令来管理和保存规则。

相关推荐
热爱Liunx的丘丘人12 分钟前
Ansible-doc及常用模块
linux·运维·服务器·ansible
SPC的存折24 分钟前
D在 Alpine 容器中手动搭建 Discuz 全攻略(包含镜像一键部署脚本,可直接用)
linux·数据库·mysql·缓存
tianyuanwo1 小时前
OS/DevOps程序员切入Harness Engineering的入门与进阶指南
运维·devops·harness
飞飞传输1 小时前
国产化FTP替代方案哪个好?选对平台让传输更安全高效
大数据·运维·安全
一生了无挂1 小时前
自己编译RustDesk,并将自建ID服务器和key信息写入客户端
运维·服务器
qq_452396231 小时前
【工程实战】第十篇:性能监控集成 —— 自动化脚本的“副产品”:不仅仅是功能测试
python·功能测试·自动化
王飞飞不会飞2 小时前
Mac 安装Hermes Agent 过程记录
运维·深度学习·机器学习
徐子元竟然被占了!!2 小时前
Nginx
运维·nginx
feng_you_ying_li2 小时前
linux之运行状态(2),内核链表与进程状态
linux
星座5282 小时前
科研效率革命:基于Hermes Agent的Meta分析自动化工作流——涵盖随机效应模型、亚组分析与Egger检验
自动化·meta分析·hermes agent