| 1 | Подписание зоны с помощью OpenDNSSEC - часть 1 |
|---|
| 2 | |
|---|
| 3 | 1. Инициализируйте программу "Hardware Security Module" |
|---|
| 4 | |
|---|
| 5 | Начните с получения прав администратора |
|---|
| 6 | |
|---|
| 7 | $ sudo -s |
|---|
| 8 | # |
|---|
| 9 | |
|---|
| 10 | # softhsm --init-token --slot 0 --label OpenDNSSEC |
|---|
| 11 | |
|---|
| 12 | (ответьте '1234' на оба вопроса ниже): |
|---|
| 13 | |
|---|
| 14 | The SO PIN must have a length between 4 and 255 characters. |
|---|
| 15 | Enter SO PIN: **** |
|---|
| 16 | The user PIN must have a length between 4 and 255 characters. |
|---|
| 17 | Enter user PIN: **** |
|---|
| 18 | The token has been initialized. |
|---|
| 19 | |
|---|
| 20 | # softhsm --show-slots |
|---|
| 21 | |
|---|
| 22 | Создайте файлы конфигурации для OpenDNSSEC, скопировав |
|---|
| 23 | примеры конфигурации, входящие в комплект поставки: |
|---|
| 24 | |
|---|
| 25 | # cd /usr/local/etc/opendnssec |
|---|
| 26 | # cp kasp.xml.sample kasp.xml |
|---|
| 27 | # cp conf.xml.sample conf.xml |
|---|
| 28 | # cp addns.xml.sample addns.xml |
|---|
| 29 | # cp zonelist.xml.sample zonelist.xml |
|---|
| 30 | # chmod 644 *xml |
|---|
| 31 | |
|---|
| 32 | 2. Поменяйте стратегию по умолчанию с использования NSEC3 на использование NSEC |
|---|
| 33 | |
|---|
| 34 | Отредактируйте /usr/local/etc/opendnssec/kasp.xml |
|---|
| 35 | |
|---|
| 36 | Найдите следующий раздел, уберите все строки от <NSEC3> до </NSEC3> |
|---|
| 37 | |
|---|
| 38 | <NSEC3> |
|---|
| 39 | <!-- <OptOut/> --> |
|---|
| 40 | <Resalt>P100D</Resalt> |
|---|
| 41 | <Hash> |
|---|
| 42 | <Algorithm>1</Algorithm> |
|---|
| 43 | <Iterations>5</Iterations> |
|---|
| 44 | <Salt length="8"/> |
|---|
| 45 | </Hash> |
|---|
| 46 | </NSEC3> |
|---|
| 47 | |
|---|
| 48 | ... и замените их на эту строку: |
|---|
| 49 | |
|---|
| 50 | <NSEC/> |
|---|
| 51 | |
|---|
| 52 | Сохраните файл и выйдите из редактора. |
|---|
| 53 | |
|---|
| 54 | Также, установите правильный путь к libsofthsm.so в conf.xml: |
|---|
| 55 | |
|---|
| 56 | Поменяйте |
|---|
| 57 | |
|---|
| 58 | <Module>/usr/local/lib/libsofthsm.so</Module> |
|---|
| 59 | |
|---|
| 60 | на |
|---|
| 61 | |
|---|
| 62 | <Module>/usr/local/lib/softhsm/libsofthsm.so</Module> |
|---|
| 63 | |
|---|
| 64 | В том же файле, найдите строку: |
|---|
| 65 | |
|---|
| 66 | <Datastore><SQLite>/usr/local/var/opendnssec/kasp.db</SQLite></Datastore> |
|---|
| 67 | |
|---|
| 68 | Удалите ее, и добавьте: |
|---|
| 69 | |
|---|
| 70 | <Datastore> |
|---|
| 71 | <MySQL> |
|---|
| 72 | <Host port="3306">localhost</Host> |
|---|
| 73 | <Database>opendnssec</Database> |
|---|
| 74 | <Username>root</Username> |
|---|
| 75 | <Password></Password> |
|---|
| 76 | </MySQL> |
|---|
| 77 | </Datastore> |
|---|
| 78 | |
|---|
| 79 | |
|---|
| 80 | 3. Запустите MySQL и создайте базу данных |
|---|
| 81 | |
|---|
| 82 | Отредактируйте /etc/rc.conf, и добавьте: |
|---|
| 83 | |
|---|
| 84 | mysql_enable="YES" |
|---|
| 85 | |
|---|
| 86 | Сохраните файл и выйдите из редактора, затем запустите: |
|---|
| 87 | |
|---|
| 88 | # service mysql-server start |
|---|
| 89 | |
|---|
| 90 | Вы должны увидеть: |
|---|
| 91 | |
|---|
| 92 | Starting mysql. |
|---|
| 93 | |
|---|
| 94 | Создайте базу данных: |
|---|
| 95 | |
|---|
| 96 | # echo "create database opendnssec" | mysql |
|---|
| 97 | |
|---|
| 98 | 4. Инициализируйте KSM |
|---|
| 99 | |
|---|
| 100 | # ods-ksmutil setup |
|---|
| 101 | |
|---|
| 102 | *WARNING* This will erase all data in the database; are you sure? [y/N] y |
|---|
| 103 | Enter password: |
|---|
| 104 | |
|---|
| 105 | Просто нажмите ВВОД вместо ввода пароля. Вы увидите: |
|---|
| 106 | |
|---|
| 107 | zonelist filename set to /usr/local/etc/opendnssec/zonelist.xml. |
|---|
| 108 | kasp filename set to /usr/local/etc/opendnssec/kasp.xml. |
|---|
| 109 | Repository SoftHSM found |
|---|
| 110 | No Maximum Capacity set. |
|---|
| 111 | RequireBackup NOT set; please make sure that you know the potential problems of using keys which are not recoverable |
|---|
| 112 | INFO: The XML in /usr/local/etc/opendnssec/conf.xml is valid |
|---|
| 113 | INFO: The XML in /usr/local/etc/opendnssec/zonelist.xml is valid |
|---|
| 114 | INFO: The XML in /usr/local/etc/opendnssec/kasp.xml is valid |
|---|
| 115 | Policy default found |
|---|
| 116 | |
|---|
| 117 | 5. Установите копию неподписанной зоны (OpenDNSSEC будет ее подписывать) |
|---|
| 118 | |
|---|
| 119 | Ранее мы сделали бэкап нашей зоны, прежде чем она была подписана BIND9. |
|---|
| 120 | Сейчас мы используем эту копию и сделаем ее доступной для OpenDNSSEC. |
|---|
| 121 | |
|---|
| 122 | # cd /etc/namedb/master |
|---|
| 123 | # cp mytld.backup /usr/local/var/opendnssec/unsigned/mytld |
|---|
| 124 | |
|---|
| 125 | Увеличьте серийный номер в файле зоны, так что он отражает реальность (YYYYMMDDXY). |
|---|
| 126 | |
|---|
| 127 | 6. Добавьте зону в базу данных OpenDNSSEC: |
|---|
| 128 | |
|---|
| 129 | # ods-ksmutil zone add --zone mytld |
|---|
| 130 | |
|---|
| 131 | zonelist filename set to /usr/local/etc/opendnssec/zonelist.xml. |
|---|
| 132 | Imported zone: mytld |
|---|
| 133 | |
|---|
| 134 | 7. Запустите OpenDNSSEC! |
|---|
| 135 | |
|---|
| 136 | Добавьте следующее в /etc/rc.conf |
|---|
| 137 | |
|---|
| 138 | opendnssec_enable="YES" |
|---|
| 139 | |
|---|
| 140 | Сохраните файл и выйдите из редактора. |
|---|
| 141 | |
|---|
| 142 | Теперь, запустите сервис: |
|---|
| 143 | |
|---|
| 144 | # service opendnssec start |
|---|
| 145 | |
|---|
| 146 | Вы увидите: |
|---|
| 147 | |
|---|
| 148 | Starting enforcer... |
|---|
| 149 | OpenDNSSEC ods-enforcerd started (version 1.4.3), pid 2923 |
|---|
| 150 | Starting signer engine... |
|---|
| 151 | OpenDNSSEC signer engine version 1.4.3 |
|---|
| 152 | Engine running. |
|---|
| 153 | |
|---|
| 154 | # ps ax | grep ods |
|---|
| 155 | |
|---|
| 156 | 41588 ?? SsJ 0:00.11 /usr/local/sbin/ods-enforcerd |
|---|
| 157 | 41593 ?? SsJ 0:00.07 /usr/local/sbin/ods-signerd |
|---|
| 158 | |
|---|
| 159 | 8. Убедитесь, что зона подписана |
|---|
| 160 | |
|---|
| 161 | # ls -l /usr/local/var/opendnssec/signed |
|---|
| 162 | |
|---|
| 163 | -rw-r--r-- 1 root wheel 2621 Feb 19 09:10 mytld |
|---|
| 164 | |
|---|
| 165 | Посмотрите содерижимое зоны - обратите внимание на идентификаторы |
|---|
| 166 | ключей KSK и ZSK. |
|---|
| 167 | |
|---|
| 168 | Если по какой-то причине вы не видите этого файла в каталоге |
|---|
| 169 | /usr/local/var/opendnssec/signed/, заставьте подписанта подписать |
|---|
| 170 | зону: |
|---|
| 171 | |
|---|
| 172 | # ods-signer sign mytld |
|---|
| 173 | |
|---|
| 174 | 9. Немного размышлений |
|---|
| 175 | |
|---|
| 176 | Хорошо, теперь зона подписана OpenDNSSEC - обратите внимание, что |
|---|
| 177 | зона была подписана, но вы не выполняли никаких команд для создания |
|---|
| 178 | ключей. |
|---|
| 179 | |
|---|
| 180 | Показать ключи под управлением OpenDNSSEC: |
|---|
| 181 | |
|---|
| 182 | # ods-ksmutil key list |
|---|
| 183 | |
|---|
| 184 | Keys: |
|---|
| 185 | Zone: Keytype: State: Date of next transition: |
|---|
| 186 | mytld KSK publish 2014-03-21 04:25:30 |
|---|
| 187 | mytld ZSK active 2014-03-21 04:32:30 |
|---|
| 188 | |
|---|
| 189 | Обратите внимание, что два ключа были созданы OpenDNSSEC на лету. |
|---|
| 190 | |
|---|
| 191 | Но BIND пока еще подгружает зону, которая была подписана ранее |
|---|
| 192 | (или вручную или используя встроенное подписание) - нельзя ли |
|---|
| 193 | просто изменить конфигурацию в named.conf и указать на зону |
|---|
| 194 | подписанную OpenDNSSEC? |
|---|
| 195 | |
|---|
| 196 | Какой KSK сейчас используется? Какие записи DS были опубликованы |
|---|
| 197 | в родительской зоне? |
|---|
| 198 | |
|---|
| 199 | Смогут ли системы разрешения имен проверять подписи в зоне, |
|---|
| 200 | подписаной OpenDNSSEC? Почему нет? Что вам нужно сделать, |
|---|
| 201 | чтобы все заработало? (На этот вопрос есть несколько возможных |
|---|
| 202 | ответов) |
|---|
| 203 | |
|---|
| 204 | Если вас не заботит проблема валидации, вы можете продолжить |
|---|
| 205 | выполнять оставшуюся часть этой лабораторной работы. |
|---|
| 206 | |
|---|
| 207 | 10. Инструктируйте BIND подгрузить новую зону |
|---|
| 208 | |
|---|
| 209 | Измените /etc/namedb/named.conf, поменяв определение зоны для "mytld", |
|---|
| 210 | так что она выглядит примерно следующим образом (УДАЛИТЕ auto-dnssec и т.д.): |
|---|
| 211 | |
|---|
| 212 | zone "mytld" { |
|---|
| 213 | file "/usr/local/var/opendnssec/signed/mytld"; // <--- измените путь |
|---|
| 214 | type master; |
|---|
| 215 | key-directory "/etc/namedb/keys"; // <--- Удалите если наличествует |
|---|
| 216 | auto-dnssec maintain; // <--- Удалите если наличествует |
|---|
| 217 | inline-signing yes; // <--- Удалите если наличествует |
|---|
| 218 | }; |
|---|
| 219 | |
|---|
| 220 | Теперь, BIND работает как "пассивный" DSN-сервер, который не |
|---|
| 221 | подписыват зону - он просто обслуживает зону, подписанную |
|---|
| 222 | при помощи OpenDNSSEC. |
|---|
| 223 | |
|---|
| 224 | Перезапустите named: |
|---|
| 225 | |
|---|
| 226 | # service named restart |
|---|
| 227 | |
|---|
| 228 | Проверьте логи в /etc/namedb/log/general и убедитесь в том, что зона |
|---|
| 229 | подгружается правильно. |
|---|
| 230 | |
|---|
| 231 | Сейчас валидация теми, кто попытается получить данные в вашей зоне, |
|---|
| 232 | скорее всего не будет успешна. Подождите несколько минут и попробуйте |
|---|
| 233 | запросить какую-нибудь запись из вашей зоны: |
|---|
| 234 | |
|---|
| 235 | # dig @127.0.0.1 www.mytld +dnssec |
|---|
| 236 | |
|---|
| 237 | На что вы обратили внимание? |
|---|
| 238 | |
|---|
| 239 | 11. OpenDNSSEC, перезапускающий BIND |
|---|
| 240 | |
|---|
| 241 | Что хорошо, вы можете настроить OpenDNSSEC, чтобы он говорил BINDу |
|---|
| 242 | перезагрузить зону, когда она подписывается. Таким образом, |
|---|
| 243 | перегрузка вручную не понадобится. |
|---|
| 244 | |
|---|
| 245 | Чтобы это сделать, измениете /usr/local/etc/opendnssec/conf.xml |
|---|
| 246 | |
|---|
| 247 | Найдите строчки: |
|---|
| 248 | |
|---|
| 249 | <!-- |
|---|
| 250 | <NotifyCommand>/usr/sbin/rndc reload %zone</NotifyCommand> |
|---|
| 251 | --> |
|---|
| 252 | |
|---|
| 253 | ... и удалите комментарии (строки '<!--' and '-->') до и после. |
|---|
| 254 | |
|---|
| 255 | Сохрание файл, и перезапустите OpenDNSSEC: |
|---|
| 256 | |
|---|
| 257 | # ods-control stop |
|---|
| 258 | ... |
|---|
| 259 | # ods-control start |
|---|
| 260 | |
|---|
| 261 | |
|---|
| 262 | 12. Эскпортируйте DS, готовый для закачки: |
|---|
| 263 | |
|---|
| 264 | Теперь проверьте состояние KSK: |
|---|
| 265 | |
|---|
| 266 | # ods-ksmutil key list |
|---|
| 267 | |
|---|
| 268 | Обратите внимание на состояние, в котором находится KSK. |
|---|
| 269 | |
|---|
| 270 | Если он до сих пор в состоянии (publish) (см. |
|---|
| 271 | https://wiki.opendnssec.org/display/DOCS/Key+States#KeyStates-Publish для |
|---|
| 272 | детального описания), то ключ, с точки зрения OpenDNSSEC, не готов к |
|---|
| 273 | использованию, поскольку не прошло достаточно времени для его распространения. |
|---|
| 274 | |
|---|
| 275 | Вы все еще можете экспортировать запись DS, созданную из KSK: |
|---|
| 276 | |
|---|
| 277 | # ods-ksmutil key export --zone mytld --ds --keystate publish |
|---|
| 278 | |
|---|
| 279 | Обратите внимание на предупреждение! |
|---|
| 280 | |
|---|
| 281 | WARNING: No active or ready keys seen for this zone. Do not load any DS records to the parent unless you understand the possible consequences. |
|---|
| 282 | |
|---|
| 283 | Хорошо, давайте сохраним DS в файле, который мы потом сможем закачать: |
|---|
| 284 | |
|---|
| 285 | # ods-ksmutil key export --zone mytld --ds --keystate publish >/tmp/dsset-mytld. |
|---|
| 286 | |
|---|
| 287 | 13. Закачайте DS на сервер |
|---|
| 288 | |
|---|
| 289 | Если вы не используете web интерфейс: |
|---|
| 290 | |
|---|
| 291 | # scp /tmp/dsset-mytld. sysadm@a.root-servers.net: |
|---|
| 292 | |
|---|
| 293 | 14. Дайте знать администратору! |
|---|
| 294 | |
|---|
| 295 | Попросите администратора корневой зоны добавить новую запись DS, |
|---|
| 296 | и посмотрите, сколько времени пройдет прежде чем валидация начнет |
|---|
| 297 | опять работать для вашей зоны. |
|---|
| 298 | |
|---|
| 299 | ... или, если вы используете web интерфейс: |
|---|
| 300 | |
|---|
| 301 | Залогиньтесь на https://rzm.dnssek.org и исправьте записи DS, |
|---|
| 302 | проверив DS-записи с "глазами", отмечая их и потом нажимая "Update". |
|---|
| 303 | После нескольких минут для обновления кэшей, система разрешения |
|---|
| 304 | имен должна валидировать. Если у вас не исчезают проблемы, |
|---|
| 305 | попросите преподавателя очистить кэши. |
|---|
| 306 | |
|---|
| 307 | 15. Что происходит с состоянием ключа? |
|---|
| 308 | |
|---|
| 309 | Почему ключ находится в состоянии "Publish"? Отчего OpenDNSSEC |
|---|
| 310 | не жаждет разрешить нам использовать ключ сразу? |
|---|
| 311 | |
|---|
| 312 | Was it a good idea to upload the DS already ? |
|---|
| 313 | Было ли это хорошей мыслью, когда мы закачали DS сразу? |
|---|
| 314 | |
|---|
| 315 | Если вы подождете достаточно долго, вы увидите: |
|---|
| 316 | |
|---|
| 317 | Keys: |
|---|
| 318 | Zone: Keytype: State: Date of next transition: |
|---|
| 319 | mytld KSK ready waiting for ds-seen |
|---|
| 320 | mytld ZSK retire 2014-03-21 07:50:38 |
|---|
| 321 | mytld ZSK active 2014-03-21 07:54:38 |
|---|
| 322 | |
|---|
| 323 | На самом деле, нам следовало подождать до тех пор пока ключ не |
|---|
| 324 | перешел бы в состояние "ready", и только потом публиковать DS! |
|---|
| 325 | |
|---|
| 326 | Почему? Существовал риск того, что информация о зоне была не полностью |
|---|
| 327 | распространена (слейвы и кэши). Только после того как ключ отмечен |
|---|
| 328 | как "ready", становится безопасным закачивать DS. OpenDNSSEC использует |
|---|
| 329 | параметры в стратегических настройках (kasp.xml) чтобы определить |
|---|
| 330 | эти временные интервалы. |
|---|
| 331 | |
|---|
| 332 | 16. Дать знать OpenDNSSEC о том, что DS появлися в родительской зоне |
|---|
| 333 | |
|---|
| 334 | Когда вы увидели DS в родительской зоне, и KSK находится в состоянии |
|---|
| 335 | "ready", вы можете дать об этом знать OpenDNSSEC. |
|---|
| 336 | |
|---|
| 337 | # ods-ksmutil key list -v |
|---|
| 338 | |
|---|
| 339 | Keys: |
|---|
| 340 | Zone: Keytype: State: Date of next transition (to): Size: Algorithm: CKA_ID: Repository: Keytag: |
|---|
| 341 | mytld KSK ready waiting for ds-seen (active) 2048 8 0c4f577032e04e2eb34163382a4524d7 SoftHSM 44096 |
|---|
| 342 | mytld ZSK active 2014-03-21 07:54:38 (retire) 1024 8 bbd9b3e14c3cbb0517d49f79985916bd SoftHSM 57634 |
|---|
| 343 | mytld ZSK publish 2014-03-21 09:02:55 (ready) 1024 8 7982538186c1b77afe84e6875f3c7bda SoftHSM 51991 |
|---|
| 344 | |
|---|
| 345 | -v дает вам идентификаторы ключей, которые вам понадобятся на следующем шаге. |
|---|
| 346 | |
|---|
| 347 | Запишите идентификатор ключа KSK, находящегося в состоянии `ready`. |
|---|
| 348 | |
|---|
| 349 | Теперь, выполните: |
|---|
| 350 | |
|---|
| 351 | # ods-ksmutil key ds-seen --zone mytld --keytag 44096 |
|---|
| 352 | |
|---|
| 353 | ... где 44096 - идентификатор KSK из предыдущего примера. |
|---|
| 354 | |
|---|
| 355 | Вы увидите: |
|---|
| 356 | |
|---|
| 357 | Found key with CKA_ID 0c4f577032e04e2eb34163382a4524d7 |
|---|
| 358 | Key 0c4f577032e04e2eb34163382a4524d7 made active |
|---|
| 359 | Notifying enforcer of new database... |
|---|
| 360 | Performed a HUP ods-enforcerd |
|---|
| 361 | |
|---|
| 362 | Теперь, посмотрите ключи снова: |
|---|
| 363 | |
|---|
| 364 | # ods-ksmutil key list |
|---|
| 365 | |
|---|
| 366 | Note that the KSK is now marked active. |
|---|
| 367 | Обратите внимание на то, что KSK теперь отмечен как "активный". |
|---|