
Мой провайдер позволяет мне запускать DNS-сервер, пока он не отвечает на неавторитетные запросы. Это означает отсутствие ответа вообще. Я настроил его так, чтобы он отклонял неавторитетные запросы, например, так;
> tweakers.net
Server: my.server.net
Address: my.ip#53
** server can't find tweakers.net: REFUSED
Но, видимо, этого уже недостаточно. Нужно просто не отправлять ответ вообще. Это вообще возможно?
Это мой текущий файл настроек;
options {
directory "/var/cache/bind";
recursion yes;
allow-recursion { internal; };
allow-transfer { *secondary dns ip*; };
dnssec-enable yes;
dnssec-validation yes;
auth-nxdomain no; # conform to RFC1035
filter-aaaa-on-v4 yes;
};
Мой внутренний ACL
acl internal {
192.168.40.0/24;
127.0.0.1;
10.0.3.1/24;
};
Может быть, я не то гуглю, но такой опции я не нахожу.
решение1
Вам необходимо отключить рекурсию.
Это не позволит ему отвечать на запросы для неавторитетных зон.
Но он все равно ответит SERVFAIL.
решение2
Нашел решение iptables здесь. Похожий вопрос размещен на Serverfault. https://serverfault.com/questions/438515/bind-blackhole-for-invalid-recursive-queries
С помощью Bind это сделать невозможно. Однако можно использовать правила брандмауэра iptables, чтобы блокировать ответы на все рекурсивные запросы.
решение3
Как и вы, я не люблю, когда мой сервер участвует в DDOS, даже если он отвечает небольшими 30-байтовыми пакетами. Также по некоторым причинам я не могу использовать iptables для блокировки поддельных запросов. Уязвимость сервера была исправлена 3 месяца назад, но ботнет все еще отправляет поддельные запросы на сервер.
Итак, в результате вы можете использовать этот простой патч, чтобы не отправлять ответ REFUSED (запросы будут отклоняться):
--- bind9-9.9.5.dfsg/bin/named/query.c.orig Thu Aug 6 21:56:57 2020
+++ bind9-9.9.5.dfsg/bin/named/query.c Thu Aug 6 22:08:15 2020
@@ -1038,7 +1038,7 @@
sizeof(msg));
ns_client_log(client, DNS_LOGCATEGORY_SECURITY,
NS_LOGMODULE_QUERY, ISC_LOG_INFO,
- "%s denied", msg);
+ "%s dropped", msg);
}
/*
* We've now evaluated the view's query ACL, and
@@ -5809,8 +5809,9 @@
} else
inc_stats(client, dns_nsstatscounter_authrej);
if (!PARTIALANSWER(client))
- QUERY_ERROR(DNS_R_REFUSED);
- } else
+ // QUERY_ERROR(DNS_R_REFUSED);
+ QUERY_ERROR(DNS_R_DROP);
+ } else
QUERY_ERROR(DNS_R_SERVFAIL);
goto cleanup;
}
# diff -u query.c.orig query.c
... в результате вы получаете красивые логи, подобные этому:
Aug 6 21:39:29 topor named[2652]: client 78.180.51.241#43072 (.): query (cache) './ANY/IN' dropped
Aug 6 21:40:00 topor last message repeated 485 times
И не будет ответа «ОТКАЗАНО», если запрос поступил из неавторизованной сети / для неподдерживаемого домена.