dns/bind: rework dnsbl feature

@mimugmail, this is worth at least a beer :D
This commit is contained in:
Franco Fichtner
2018-07-18 15:38:30 +00:00
parent 539bdc447d
commit 1c00dfccd9
5 changed files with 55 additions and 88 deletions
@@ -50,11 +50,8 @@ class ServiceController extends ApiMutableServiceControllerBase
{
$this->sessionClose();
$mdl = new Dnsbl();
if (!empty((string)$mdl->type)) {
$list = (string)$mdl->type;
}
$backend = new Backend();
$response = $backend->configdpRun('bind dnsbl', $list);
$response = $backend->configdpRun('bind dnsbl', array((string)$mdl->type));
return array("response" => $response);
}
}
@@ -8,7 +8,7 @@
<field>
<id>dnsbl.type</id>
<label>Type of DNSBL</label>
<type>dropdown</type>
<type>select_multiple</type>
<help>Select which kind of DNSBL you want to use.</help>
</field>
</form>
@@ -8,12 +8,11 @@
<Required>Y</Required>
</enabled>
<type type="OptionField">
<default>all</default>
<Required>N</Required>
<Multiple>Y</Multiple>
<OptionValues>
<ad>ADWare Lists</ad>
<mw>Malware Lists</mw>
<all>All in one</all>
</OptionValues>
</type>
</items>
+51 -80
View File
@@ -1,6 +1,7 @@
#!/bin/sh
# Copyright (c) 2018 Michael Muenz <m.muenz@gmail.com>
# Copyright (c) 2018 Franco Fichtner <franco@opnsense.org>
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
@@ -25,108 +26,78 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
SORT=/usr/bin/sort
UNIQ=/usr/bin/uniq
CD=/usr/bin/cd
CAT=/bin/cat
AWK=/usr/bin/awk
FETCH="/usr/bin/fetch -qT 5"
RM="/bin/rm -f"
RAWDIR="/usr/local/etc/namedb/raw/"
WORKDIR="/usr/local/etc/namedb/"
DESTDIR="/usr/local/etc/namedb"
WORKDIRPREFIX="/tmp/binddnsbl."
WORKDIR="${WORKDIRPREFIX}${$}"
/bin/mkdir -p $RAWDIR
/usr/sbin/chown bind:bind $RAWDIR
/bin/chmod -R 755 $RAWDIR
rm -rf ${WORKDIRPREFIX}*
mkdir -p ${WORKDIR}
# Download all lists:
# EasyList:
easylist() {
$CD $RAWDIR
${FETCH} https://justdomains.github.io/blocklists/lists/easylist-justdomains.txt -o easylist-raw
sed "/\.$/d" easylist-raw > easylist
${RM} easylist-raw
# EasyList
${FETCH} https://justdomains.github.io/blocklists/lists/easylist-justdomains.txt -o ${WORKDIR}/easylist-raw
sed "/\.$/d" ${WORKDIR}/easylist-raw > ${WORKDIR}/easylist
rm ${WORKDIR}/easylist-raw
}
# EasyPrivacy:
easyprivacy() {
$CD $RAWDIR
${FETCH} https://justdomains.github.io/blocklists/lists/easyprivacy-justdomains.txt -o easyprivacy-raw
sed "/\.$/d" easyprivacy-raw > easyprivacy
${RM} easyprivacy-raw
# EasyPrivacy
${FETCH} https://justdomains.github.io/blocklists/lists/easyprivacy-justdomains.txt -o ${WORKDIR}/easyprivacy-raw
sed "/\.$/d" ${WORKDIR}/easyprivacy-raw > ${WORKDIR}/easyprivacy
rm ${WORKDIR}/easyprivacy-raw
}
# AdGuard:
adguard() {
$CD $RAWDIR
${FETCH} https://justdomains.github.io/blocklists/lists/adguarddns-justdomains.txt -o adguard-raw
sed "/\.$/d" adguard-raw > adguard
${RM} adguard-raw
# AdGuard
${FETCH} https://justdomains.github.io/blocklists/lists/adguarddns-justdomains.txt -o ${WORKDIR}/adguard-raw
sed "/\.$/d" ${WORKDIR}/adguard-raw > ${WORKDIR}/adguard
rm ${WORKDIR}/adguard-raw
}
# NoCoin:
nocoin() {
$CD $RAWDIR
${FETCH} https://justdomains.github.io/blocklists/lists/nocoin-justdomains.txt -o nocoin
# NoCoin
${FETCH} https://justdomains.github.io/blocklists/lists/nocoin-justdomains.txt -o ${WORKDIR}/nocoin
}
# RansomWare Tracker abuse.ch:
rwtracker() {
$CD $RAWDIR
${FETCH} https://ransomwaretracker.abuse.ch/downloads/RW_DOMBL.txt -o rwtracker-comments
sed '/^#/ d' rwtracker-comments > rwtracker
${RM} rwtracker-comments
# RansomWare Tracker abuse.ch
${FETCH} https://ransomwaretracker.abuse.ch/downloads/RW_DOMBL.txt -o ${WORKDIR}/rwtracker-comments
sed '/^#/ d' ${WORKDIR}/rwtracker-comments > ${WORKDIR}/rwtracker
rm ${WORKDIR}/rwtracker-comments
}
# MalwareDomains:
mwdomains() {
$CD $RAWDIR
${FETCH} http://malwaredomains.lehigh.edu/files/justdomains -o malwaredomains-comments
sed '/^#/ d' malwaredomains-comments > malwaredomains
${RM} malwaredomains-comments
# MalwareDomains
${FETCH} http://malwaredomains.lehigh.edu/files/justdomains -o ${WORKDIR}/malwaredomains-comments
sed '/^#/ d' ${WORKDIR}/malwaredomains-comments > ${WORKDIR}/malwaredomains
rm ${WORKDIR}/malwaredomains-comments
}
# Put all files in correct format
convert() {
$CD $RAWDIR
FILES=`ls -1`
install() {
# Put all files in correct format
for FILE in $(find ${WORKDIR} -type f); do
awk '{ print "zone " $1 " " $2 " {type master; file \"/usr/local/etc/namedb/master/blacklist.db\"; };" }' ${FILE} | sort -u > ${FILE}.inc
done
# Merge resulting files (/dev/null in case there are none)
cat $(find ${WORKDIR} -type f -name "*.inc") /dev/null | sort -u > ${DESTDIR}/dnsbl.inc
chown bind:bind ${DESTDIR}/dnsbl.inc
rm -rf ${WORKDIR}
}
for i in $FILES; do
$AWK '{ print "zone " $1 " " $2 " {type master; file \"/usr/local/etc/namedb/master/blacklist.db\"; };" }' $i | $SORT | $UNIQ > $WORKDIR/$i.inc
for CAT in $(echo ${1} | tr ',' ' '); do
case "${CAT}" in
ad)
easylist
easyprivacy
nocoin
;;
mw)
rwtracker
mwdomains
;;
esac
done
}
# Depending on the options
RETVAL=0
case "$1" in
"")
echo "Usage: $0 ad|mw|all"
RETVAL=1
;;
ad)
easylist
easyprivacy
nocoin
convert
$CAT $WORKDIR/easylist.inc $WORKDIR/easyprivacy.inc $WORKDIR/adguard.inc | $SORT | $UNIQ > $WORKDIR/all.inc
;;
mw)
rwtracker
mwdomains
convert
$CAT $WORKDIR/nocoin.inc $WORKDIR/rwtracker.inc $WORKDIR/malwaredomains.inc | $SORT | $UNIQ > $WORKDIR/all.inc
;;
all)
easylist
easyprivacy
nocoin
rwtracker
mwdomains
convert
$CAT $WORKDIR/easylist.inc $WORKDIR/easyprivacy.inc $WORKDIR/adguard.inc $WORKDIR/nocoin.inc $WORKDIR/rwtracker.inc $WORKDIR/malwaredomains.inc | $SORT | $UNIQ > $WORKDIR/all.inc
;;
esac
exit $RETVAL
install
@@ -36,7 +36,7 @@ zone "0.ip6.arpa" { type master; file "/usr/local/etc/namedb/master/localh
{% if helpers.exists('OPNsense.bind.dnsbl.enabled') and OPNsense.bind.dnsbl.enabled == '1' %}
{% if helpers.exists('OPNsense.bind.dnsbl.type') and OPNsense.bind.dnsbl.type != '' %}
include "/usr/local/etc/namedb/all.inc";
include "/usr/local/etc/namedb/dnsbl.inc";
{% endif %}
{% endif %}