1 | BIND: ЗАЩИТА СКАЧИВАНИЯ |
---|
2 | ----------------------- |
---|
3 | |
---|
4 | Мы собираемся ограничить скачивание ваших зон так, что только |
---|
5 | ваши слейвы могут получать копии зон. |
---|
6 | |
---|
7 | Замечание: если группа преподавателя (например, группа 0) является слейвом |
---|
8 | для вашего домена, то "партнер", упомянутый ниже - это преподаватель, |
---|
9 | ответственный за группу 0. |
---|
10 | |
---|
11 | Защита, основанная на списках контроля доступа |
---|
12 | ---------------------------------------------- |
---|
13 | |
---|
14 | Для начала, мы включим список контроля доступа, основанный на |
---|
15 | IP адресе -- на машине AUTH1: |
---|
16 | |
---|
17 | 1. Отредактируйте файл /etc/namedb/named.conf, и в разделе "options", |
---|
18 | определите, кому разрешено скачивание вашей зоны. |
---|
19 | |
---|
20 | allow-transfer { 127.0.0.1; ::1; YOUR_OWN_IP; myslaves; }; |
---|
21 | |
---|
22 | ... замените "YOUR_OWN_IP" на IP адрес вашей машины :) |
---|
23 | |
---|
24 | Теперь нам нужно определить ACL "myslaves". Чтобы достичь этого, |
---|
25 | ПОСЛЕ раздела "options" (найдите символы '};' в конце этого раздела), |
---|
26 | добавьте что-то вроде этого: |
---|
27 | |
---|
28 | (Если слейв для вашего домена "MYTLD" - auth1.grp25, например) |
---|
29 | |
---|
30 | acl myslaves { 10.20.25.1; }; // ACL с IP мастера группы 25 |
---|
31 | |
---|
32 | Это означает "myslaves является списком доступа состоящим из IP-адреса 10.20.25.1." |
---|
33 | |
---|
34 | Если вы также используете NSD, вам также будет нужно добавить IP вашего |
---|
35 | вторичного сервера в вашей сети в ACL (это применимо только если вы |
---|
36 | сконфигурировали NSD в качестве вторичного сервера в вашей группе. |
---|
37 | Если это не так, просто пропустите этот шаг) |
---|
38 | |
---|
39 | acl myslaves { 10.20.25.1; 10.20.X.2; }; // ACL с IP мастера группы 25 и ваш вторичный NSD 10.20.25.2. |
---|
40 | |
---|
41 | Замечание: вводите правильные значения! Вы должны указать IP машины, которая |
---|
42 | является вашим вторичным сервером в классе! |
---|
43 | |
---|
44 | 2. Перезапустите named |
---|
45 | |
---|
46 | $ sudo service named restart |
---|
47 | |
---|
48 | 3. Убедитесь, что вы не поломали скачивание зоны, попросив вашего партнера-слейва выполнить |
---|
49 | скачивание зоны с ВАШЕЙ машины. |
---|
50 | |
---|
51 | С их сервера: |
---|
52 | |
---|
53 | $ dig @auth1.grpX.dns.nsrc.org MYTLD axfr |
---|
54 | |
---|
55 | Убедитесь, что это по-прежнему работает. |
---|
56 | |
---|
57 | 4. Теперь попробуйте попросить кого-нибудь другого в классе, чей сервер |
---|
58 | НЕ упомянут в ACL, попытаться выполнить такую же команду скачивания, как было |
---|
59 | указано выше. |
---|
60 | |
---|
61 | Q: Получилось ли у них это сделать? |
---|
62 | |
---|
63 | Q: Что вы видите в логе /etc/namedb/log/general ? |
---|
64 | Что вы видите в логе /etc/namedb/log/transfers ? |
---|
65 | |
---|
66 | Защита, основанная на TSIG KEY |
---|
67 | ------------------------------ |
---|
68 | |
---|
69 | Вместо использования IP-адресов, мы теперь будем пользоваться криптографическими |
---|
70 | ключами для удостоверения прав на скачивание зоны -- это использует TSIG, |
---|
71 | механизм, с помощью которого коммуникация между мастером и слейвом будет |
---|
72 | удостоверяться при использовании такого ключа. |
---|
73 | |
---|
74 | 1. Выполните: |
---|
75 | |
---|
76 | $ cd /tmp/ |
---|
77 | $ sudo dnssec-keygen -a HMAC-MD5 -b 128 -n HOST mydomain.key |
---|
78 | |
---|
79 | Вы увидите что-то вроде такого: |
---|
80 | |
---|
81 | Kmydomain.key.+157+32373 (последнее число будет другим) |
---|
82 | |
---|
83 | Два файла были созданы: |
---|
84 | |
---|
85 | $ ls -l K* |
---|
86 | |
---|
87 | Kmydomain.key.+157+32373.key |
---|
88 | Kmydomain.key.+157+32373.private |
---|
89 | |
---|
90 | 2. Посмотрите содержимое файла с закрытым ключом: |
---|
91 | |
---|
92 | $ cat Kmydomain.key.+157+32373.private |
---|
93 | |
---|
94 | Вы увидите что-то похожее на: |
---|
95 | |
---|
96 | Private-key-format: v1.2 |
---|
97 | Algorithm: 157 (HMAC_MD5) |
---|
98 | Key: tHTRSKKrmyGmPnzNCf2IRA== |
---|
99 | Bits: AAA= |
---|
100 | |
---|
101 | ... "Key:" здесь - важная для нас информация, поэтому скопируйте |
---|
102 | "tHTRSKKrmyGmPnzNCf2IRA==", но конечно не тот вариант что вверху, |
---|
103 | а тот, который находится в ВАШЕМ файле :) |
---|
104 | |
---|
105 | Мы его используем на следующих шагах. |
---|
106 | |
---|
107 | 3. Измените ваш named.conf |
---|
108 | |
---|
109 | $ cd /etc/namedb/ |
---|
110 | |
---|
111 | Отредактируйте файл, и измените блок allow-transfer, так что он выглядит |
---|
112 | следующим образом: |
---|
113 | |
---|
114 | options { |
---|
115 | ... |
---|
116 | allow-transfer { 127.0.0.1; ::1; }; // myslaves убраны! |
---|
117 | ... |
---|
118 | }; |
---|
119 | |
---|
120 | Замечание: мы убрали "myslaves" |
---|
121 | |
---|
122 | Теперь, после раздела "options", в конце файла, добавьте декларацию ключа |
---|
123 | |
---|
124 | key "mydomain-key" { |
---|
125 | algorithm hmac-md5; |
---|
126 | secret "tHTRSKKrmyGmPnzNCf2IRA=="; // Здесь ваш НАСТОЯЩИЙ ключ! |
---|
127 | |
---|
128 | }; |
---|
129 | |
---|
130 | Не забудьте поменять "mydomain" на имя вашего домена! |
---|
131 | |
---|
132 | Измение определения вашей зоны: |
---|
133 | |
---|
134 | zone "MYTLD" { |
---|
135 | type master; |
---|
136 | file "/etc/namedb/master/mytld"; |
---|
137 | |
---|
138 | allow-transfer { key mydomain-key; }; // <-- добавьте это! |
---|
139 | }; |
---|
140 | |
---|
141 | Как вы можете увидеть, мы добавили блок "allow-transfer", |
---|
142 | разрешая скачивание зоны держателям ключа "mydomain-key". |
---|
143 | |
---|
144 | Замечание: блок allow-transfer теперь находится ВНУТРИ определения зоны, |
---|
145 | а не глобально внутри раздела "options" -- BIND может управлять правами |
---|
146 | на скачивание либо глобально, либо отдельно для индивидуальной зоны. |
---|
147 | Мы могли бы разрешить скачивание ГЛОБАЛЬНО (для всех зон), если бы |
---|
148 | мы оставили блок allow-transfer в главном разделе "options". |
---|
149 | |
---|
150 | 4. Перезапустите named |
---|
151 | |
---|
152 | $ sudo service named restart |
---|
153 | |
---|
154 | 5. Попытайтесь скачать зону с ДРУГОЙ машины -- попросите ваших соседей сделать: |
---|
155 | |
---|
156 | $ dig @10.20.XX.1 MYTLD axfr |
---|
157 | |
---|
158 | Загляните в /etc/namedb/log/general и в /etc/namedb/log/transfers |
---|
159 | |
---|
160 | Q: На что вы обратили внимание? |
---|
161 | |
---|
162 | 6. Потом, попросите их попытаться снова с ключом: |
---|
163 | |
---|
164 | $ dig @10.20.XX.1 axfr mydomain -y mydomain-key:tHTRSKKrmyGmPnzNCf2IRA== |
---|
165 | |
---|
166 | Q: Что произошло теперь? |
---|
167 | |
---|
168 | Загляните в логи снова, особенно в /etc/namedb/log/transfers |
---|
169 | |
---|
170 | |
---|
171 | 7. На СЛЕЙВЕ вашего партнера (ваш вторичный сервер - опять-таки, это может |
---|
172 | бфть ваш преподаватель, если он обеспечивает вторичный сервис для вашего |
---|
173 | домена). |
---|
174 | |
---|
175 | Сначала попросите вашего партнера удалить их копию вашей зоны: |
---|
176 | |
---|
177 | - Пусть он уберет зону из /etc/namedb/slave/MYTLD -- |
---|
178 | помните, это все на машине вашего партнера-СЛЕЙВА: |
---|
179 | |
---|
180 | $ sudo rm /etc/namedb/slave/MYTLD |
---|
181 | |
---|
182 | - Попросите его перестартовать named |
---|
183 | |
---|
184 | $ sudo service named restart |
---|
185 | |
---|
186 | Вместе с ним, проверьте, что зона ушла, А ТАКЖЕ что его сервер не может |
---|
187 | ее получить опять. |
---|
188 | |
---|
189 | Q: Что вы видите в логах (transfers и general) на МАСТЕРЕ (auth1)? |
---|
190 | |
---|
191 | Q: Что вы видите в логах (transfers и general) СЛЕЙВА? |
---|
192 | |
---|
193 | 8. Все еще на СЛЕЙВЕ (если преподаватель обеспечивает вторичный сервис, он |
---|
194 | выполнит этот шаг) |
---|
195 | |
---|
196 | Найдите раздел для зоны: |
---|
197 | |
---|
198 | zone "MYTLD" { |
---|
199 | type slave; |
---|
200 | masters { 10.20.XX.1; }; |
---|
201 | file "slave/mydomain.dns"; |
---|
202 | }; |
---|
203 | |
---|
204 | ... и добавьте ключ, и блок, который сообщает серверу, какой ключ использовать |
---|
205 | при связи с мастером, "10.20.XX.1": |
---|
206 | |
---|
207 | key mydomain-key { |
---|
208 | algorithm hmac-md5; |
---|
209 | secret "tHTRSKKrmyGmPnzNCf2IRA=="; |
---|
210 | }; |
---|
211 | server 10.20.XX.1 { // здесь вы помещаете IP ВАШЕГО мастера |
---|
212 | keys { mydomain-key; }; |
---|
213 | }; |
---|
214 | |
---|
215 | 9. Перезапустите named |
---|
216 | |
---|
217 | $ sudo service named restart |
---|
218 | |
---|
219 | На СЛЕЙВЕ: |
---|
220 | |
---|
221 | Q: Появилась ли зона "MYTLD" в каталоге slave/ ? |
---|
222 | |
---|
223 | Q: Что вы видите в логах (transfers и general) СЛЕЙВА? |
---|
224 | |
---|
225 | На МАСТЕРЕ: |
---|
226 | |
---|
227 | Q: Что вы видите в логах (transfers и general) на МАСТЕРЕ (auth1)? |
---|
228 | |
---|
229 | Видите ли вы, в общем случае, пользу использования ключей вместо IP ACL? |
---|
230 | |
---|
231 | Дополнительный раздел, если вы обеспечиваете вторичный сервис сами: |
---|
232 | ------------------------------------------------------------------- |
---|
233 | |
---|
234 | 10. Теперь, сделайте то же самое для вашего сервера NSD ("auth2") |
---|
235 | |
---|
236 | ... поскольку вы запретили список доступа по IP, ваш AUTH NSD сервер |
---|
237 | неспособен скачать зону! |
---|
238 | |
---|
239 | Почитайте документацию для NSD (man nsd.conf) если вы не уверены, |
---|
240 | как указать ключ в NSD для скачивания зоны. Измените определение |
---|
241 | зоны для MYTLD, так что оно теперь использует KEY вместо NOKEY |
---|
242 | для скачивания зоны с вашего МАСТЕРА (auth1). |
---|
243 | |
---|
244 | После того, вам будет нужно выполнить "nsdc restart". Скачивается |
---|
245 | ли зона? Не забудьте проверить логи также и на МАСТЕРЕ (auth1)! |
---|
246 | |
---|
247 | Дополнительный раздел, если вы используете Swatch для мониторинга логов: |
---|
248 | ------------------------------------------------------------------------ |
---|
249 | |
---|
250 | 11. Если вы настроили Swatch в предыдущем упражнении, сделайте так, что он |
---|
251 | сообщает, когда видит запрещенное скачивание зоны: |
---|
252 | |
---|
253 | Отредактируйте /usr/local/etc/swatch.conf, и добавьте новый раздел -- |
---|
254 | не забудьте использовать TAB вместо пробела в начале строк: |
---|
255 | |
---|
256 | - - - - - - - - - - - - - - - линия отреза - - - - - - - - - - - - - - |
---|
257 | |
---|
258 | |
---|
259 | watchfor /client ([0-9.:]+)\D\d+: zone transfer '(.*)\/.XFR\/IN' denied$/ |
---|
260 | mail=sysadm,subject=Denied AXFR for zone '$2' from $1 |
---|
261 | threshold type=limit,count=1,seconds=600 |
---|
262 | |
---|
263 | - - - - - - - - - - - - - - - линия отреза - - - - - - - - - - - - - - |
---|
264 | |
---|
265 | 12. Остановите Swatch |
---|
266 | |
---|
267 | $ ps ax | grep swatch |
---|
268 | |
---|
269 | Найдите идентификатор процесса (число слева), и прибейте его: |
---|
270 | |
---|
271 | $ sudo kill PID_OF_SWATCH |
---|
272 | |
---|
273 | Перезапустите swatch (получите права администратора используя команду sudo -s) |
---|
274 | |
---|
275 | $ sudo -s |
---|
276 | # /usr/local/bin/swatch -c /usr/local/etc/swatch.conf --tail-file=/etc/namedb/log/general --daemon |
---|
277 | # exit |
---|
278 | $ |
---|
279 | |
---|
280 | |
---|
281 | Замечание: Почему вы говорите swatch смотреть в логе "general" ? |
---|
282 | |
---|
283 | Если вы помните предыдущую лабораторной о логировании, мы сконфигурировали |
---|
284 | BIND логировать категорию безопасности в канал "general". |
---|
285 | Поэтому нам нужно мониторить файл /etc/namedb/log/general. |
---|
286 | |
---|
287 | 13. Выполните еще раз скачивание зоны как на шаге 4 (с другой машины) и |
---|
288 | посмотрите, получает ли пользователь sysadm письмо, когда вы пытаетесь |
---|
289 | скачать зону: |
---|
290 | |
---|
291 | $ mutt -f /var/mail/sysadm |
---|
292 | |
---|
293 | Попробуйте скачивание еще пару раз в течение минуты. |
---|
294 | |
---|
295 | Q: Сколько писем вы получили? Почему? |
---|
296 | |
---|