我是 Linux 新手,我正在家里安装一个服务器,其中包含以下服务:用于名称解析的 Bind9、ISC-DHCP 服务器/中继、Fw iptables。
据我所知,BIND 有时使用 IPv6 地址而不是 IPv4 来解析查询。
由于我对 IPv6 已经不太熟悉,为了简化我的内部配置并防止通过 IPv6 在我的网络上出现安全问题,我决定在内部网络中禁用 IPv6。
我已将 BIND 仅配置为 IPv4(已添加-u bind -4
),一切正常,直到我在网络中禁用 IPv6 后,BIND 不再解析我的查询。
我添加了以下几行/etc/sysctl.conf
net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1
net.ipv6.conf.lo.disable_ipv6=1
并启用 IPv4 转发
net.ipv4.ip_forward=1
这是我的 BIND9 配置文件
命名的.conf.选项
acl "trusted" {
10.10.1.0/24;
10.10.10.0/24;
10.10.20.0/24;
10.10.30.0/24;
10.10.40.0/24;
192.168.0.0/24;
localhost;
};
options {
directory "/var/cache/bind";
recursion yes;
allow-query { trusted; };
forwarders {
8.8.8.8;
8.8.4.4;
201.21.192.116;
201.21.192.111;
};
forward only;
listen-on { 10.10.1.254;
10.10.10.254;
10.10.20.254;
10.10.30.254;
10.10.40.254;
};
auth-nxdomain no;
version "not current available";
querylog yes;
};
名称.conf.本地
# Forward Zone
zone "internal.home" {
type master;
file "/etc/bind/zones/db.internal.home";
allow-transfer { 10.10.1.254; };
};
# Reverse Zone
# Server IP 10.10.1.10
zone "1.10.10.in-addr.arpa" {
type master;
file "/etc/bind/zones/db.10";
allow-transfer { 10.10.1.254; };
};
数据库.内部.主页
$TTL 604800
@ IN SOA ns1.internal.home. root.internal.home. (
3 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
IN NS ns1.internal.home.
IN NS ns2.internal.home.
ns1.internal.home. IN A 10.10.1.254
ns2.internal.home. IN A 10.10.1.254
server.internal.home. IN A 10.10.1.254
iap225.internal.home. IN A 10.10.1.1
分贝.10
$TTL 604800
@ IN SOA internal.home. root.internal.home. (
3 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
IN NS ns1.internal.home.
IN NS ns2.internal.home.
;
254 IN PTR ns1.internal.home.
254 IN PTR ns2.internal.home.
254 IN PTR server.internal.home.
1 IN PTR iap225.internal.home.
我已经用named-checkconf
和测试了我的配置named-checkzone
,所有输出均正常。
在我的 iptablesrules.v4
文件中我有以下规则:
*nat
:PREROUTING ACCEPT [1679:401995]
:INPUT ACCEPT [592:40310]
:OUTPUT ACCEPT [1740:164981]
:POSTROUTING ACCEPT [509:46285]
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
*filter
:INPUT DROP [1:36]
:FORWARD ACCEPT [20:1358]
:OUTPUT DROP [0:0]
#Reject forwarding communication in the eth0 (Flood atack)
-A FORWARD -i eth0 -o eth0 -j REJECT
# Allow incoming traffic to loopback interface
-A INPUT -i lo -j ACCEPT
#Allow any existing connections or anything related
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
#Allow new connections only from internal network (! means except)
-A INPUT -m state --state NEW ! -i eth0 -j ACCEPT
#Allow HTTP/S incoming connections
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT
#Allow SSH incoming connections only in eth1.10 and from 10.10.10.0
-A INPUT -i eth1.10 -p tcp --dport 22 -s 10.10.10.0/24 -j ACCEPT
#Allow DNS incoming requests only internal
-A INPUT -i eth1+ -p udp --dport 53 -j ACCEPT
-A INPUT -i eth1+ -p tcp --dport 53 -j ACCEPT
#Allow DHCP incoming requests only internal
-A INPUT -i eth1+ -p udp --dport 67:68 -j ACCEPT
#Allow incoming ICMP
-A INPUT -p icmp -m icmp --icmp-type 0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -m limit --limit 2/second --limit-burst 2 -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -p tcp ! --syn -m state --state NEW -j DROP
-A INPUT -f -j DROP
-A INPUT -p tcp --tcp-flags ALL ALL -j DROP
-A INPUT -p tcp --tcp-flags ALL NONE -j DROP
#Allow forward traffic
-A FORWARD -i eth1+ -o eth0 -j ACCEPT
#Allow output traffic
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 20:21 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 25 -j ACCEPT
-A OUTPUT -p udp -m udp --dport 53 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 53 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A OUTPUT -p udp -m udp --dport 80 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 110 -j ACCEPT
-A OUTPUT -p udp -m udp --dport 123 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 143 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A OUTPUT -p udp -m udp --dport 443 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 1900 -j ACCEPT
-A OUTPUT -p udp -m udp --dport 1900 -j ACCEPT
-A OUTPUT -p udp -m udp --dport 5353 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 5938 -j ACCEPT
-A OUTPUT -p udp -m udp --dport 5938 -j ACCEPT
#Allow output ICMP
-A OUTPUT -p icmp -m icmp --icmp-type 0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -p icmp -m icmp --icmp-type 8 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
COMMIT
*mangle
:PREROUTING ACCEPT [226702:271091885]
:INPUT ACCEPT [8236:8159908]
:FORWARD ACCEPT [218466:262931977]
:OUTPUT ACCEPT [8709:7959666]
:POSTROUTING ACCEPT [227009:270858537]
COMMIT
以下是我禁用 IPv6 的测试(所有测试均在服务器上执行)
正在 Ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=50 time=25.0 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=50 time=24.8 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=50 time=27.5 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=50 time=25.1 ms
64 bytes from 8.8.8.8: icmp_seq=5 ttl=50 time=26.7 ms
^C
--- 8.8.8.8 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4003ms
rtt min/avg/max/mdev = 24.835/25.820/27.506/1.068 ms
正在 Ping www.google.com
ping: www.google.com: Temporary failure in name resolution
如果全部设置net.ipv6.conf.*.disable_ipv6
为0
,则一切都正常。
net.ipv6.conf.all.disable_ipv6=0
net.ipv6.conf.default.disable_ipv6=0
net.ipv6.conf.lo.disable_ipv6=0
正在 Ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=50 time=26.0 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=50 time=27.2 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=50 time=26.6 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=50 time=26.2 ms
64 bytes from 8.8.8.8: icmp_seq=5 ttl=50 time=25.6 ms
^C
--- 8.8.8.8 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4006ms
rtt min/avg/max/mdev = 25.633/26.325/27.185/0.524 ms
正在 Ping www.google.com
PING www.google.com (172.217.28.4) 56(84) bytes of data.
64 bytes from eze03s15-in-f4.1e100.net (172.217.28.4): icmp_seq=1 ttl=50 time=26.6 ms
64 bytes from eze03s15-in-f4.1e100.net (172.217.28.4): icmp_seq=2 ttl=50 time=27.1 ms
64 bytes from eze03s15-in-f4.1e100.net (172.217.28.4): icmp_seq=3 ttl=50 time=27.8 ms
64 bytes from eze03s15-in-f4.1e100.net (172.217.28.4): icmp_seq=4 ttl=50 time=27.2 ms
64 bytes from eze03s15-in-f4.1e100.net (172.217.28.4): icmp_seq=5 ttl=50 time=26.0 ms
^C
--- www.google.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4007ms
rtt min/avg/max/mdev = 26.012/26.962/27.795/0.601 ms
我真的被这个问题难住了。我搜索了很多论坛,但没找到解决这个问题的方法。
有人能帮我吗?
执行后我也收到许多此类消息dmesg
。
audit: type=1400 audit(1589236716.310:45): apparmor="DENIED" operation="open" profile="/usr/sbin/named" name="/proc/sys/kernel/random/boot_id" pid=894 comm="named" requested_mask="r" denied_mask="r" fsuid=0 ouid=0
我向大家致以最诚挚的问候。
拉斐尔。
答案1
经过多次研究和重新安装后,我认为我已经找到了最适合我的配置,即禁用服务器中的所有 IPv6。
首先,我使用 grub 禁用了 IPv6。以下是我在 grub 中添加的内容/etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1"
这禁用了 Ubuntu 的所有 IPv6。良好的起点。
然后我已经安装了BIND9。
apt install bind9 bind9utils bind9-doc
我对 BIND 的最终配置只有一点变化。我有 4 个使用 VLAN 的内部网络,那么为什么我的受信任 acl 中有许多网络呢?
/etc/bind/named.conf.options
acl "trusted" { localhost; 10.10.1.0/24; 10.10.10.0/24; 10.10.20.0/24; 10.10.30.0/24; 10.10.40.0/24; 192.168.0.0/24; };
options {
directory "/var/cache/bind";
auth-nxdomain no;
recursion yes;
allow-query { trusted; };
forwarders { 8.8.8.8; 8.8.4.4; 201.21.192.116; 201.21.192.111; };
forward only;
listen-on port 53 { localhost; 10.10.1.254; 192.168.0.254; };
version "not current available";
querylog yes;
dnssec-validation no;
};
/etc/bind/named.conf.local
# Forward Zone
zone "pegasus.home" {
type master;
file "/etc/bind/forward.pegasus.home";
};
# Reverse Zone
# Server IP 10.10.1.254
zone "1.10.10.in-addr.arpa" {
type master;
file "/etc/bind/reverse.pegasus.home";
};
/etc/bind/forward.pegasus.home
;
; BIND data file for local loopback interface
;
$TTL 604800
@ IN SOA ns1.pegasus.home. root.ns1.pegasus.home. (
6 ; Serial
604820 ; Refresh
86600 ; Retry
2419600 ; Expire
604600 ) ; Negative Cache TTL
;
@ IN NS ns1.pegasus.home.
ns1 IN A 10.10.1.254
centaurus IN A 10.10.1.254
/etc/bind/reverse.pegasus.home
;
; BIND reverse data file for local loopback interface
;
$TTL 604800
@ IN SOA ns1.pegasus.home. root.pegasus.home. (
21 ; Serial
604820 ; Refresh
864500 ; Retry
2419270 ; Expire
604880 ) ; Negative Cache TTL
;
@ IN NS ns1.pegasus.home.
ns1 IN A 10.10.1.254
254 IN PTR ns1.pegasus.home.
254 IN PTR centaurus.pegasus.home.
IPTables 中的规则没有改变。
我还在所有网络接口中将 IPv6 设置为禁用,并且没有在 sysctl.conf 文件中添加有关 IPv6 的配置。
现在一切正常。
以下是我用作配置起点的地方。
如何在 Linux 中通过 GRUB 禁用 IPv6网址:www.techrepublic.com
如何在 Ubuntu / Debian 上安装和配置 DNS 服务器(Bind 9)在 www.linuxtechi.com
希望这可以帮助其他遇到同样问题的人。