content/writing/bind9-dns-install.md (4403B)
1 ---
2 title: "Bind 9 DNS Server 설치"
3 titleKo: ""
4 date: 2024-11-05
5 deck: ""
6 type:
7 tags: []
8 draft:
9 ---
10
11 AWS Lightsail Amazon linux 인스턴스 호스트에 BIND 9 DNS Server 설치 후 설정까지 진행 해봤다.
12
13 ## BIND 9 설치 및 기본 설정
14
15 **패키지 매니저 업데이트**
16
17 ```bash
18 sudo yum update -y
19 ```
20
21 **BIND 9 설치**
22
23 ```bash
24 sudo yum install -y bind bind-utils
25 ```
26
27 **BIND 9 설정**
28
29 ```bash
30 sudo vi /etc/named.conf
31 ```
32
33 **모든 IP에서 쿼리를 허용**
34
35 ```
36 allow-query { any; };
37 ```
38
39 **IPv6 주소에서 요청을 수신하지 않도록 설정**
40
41 ```
42 options {
43 listen-on-v6 { none; };
44 };
45 ```
46
47 ## 보안 옵션 설정
48
49 ### DNSSEC (DNS Security Extensions) 사용
50
51 DNSSEC은 DNS 쿼리 응답이 인증되지 않은 경우, 그 응답을 무효화함으로써 스푸핑 공격을 막는 데 효과적. DNS 서버에서 DNSSEC을 사용하면 클라이언트는 응답이 신뢰할 수 있는지 확인할 수 있음.
52
53 **DNSSEC 활성화(Default)**
54
55 ```
56 options {
57 dnssec-enable yes;
58 dnssec-validation yes;
59 };
60 ```
61
62 ### DNS 캐시 중독 (DNS Cache Poisoning) 방지
63
64 캐시 중독은 공격자가 잘못된 데이터를 DNS 서버의 캐시에 저장하여, 그 데이터를 클라이언트에게 반환하도록 만드는 공격이다. 재귀적인 DNS 서버에서 문제가 될 수 있다.
65
66 **무작위 포트 및 ID 사용(DNSSEC만 활성화 해도 충분)**
67
68 쿼리의 소스 포트와 트랜잭션 ID를 무작위로 사용하여 예측 불가능하게 만듦으로써 캐시 중독 공격을 어렵게한다.
69
70 ```
71 options {
72 query-source address * port *;
73 };
74 ```
75
76 ### DDoS 공격 (DNS Amplification) 방지
77
78 DNS 증폭 공격은 DNS 서버를 이용해 공격 대상에게 대량의 트래픽을 전송하는 DDoS 공격의 일종이다.
79
80 **Rate Limiting (RRL) 적용(BIND 9.9.4 이상에서 기본적으로 지원)**
81
82 rate-limit 옵션 추가
83
84 ```
85 options {
86 rate-limit {
87 responses-per-second 10; # 초당 응답 제한 (기본값은 5)
88 window 5; # RRL 윈도우 크기 (초 단위)
89 slip 2; # 1/x 확률로 응답을 전송함 (2 = 50%)
90 qps-scale 250; # 응답 제한을 조정할 클라이언트 수 (기본값은 1000)
91 ipv4-prefix-length 24; # IPv4 네트워크 그룹화 범위 (/24 기본값)
92 ipv6-prefix-length 56; # IPv6 네트워크 그룹화 범위 (/56 기본값)
93 exempt-clients { localhost; }; # RRL 제한에서 제외할 클라이언트
94 };
95 };
96 ```
97
98 - responses-per-second : 한 클라이언트 IP에 대해 초당 허용되는 응답 수. 초과하는 경우 응답을 제한한다. 기본값은 5이며, 이를 10으로 설정한다.
99 - window : 쿼리를 계산할 시간 창을 설정한다. 5초 동안 응답을 계산하는 시간 창을 설정한다.
100 - slip : RRL이 활성화된 경우, 몇 개의 쿼리 응답을 드롭하고 몇 개를 허용할지 설정한다. slip 2는 50% 확률로 응답을 전송하겠다는 뜻이다.
101 - qps-scale : 응답 제한을 조정할 클라이언트의 수를 설정한다.
102 - ipv4-prefix-length 및 ipv6-prefix-length : 네트워크 그룹화에 사용할 네트워크 길이를 설정한다.
103 - exempt-clients : RRL 제한에서 제외할 클라이언트를 설정한다.
104
105 ### BIND 9 서비스 재시작 및 부팅 시 자동 실행 설정
106
107 ```bash
108 sudo systemctl restart named
109 sudo systemctl enable named
110 ```
111
112 ### 해당 인스턴스 방화벽 규칙에 DNS(53 / TCP, UDP) 추가
113
114 
115
116 ### BIND 9 서버가 제대로 설정되었는지 확인
117
118 
119
120 ## 클라이언트에서 테스트
121
122 Windows
123
124 ```sh
125 nslookup example.com <BIND 9 서버의 IP 주소>
126 ```
127
128 
129
130 Linux
131
132 ```bash
133 dig @<BIND 9 서버의 IP 주소> example.com
134 ```
135
136 
137
138 
139
140 *DNS 요청, 응답 패킷 확인*
141
142 ### 테스트 결과 정상이라면 DNS 서버 변경
143
144 **Linux에서 DNS 서버 설정 변경**
145
146 /etc/resolv.conf 파일을 편집하여 BIND 9 서버의 IP 주소를 지정
147
148 ```bash
149 sudo vim /etc/resolv.conf
150 ```
151
152 파일에 다음을 추가
153
154 ```
155 nameserver <BIND 9 서버의 IP 주소>
156 ```