Nativ modullar (tərtibatçılar üçün)
Adi istifadə üçün modul lazım deyil. Bu təlimat nativ kitabxana ilə Windows və ya Linux xidmətinin funksiyalarını genişləndirmək istəyən tərtibatçılar və inzibatçılar üçündür. Modullar xidmətin daxilində, onun səlahiyyətləri ilə işləyir. Yalnız etibar etdiyiniz kodu quraşdırın; modul faylları, asılılıq faylları və sazlama fayllarının sahibi inzibatçı olmalıdır.
Modul yükləmək
Xidmət sazlama faylının yanındakı modules.d qovluğundan *.conf fayllarını oxuyur.
Standart yerlər aşağıdakılardır.
| Əməliyyat sistemi | Modul sazlamalarının yeri | Kitabxana formatı |
|---|---|---|
| Linux | /etc/mudfish-dns/modules.d/ | .so |
| Windows | %ProgramData%\Mudfish DNS\modules.d\ | .dll |
Hər faylda hər sətirə kitabxananın bir mütləq yolunu yazın. Məsələn,
/etc/mudfish-dns/modules.d/10-policy.conf faylının məzmunu belədir.
/usr/lib/mudfish-dns/modules/policy.so
Fayllar ad sırası ilə, hər faylın daxilində isə sətir sırası ilə oxunur. Boş sətirlər
və # ilə başlayan sətirlər nəzərə alınmır. Yolu dırnaqlara almayın, mühit
dəyişənlərindən və ya sətir sonu şərhlərdən istifadə etməyin. Belə ifadələr şərh
olunmur. Windows-da da boşluq olan yollar daxil olmaqla tam mütləq yolu fayla yazın.
Modul əlavə etdikdən, dəyişdikdən və ya sildikdən sonra xidməti yenidən başladın. Linux-da aşağıdakı əmri istifadə edin.
sudo systemctl restart mudfish-dns.service
Windows-da xidmətlərin idarə olunması bölməsindən Mudfish DNS xidmətini yenidən başladın. Tətbiqin DNS-i başlat, DNS-i dayandır və Sazlamaları tətbiq et əmrləri modulları yenidən yükləmir. Sazlama faylı oxunmursa, yol yanlışdırsa və ya yükləmə və başlanğıc sazlanması xətası baş verirsə, xidmət başlamır. Modul qovluğunun olmamasına və ya boş olmasına icazə verilir.
Hazırlama zamanı --module arqumentini təkrar göstərməklə kitabxanaları arqumentlərin
sırası ilə yükləyə bilərsiniz. Bu halda modules.d avtomatik yükləməsi əvəz olunur.
--config FILE sazlama faylının yanındakı modul qovluğunun yerini də dəyişir.
--restore-dns modulları yükləmədən bərpanı yerinə yetirir.
Hook funksiyalarının hazırlanması
mudfish_dns_module.h başlıq faylını oxuyun və ya
mudfish_dns_module.h faylını endirin.
Bu başlıq faylı modulun istifadə etdiyi strukturları, hook funksiyalarını, əməliyyatları
və məlumatların etibarlılıq müddəti qaydalarını müəyyən edir. Bu təlimatda C ABI v2
istifadə olunur. mudfish_dns_module_init_v2() funksiyasını xaricə təqdim edin;
hook sahələrini doldurmazdan əvvəl MUDFISH_DNS_MODULE_ABI_V2 və ötürülmüş strukturun
ölçüsünü yoxlayın. Başlanğıc sazlanması uğurlu olduqda 0 qaytarın.
| Hook | Çağırılma vaxtı |
|---|---|
on_dns_query | Təhlil edilmiş sorğu qəbul edildikdən sonra, keşdə axtarışdan və ya ötürmədən əvvəl. |
on_dns_response | Cavab seçildikdən sonra, keşə yazılmadan və ya müştəriyə qaytarılmadan əvvəl. Keşdəki cavablar da bu hook-dan keçir. |
on_web_hello | İlkin HTTP Host/TLS SNI yoxlaması bitdikdən sonra, qoşulmadan və ya ilkin məlumatlar emal edilmədən əvvəl. |
on_web_data | Sonrakı müştəri və ya server məlumatları oxunduqdan sonra, ötürülmədən əvvəl. |
DNS əməliyyatları
v2 DNS hook funksiyaları uğur zamanı 0 qaytarır və result->action sahəsini təyin edir.
| Əməliyyat | Təsiri |
|---|---|
MUDFISH_DNS_CONTINUE | Növbəti modulla və adi emalla davam edir. |
MUDFISH_DNS_ALLOW | Cari hook zəncirini bitirir və adi DNS sorğusunu davam etdirir və ya seçilmiş cavabı qaytarır. |
MUDFISH_DNS_BLOCK | REFUSED qaytarır. |
MUDFISH_DNS_DROP | DNS cavabı göndərmədən atır. |
MUDFISH_DNS_ANSWER | Verilmiş IPv4/IPv6 ünvanı və TTL ilə cavab yaradır. |
MUDFISH_DNS_REPLACE | Modulun təqdim etdiyi tam DNS ötürmə formatlı cavabdan istifadə edir. |
v2 DNS hook funksiyalarından əməliyyat sabitlərini birbaşa qaytarmayın. Funksiya
sıfırdan fərqli dəyər qaytararsa və ya nəticə etibarsız olarsa, SERVFAIL yaranır.
ALLOW yalnız cari hook zəncirini bitirir; domen qaydalarını, rabitə üsulu icazələrini
və ya sertifikat yoxlamasını keçmir. DROP istisna olmaqla sorğu nəticələri cavab
hook funksiyalarından da keçir.
Veb hook funksiyaları birbaşa MUDFISH_DNS_CONTINUE və ya MUDFISH_DNS_REJECT
qaytarır. Veb sorğusu rədd edilərsə, bağlantı bağlanır. Veb hook funksiyalarından
istifadə üçün veb qorunması aktiv olmalıdır; deşifrə edilmiş HTTPS məzmunu təqdim edilmir.
Buferlər, axınlar və keşləmə
Giriş hadisələri və buferləri yalnız oxuma üçündür və yalnız geri çağırış funksiyası icra olunarkən etibarlıdır. Əvəzləyici cavab modulun sahib olduğu yaddaşdan istifadə etməli və həmin modulun növbəti geri çağırışına və ya bağlanmasına qədər etibarlı qalmalıdır. Stek yaddaşını və ya hadisədən götürülmüş göstəricini qaytarmayın. Əvəzləyici cavabın DNS ID-si, opcode-u və sualı ilkin sorğu ilə uyğun gəlməlidir. Bir instansiyanın geri çağırışları ardıcıl icra olunur, lakin fərqli axınlardan çağırıla bilər. Geri çağırışları tez tamamlayın və istisnaları ABI sərhədindən kənara ötürməyin.
Yaradılmış, əvəzlənmiş, bloklanmış və atılmış nəticələr hostun keşində saxlanmır. Keşdəki cavabı əvəzləmək ilkin keş qeydini dəyişmir. Host əvəzləyici cavabın AD bayrağını təmizləyir, DNSSEC yoxlaması və ya yenidən imzalama aparmır. İmzalanmış məlumatı dəyişən modul etibarsız olmuş imzaları özü emal etməlidir.
Nümunə və başlıq faylı
Aşağıdakı səhifələrdə tam nümunə mənbə kodu və lazım olan başlıq faylı var. Mudfish DNS mənbə ağacını ayrıca endirməyə ehtiyac yoxdur.
| Fayl | Məzmun |
|---|---|
| policy.c — DNS siyasəti nümunəsi | DNS sorğularına icazə vermək, onları bloklamaq və atmaq, IP cavabları yaratmaq, cavab ünvanını və TTL-i dəyişmək. Linux üçün yığma və sınaq əmrləri də daxildir. |
| mudfish_dns_module.h — Modulun başlıq faylı | ABI elanları, hook imzaları, əməliyyat sabitləri və bufer sahibliyi qaydaları. |
Yığmadan əvvəl policy.c və mudfish_dns_module.h fayllarını eyni qovluğa endirin.
Nümunədəki yığma əmri Linux üçün .so kitabxanası yaradır.