我的基础架构的问题是 SMTP 服务器 IP 地址是动态的。我使用 Vyatta 防火墙,我正在尝试编写一个脚本,每 60 分钟检查一次 SMTP IP,如果 SMTP IP 发生更改,它应该会自动更新防火墙规则(配置)..
#!/bin/bash
SMTP=$(nslookup smtp.sendgrid.net | awk -F': ' 'NR==6 { print $2 }')
SMTP_IP=x.x.x.x
if [ $SMTP != $SMTP_IP ]
then
???
else
echo "GREEN"
fi
我的防火墙规则如下所示:
rule 979 {
destination {
address "Current SMTP IP"
}
outbound-interface bond1
source {
address 10.x.x.x
}
translation {
address 200.x.x.x
}
}
我希望我的脚本根据之前的规则更新防火墙规则。示例:
.
.
.
rule 978 {
destination {
address "NEW SMTP IP"
}
outbound-interface bond1
source {
address 10.x.x.x
}
translation {
address 200.x.x.x
}
}
我是一名网络专家,并且具备一些基本的脚本编写知识。有人可以使用 bash 脚本帮助我解决这个问题吗???
最佳答案
如果我理解您的问题,您想在“目的地”一词下的“地址”行的规则中用一个 IP 地址替换另一个 IP 地址。像这样:
#! /usr/bin/awk -f
/destination/ { N = NR + 1 }
NR == N && /address/ && index($0, OLD_IP) {
pos = index($0, OLD_IP)
print substr($0, 1, pos), NEW_IP
next
}
{ print }
我们寻找带有“目的地”的行,并记录下一行号。在下一行,我们查找“address”,看看旧 IP 地址是否出现在那里。如果是,我们将使用新 IP 地址打印修改后的规则。否则只是打印。
调用为
$ awk -v OLD_IP=x.x.x.x -v NEW_IP=${SMTP} -f rules.awk firewall_rules
它应该可以解决问题。
关于linux - 如何使用 sed 命令在 bash 脚本中追加行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38348991/