首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用sed编辑milter-greylist配置文件

使用sed编辑milter-greylist配置文件
EN

Stack Overflow用户
提问于 2014-06-03 18:59:56
回答 1查看 399关注 0票数 1

Virtualmin支持手动配置电子邮件速率限制的域名。我想创建一个脚本,以自动添加到milter-greylist的域名,并定义其速率限制每小时自动。

当域(example.com)设置为每小时500封电子邮件的速率限制时,它会在/etc/milter-greylist/greylist.conf中添加以下三行

代码语言:javascript
复制
ratelimit "domain_14014450697382" rcpt 500 / 1h
racl blacklist from /.*@example.com/ ratelimit "domain_14014450697382" msg "Message quota exceeded"
racl whitelist from /.*@example.com`

这三行代码被插入到racl whitelist default之上。域名后的数字串即为域名ID,可通过执行以下命令找到:

代码语言:javascript
复制
virtualmin list-domains --domain $VIRTUALSERVER_DOM --id-only

我尝试在创建服务器时插入这三行,并在删除服务器时删除这三行。我有相当基本的脚本编写技能,并想出了:

代码语言:javascript
复制
#!/bin/bash

# script is executed when changes are made to server

## Add new domain to milter-greylist for rate limiting
if [ "$VIRTUALSERVER_ACTION" = "CREATE_DOMAIN" ]; then
ID=$(virtualmin list-domains --domain $VIRTUALSERVER_DOM --id-only) &&
sed -i '/racl whitelist default/ a\ratelimit "domain_"$ID rcpt 500 / 1h\n
racl blacklist from /.*@$VIRTUALSERVER_DOM/ ratelimit "domain_"$ID msg "Message quota exceeded"\n
racl whitelist from /.*@$VIRTUALSERVER_DOM/\n' /etc/milter-greylist/greylist.conf 
fi

## Remove domain from milter-greylist on domain deletion
if [ "$VIRTUALSERVER_ACTION" = "DELETE_DOMAIN" ]; then
ID=$(virtualmin list-domains --domain $VIRTUALSERVER_DOM --id-only) &&
sed -i '/$ID/d' /etc/milter-greylist/greylist.conf &&
sed -i '/$VIRTUALSERVER_DOM/d' /etc/milter-greylist/greylist.conf
fi

这会导致:

代码语言:javascript
复制
racl whitelist default
ratelimit "domain_"$ID rcpt 500 / 1h

ratelimit "domain_"$ID rcpt 500 / 1h

/etc/milter-greylisting/greylisting.conf

有人能建议我需要修复什么吗?

EN

回答 1

Stack Overflow用户

发布于 2014-06-03 19:49:30

您在sed表达式中使用了'引号,因此不会发生bash扩展。下面的脚本应该可以工作。

代码语言:javascript
复制
## Add new domain to milter-greylist for rate limiting
if [ "$VIRTUALSERVER_ACTION" = "CREATE_DOMAIN" ]; then
  ID=$(virtualmin list-domains --domain $VIRTUALSERVER_DOM --id-only)
  sed -i "/racl whitelist default/i \ratelimit \"domain_$ID\" rcpt 500 / 1h\nracl blacklist from /.*@$VIRTUALSERVER_DOM/ ratelimit \"domain_$ID\" msg \"Message quota exceeded\"\nracl whitelist from /.*@$VIRTUALSERVER_DOM/\n" /etc/milter-greylist/greylist.conf 
fi

## Remove domain from milter-greylist on domain deletion
if [ "$VIRTUALSERVER_ACTION" = "DELETE_DOMAIN" ]; then
  ID=$(virtualmin list-domains --domain $VIRTUALSERVER_DOM --id-only)
  sed -i "/$ID/d" /etc/milter-greylist/greylist.conf
  sed -i "/$VIRTUALSERVER_DOM/d" /etc/milter-greylist/greylist.conf
fi

已在GNU sed version 4.2.1中测试。希望这能有所帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24013445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档