Virtualmin支持手动配置电子邮件速率限制的域名。我想创建一个脚本,以自动添加到milter-greylist的域名,并定义其速率限制每小时自动。
当域(example.com)设置为每小时500封电子邮件的速率限制时,它会在/etc/milter-greylist/greylist.conf中添加以下三行
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,可通过执行以下命令找到:
virtualmin list-domains --domain $VIRTUALSERVER_DOM --id-only我尝试在创建服务器时插入这三行,并在删除服务器时删除这三行。我有相当基本的脚本编写技能,并想出了:
#!/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这会导致:
racl whitelist default
ratelimit "domain_"$ID rcpt 500 / 1h
ratelimit "domain_"$ID rcpt 500 / 1h
/etc/milter-greylisting/greylisting.conf有人能建议我需要修复什么吗?
发布于 2014-06-03 19:49:30
您在sed表达式中使用了'引号,因此不会发生bash扩展。下面的脚本应该可以工作。
## 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中测试。希望这能有所帮助。
https://stackoverflow.com/questions/24013445
复制相似问题