FreeBSD Jail Kurulumu – Güvenli Network Servisleri
Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYXCZ71V' (Errcode: 28 - No space left on device) in /usr/share/nginx/html/syslogs/wp-includes/class-wpdb.php on line 2349
Jail, freebsd sistemlerde bulunan, kernel-level bir güvenlik aracıdır. Temel olarak, sistem üzerindeki süreçleri/servisleri birbirlerinden ayırmak ve servislerden herhangi birinde oluşan güvenlik zafiyetinden diğer servislerin ve sistemin bütününün etkilenmemesini sağlamak için kullanılır. Örneğin bir freebsd üzerinde web, dns ve e-mail hizmeti vermek isterseniz, bu servislerin her biri için bir jail oluşturabilir ve örneğin DNS'den kaynaklanan bir zafiyetten diğer servislerin zarar görmemesini sağlayabilirsiniz. |
Bu yazıda, freebsd 7.2 üzerinde ezjail kullanarak Jail sistemler oluşturmak/yönetmek ve Jail içerisinde, örneğin bir apache sunucusu çalıştırmanın nasıl yapılabileceğine değinmek istiyorum.
JAIL NEDİR ?
Jail, tam olarak chroot ortamına benzemektedir ancak chroot'tan çok daha gelişmiş yetenekleri bulunmaktadır. Bu açıdan Jail'i sanallaştırma teknolojisine benzetmek de mümkün. Çünkü, FreeBSD sisteminiz üzerine bir jail kurarsanız, kendisine ait bir ip'si ve hostname'i bulunan oldukça sınırlı (bu nedenle de güvenli) bir başka FreeBSD sistem elde etmiş olursunuz. FreeBSD host üzerindeki her bir jail'in hosttan bağımsız olarak kendi dosyaları, süreçleri ve kullanıcıları bulunur. Bu nedenle Jail'lerin her biri tertemiz (bomboş) bir kuruluma sahip mini FreeBSD'lerdir.
Sonuç olarak, servislerinizi host sistem üzerinde oluşturduğunuz bu mini FreeBSD'lere (Jail'lere) kurabilir ve tüm servislerin aynı host sunucu üzerindeki bu sanal sunucularda çalıştırabilirsiniz. Bu nedenle Jail ortamları gerçekten kullanışlıdır. Sisteminizde bir Jail oluşturmak ya da jailleri yönetmek için bir jail framework'ü olan ezjail isimli küçük uygulama kullanılabilir. Bu yazıda, Jail oluşturma işlemi için ezjail kullanacağım.
BAŞLAMADAN ÖNCE
Kurulum işlemine başlamadan önce, host sistemde yapılması gereken ufak tefek adımlar var. Örneğin oluşturulacak jail için sisteme ikinci bir ip ekleyeceğiz fakat host sistemde çalışan hiç bir servis bu ip adresine bind edilmemeli. Örneğin host sistemdeki ssh sunucu defaul olarak “0.0.0.0”‘a yani sisteme atanmış tüm ip adreslerine bind edilir; aynı şey syslogd için de geçerlidir. Bu durumda, yeni eklenecek ip'ye ssh ve syslogd servisleri de bind edileceği için jail tarafında sorun oluşur.
Bu nedenle, host sistemdeki servislerin sadece ana ip'yi dinlemek üzere bind edilmesini sağlamamız gerekiyor. FreeBSD'nin yeni kurulduğunu varsayarsak tüm ip'lere bind edilmek üzere set edilmiş iki default servis bulunur: sshd ve syslogd.
Şimdi ssh ve syslog deamon'larini sadece ana ip'yi dinleyecek şekilde set edelim.
SSH Deamon'unun Sadece Ana IP'ye Bind Edilmesi
/etc/ssh/sshd_config dosyasını editleyin:
# vi /etc/ssh/sshd_config
Aşağıdaki satırı bulun:
#ListenAddress 0.0.0.0
Bu satırın başındaki # işaretini kaldırın ve 0.0.0.0 yerine sisteminizin birincil ip adresini yazın. Benim sistemimde birincil ip 192.168.12.233:
ListenAddress 192.168.12.233
Şimdi sshd'yi restart edelim:
# /etc/rc.d/sshd restart
Artık host'taki ssh server birincil ip olan 192.168.12.233'ü dinliyor. Şu şekilde doğrulayabilirsiniz:
# netstat -an |grep 22 |grep LISTEN
Çıktı şöyle olacaktırç
tcp4 0 0 192.168.12.233.22 *.* LISTEN
SSH deamon'ından sonra aynı işlemi syslogd için yapacağız.
Syslog Deamon'ının Sadece Ana IP'ye Bind Edilmesi
syslogd için izlenecek adımlar farklı.
Önce /etc/rc.conf dosyasına syslogd_enable=”YES” satırını ve flagları belirteceğimiz satırları ekliyoruz. (Bu satırların daha önceden rc.conf dosyasında olmadığını varsayıyorum.)
# echo 'syslogd_enable="YES"' >> /etc/rc.conf # echo 'syslogd_flags="-s -b 192.168.12.233"' >> /etc/rc.conf
Şimdi syslogd'yi restart edelim.
# /etc/rc.d/syslogd restart
syslogd de artık sadece birincil ip adresini dinliyor olmalı. Doğrulamak için şu komutu verebilirsiniz.
# netstat -an |grep udp |grep 514
Çıktı şöyle olacaktır.
udp4 0 0 192.168.12.233.514 *.*
Default şekilde kurulmuş bir FreeBSD'de yapılması gereken işlemler bu kadar. Ancak siz host sunucu üzerinde başka servisler de çalıştırıyorsanız, bu servisleri de aynı şekilde host sistemin birincil ip'sine bind etmeniz gerekir.
Şimdi jail'leri oluşturmak için kullanılacak ezjail paketini kuralım.
EZJAIL
Yazının başında da belirttiğim gibi ezjail, jail sistemler oluşturmak için kullanılan bir framework. Dolayısı ile önce bu yazılımı kurmamız gerekiyor.
KURULUM
Kurulumu her zamanki gibi port ağacından yapıyorum; siz de bu şekilde yapabilirsiniz.
# cd /usr/ports/sysutils/ezjail/ && make install clean
Basitçe kurulumu tamamladıktan sonra, bir iki yapılandırma adımı bulunuyor.
YAPILANDIRMA
Herhangi bir Jail oluşturmadan önce, Jail template'i oluşturmak gerekiyor. Jail template her bir jail sistem için kullanılacak şablondur.
Jail Template'i Oluşturmak
Template oluşturmanın iki yolu var; birincisi host sistemin kaynak kodlarını kullanmaktır. İkincisi ise şablon için gerekli sistem dosyalarının ftp'den download edilip template'in oluşturulmasını sağlamaktır.
Alternatif 1 – Sistemdeki Kaynak Kodlarını Kullanarak Template Oluşturmak
Bu yöntemi kullanabilmek için /usr/src dizini altında kaynak kodları bulunmalı ve daha önceden make buildword && make install world yapmış olmanız gerekir. (Eğer buildworld yapmadıysanız alternatif iki'yi kullanmanız gerekir.)
Bu işlem için aşağıdaki komudu verebilirsiniz:
# ezjail-admin update -p -i
Komutta kullanılan parametreler şöyledir:
- – p: Jail sistemlere port ağacı desteği sun.
- – i: Make world yapma. Bu şekilde, şablon için hali hazırda yapılmış olan buildworld kullanılacaktır.
Alternatif 2 – Dosyaları FTP'den çekerek Template Oluşturmak
Eğer sisteminizde /usr/src dizini altında kaynak kodlar bulunmuyor ve daha önce make buildworld işlemi yapmadıysanız, template oluşturmak için aşağıdaki komutu verebilir ve gerekli sistem dosyalarının ftp ile download edilmesini sağlayabilirsiniz:
# ezjail-admin install
Bu komutu verdiğiniz zaman, FreeBSD ftp sunucularına bağlanılacak ve hangi sürümü kullanmak istediğinizi sorarak gerekli dosyaları download edip işlemi tamamlayacaktır. (Eski bir sürüm kullanıyorsanız, FTP sunucularında ilgili sürüme ait dosyalar bulunmayabilir. Bu durumda ya birinci adımı kullanmanız ya da sisteminizi upgrade etmeniz gerekir.)
NOT:Jail template'i bu yöntemle oluşturursanız, Jail sistem içerisinde default port ağacını kullanmak mümkün olmamaktadır. Ancak yazının ilerisinde, port ağacının Jail içerisinden nasıl kullanılabileceğini içeren bir bölüm bulabilirsiniz. |
Template oluşturma işleminden sonra devam edebiliriz.
Jail İçin Kullanılacak IP Adresinin Alias Olarak Set Edilmesi
Birazdan bir Jail oluşturacağuz. Ancak bu işlem için öncelikle, Jail'e verilecek IP adresini sisteme ikinci ip adresi olarak tanımlamak gerekir. Örneğin benim test için kullandığım sistemin birinci IP'si 192.168.12.233, şimdi bu sisteme 192.168.12.234 ip adresini Jail'de kullanılmak için alias olarak tanımlayacağım:
# ifconfig bge0 alias 192.168.12.234 netmask 255.255.255.255
Not: Benim kullandığım sistemde ethernet kartının adı bge0 (Broadcom) komutu kendinize göre düzenlerken, kendi ethernet kartınıza ait ismi belirtmeyi unutmayın.
Şimdi, IP adresi sisteme tanımlandı, ancak sistem reboot edildiği zaman bu ayar uçacaktır, kalıcı olması için aşağıdaki gibi bir satırı /etc/rc.conf dosyasina eklemeniz gerekir.
ifconfig_bge0_alias0="inet 192.168.12.234/32"
Bu işlemin ardından, temel yapılandırma bitmiş oluyor. Artık bir Jail oluşturabiliriz.
EZJAIL KULLANARAK JAIL OLUŞTURMAK
Şimdi ilk jail sistemimizi oluşturacağız, jail oluşturmak oldukça kolay iş. Aşağıdaki komutu kendinize göre uyarlayarak ilk jailinizi oluşturabilirsiniz.
# ezjail-admin create jail-adi jail-ip-adresi
Örnek Bir Jail Oluşturulması
Ben, ip adresi 192.168.12.234 olan bir web sunucusu oluşturacağım dolayısı ile jail oluşturmak için kullandığım komut şu:
# ezjail-admin create web1.cagriersen.net 192.168.12.234
Şimdi, web1.cagriersen.net hostname'li bir Jail oluşturuldu. Aynı şekilde sisteminize yeni ip adresleri ekleyerek istediğiniz kadar jail sistem oluşturabilirsiniz.
Şimdi oluşturduğumuz Jail'i start edeceğiz.
Jail'in Start Edilmesi
Bunun için önce, host sistemin açılışı sırasında Jail'in (ya da jaillerin) başlatılması için /etc/rc.conf dosyasına gerekli satırı ekleyelim:
# echo 'ezjail_enable="YES"' >> /etc/rc.conf
Şimdi de Jail'i start edelim:
# /usr/local/etc/rc.d/ezjail.sh start
Böylece, Jail start olacaktır, eğer sistemde birden fazla Jail olsaydı bu komut tüm jaillerin start edilmesini sağlayacaktı. Böyle bir ortamda, sadece belirli jaillerin start/stop edilmesini isterseniz aşağıdaki komut şablonunu kullanabilirsiniz.
# /usr/local/etc/rc.d/ezjail.sh start web1.cagriersen.net # /usr/local/etc/rc.d/ezjail.sh stop web1.cagriersen.net
Jail Sistemlerin Listelenmesi
Sistem de oluşturulan Jail'lerin listelenmesi için aşağıdaki komut kullanılabilir.
# /usr/local/etc/rc.d/ezjail.sh start
Çıktı şu şekilde olacaktır.
JID IP Address Hostname Path 6 192.168.12.234 web1.cagriersen.net /usr/jails/web1.cagriersen.net
Host üzerindeki Jail yapılandırması ve genel bilgilere değindikten sonra Jail sisteme bağlanıp yapılandırma işlemlerine geçebiliriz.
JAIL YAPILANDIRMASI
Host üstünde, Jail sistemlerle ilgili yapılandırma dosyalarının tutulduğu dizin /usr/local/etc/ezjail/ dir. Bu dizine girdiğiniz zaman oluşturduğunuz Jail'e ait conf dosyalarını bulabilirsiniz. Bizim örneğimize göre web1.cagriersen.net isimli jail'İn conf dosyasının adı web1_cagriersen_net'dir ve içeriği aşağıdaki gibidir.
# To specify the start up order of your ezjails, use these lines to # create a Jail dependency tree. See rcorder(8) for more details. # # PROVIDE: standard_ezjail # REQUIRE: # BEFORE: # export jail_web1.cagriersen.net_hostname="web1.cagriersen.net" export jail_web1.cagriersen.net_ip="192.168.12.234" export jail_web1.cagriersen.net_rootdir="/usr/jails/web1.cagriersen.net" export jail_web1.cagriersen.net_exec="/bin/sh /etc/rc" export jail_web1.cagriersen.net_mount_enable="YES" export jail_web1.cagriersen.net_devfs_enable="YES" export jail_web1.cagriersen.net_devfs_ruleset="devfsrules_jail" export jail_web1.cagriersen.net_procfs_enable="YES" export jail_web1.cagriersen.net_fdescfs_enable="YES" export jail_web1.cagriersen.net_image="" export jail_web1.cagriersen.net_imagetype="" export jail_web1.cagriersen.net_attachparams="" export jail_web1.cagriersen.net_attachblocking="" export jail_web1.cagriersen.net_forceblocking=""
Jail ile ilgili her türlü bilgi burada görülüyor. Ancak bizim bu dosyayı şu an için editlememize gerek yok. Değişiklik yapmak için dosyayı istediğiniz gibi düzenleyebilir ve jail'i yeniden başlatabilirsiniz. Ayrıca detaylar için sayfanın en altındaki kaynak linklerinden yararlanabilirsiniz.
Öncelikle, Jail'e bağlanmamız gerekiyor. Şu an Jail sistem tamamen bomboş minik bir FreeBSD kurulumundan ibaret olduğundan dolayı üzerinde SSH servisi falan yok; ve bazı configurasyon dosyaları eksik. Bu yüzden Jail'e host sistemden konsol aracılığı ile erişeceğiz.
Jail Sisteme Host Üzerinden Login Olmak
Bu işlem için, ezjail'in console özelliğini kullanıyoruz. Şu şekilde bir komut ile bağlantı kurulabilir:
# ezjail-admin console web1.cagriersen.net
Bu noktada aşağıdaki uyarıya dikkat ediniz.
UYARI: Console bağlantısı kurmak istediğiniz zaman, jexec: Unable to parse jail ID.: No such file or directory gibi bir hata alıyorsanız, problem jail templat'i oluştururken kendi kaynak kodlarınızı ve make buildworld'ü kullanmanız ile alakalıdır. Bu durumda, Jail template'i 2. alternatif olarak anlatılan ftp'den çekme yöntemi ile oluşturmanızı önreririm. |
Çıktı aşağıdaki gibi olacaktır:
Copyright (c) 1992-2009 The FreeBSD Project. Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994 The Regents of the University of California. All rights reserved. FreeBSD 7.2-RELEASE-p2 (GENERIC) #0: Wed Jun 24 00:57:44 UTC 2009 Welcome to FreeBSD! Before seeking technical support, please use the following resources: o Security advisories and updated errata information for all releases are at http://www.FreeBSD.org/releases/ - always consult the ERRATA section for your release first as it's updated frequently. o The Handbook and FAQ documents are at http://www.FreeBSD.org/ and, along with the mailing lists, can be searched by going to http://www.FreeBSD.org/search/. If the doc distribution has been installed, they're also available formatted in /usr/share/doc. If you still have a question or problem, please take the output of `uname -a', along with any relevant error messages, and email it as a question to the [email protected] mailing list. If you are unfamiliar with FreeBSD's directory layout, please refer to the hier(7) manual page. If you are not familiar with manual pages, type `man man'. You may also use sysinstall(8) to re-enter the installation and configuration utility. Edit /etc/motd to change this login announcement. web1#
Görüldüğü gibi web1 isimli Jail sisteme eriştik. Şimdi sistemin internete çıkabilmesi için dns ayarlarını yapmak gerekiyor.
Jail Üzerinden İnternet Erişimi
Aslında sistem şu an internete erişebiliyor fakat, bomboş bir kuruluma sahip olduğu için bir resolv.conf dosyası yok (: Dolayısı ile bu dosyayı oluşturmamız ve bir dns sunucusunun ip adresini eklememiz gerekiyor.
Bu işi şu şekilde yapıyorum: (Kendi dns sunucunuzu belirtmeyi unutmayın.)
# echo 'nameserver 192.168.12.45' >> /etc/resolv.conf
Şimdi, isim çözümlemesi yapabilir ve internete bağlanabiliriz. Bu da sisteme istediğimiz paketi kurabileceğimiz anlamına geliyor. Hem durumu test etmek hem de lazım olacağı için bash kuralım.
# pkg_add -r bash Fetching ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-6-stable/Latest/bash.tbz... Done. Fetching ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-6-stable/All/libiconv-1.13.1.tbz... Done. Fetching ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-6-stable/All/gettext-0.17_1.tbz... Done.
Görüldüğü gibi gerekli paketler download edildi ve sisteme kuruldu.
Jail Üzerinde SSH Servisinin Çalıştırılması
Şimdi Jail üzerinde SSH servisini up edeceğiz, bu şekilde Jail'e bağlanmak için öncesinde Host sisteme bağlanmaya gerek kalmayacak.
NOT:Biraz öncede dediğim gibi, sistem tertemiz bir kuruluma sahip öyle ki root passwordu bile boş. Bu nedenle ssh servisini başlatmadan önce kendinize bir kullanıcı açmanızı ve ayrıca root kullanıcısı için bir password belirlemelisiniz. |
Şimdi, /etc/ssh/sshd_config dosyasını editleyin:
# vi /etc/ssh/sshd_config
Aşağıda gördüğünüz Listen satırını bulalım:
#ListenAddress 0.0.0.0
Satırın başındaki # işaretini kaldırıp, 0.0.0.0 yerine Jail'in ip adresini verelim.
ListenAddress 192.168.12.234
Dosyayı kaydettikten sonra, /etc/rc.conf dosyasında açılışlarda ssh'ın start edilmesini belirtiyoruz.
# echo 'sshd_enable="YES"' >> /etc/rc.conf
Sonra da SSH servisini başlatıyoruz.
# /etc/rc.d/sshd start
Artık Jail'e SSH üzerinden bağlanmak mümkün.
Şimdi Jail üzerinde apache22 kuralım.
Jail Sistem Üzerine Apache Web Sunucusu Kurmak
Bu işlemin enteresan bir tarafı yok, sadece bilgi olması açısından değiniyorum. Herzamanki gibi port ağacından yararlanarak kurulum yapacağız.
Port ağacında ilgili dizine giriyoruz:
# /usr/ports/www/apache22
Not: Ports dizinine giremiyorsanız bir sonraki başlığa bakın.
ve kurulumu yapıyoruz.
# make install clean
Jail Sistemde Port Ağacına Ulaşamıyorsanız!
Bunun anlamı, yazının başında da anlatılan template oluşturma işlemini, host sistemdeki kaynak kodlar ve buildworld'ü kullanmak yerine “ezjail-admin install” komutu ile ftp'den download ederek oluşturmuş olmanızdır. Bu durumda port ağacını kullanamazsınız. Ancak aşağıdaki işlemleri yaparak, host sistemin port ağacını Jail'lerin kullanımına açabilirsiniz.
Host sisteme root ile login olun ve aşağıdaki işlem adımlarını sırası ile uygulayın:
# rm /usr/jails/web1.cagriersen.net/usr/ports # D=/usr/jails/web1.cagriersen.net # mkdir -p $D/usr/ports # mount_nullfs /usr/ports $D/usr/ports
Yukarıdaki işlemler, host sistemdeki /usr/ports dizinini Jail sistemin base dizinindeki /usr/ports dizinine mount_nullfs komutu ve yazma izni ile mount etmektedir. Bu şekilde Jail içerisinde port ağacından yararlanmak mümkündür.
Not: Oluşturduğunuz tüm Jail sistemlerde port ağacı kullanabilmek için yukarıdaki işlemleri ilk adım hariç ilgili Jailler için teker teker uygulamalısınız. rm /usr/jails/jail-ismi/usr/ports komutu, host sisteminde bulunan port ağacını da silecektir. DİKKAT!
Jailler'in ports ağacına sadece okuma izni ile erişmelerini istiyorsanız aşağıdaki adımları izleyebilirsiniz.
# D=/usr/jails/web1.cagriersen.net # mkdir -p $D/usr/ports # mount_nullfs -o ro /usr/ports $D/usr/ports
UYARI:Jail'lerinize bu yöntem ile ports desteği sağlıyorsanız, herhangi bir jail'i silmek istediğiniz zaman, host'un /usr/ports dizini ilgili Jail'e mount edilmiş olduğundan dolayı, silme işlemi host sistemin /usr/ports dizinini de uçurur. Bu nedenle silme işleminden önce umount /usr/ports komutu ile ports'u unmount edin. |
Evet, Jail sistemler ile ilgili temel bilgiler bu şekildeydi. Sonuç olarak Jail ortamları, sunucuların güvenliklerini arttırmak için oldukça kullanışlıdır; ve kritik uygulamalarınızı Jail'lere hapsetmeniz yararınıza olabilir.
Konu hakkında daha fazla bilgi için aşağıdaki linklere de göz atabilirsiniz.
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/jails.html
http://www.packtpub.com/article/securing-network-services-with-freebsd-jails
http://www.cyberciti.biz/faq/howto-setup-freebsd-jail-with-ezjail/
Bu yazılar da ilginizi çekebilir:
- FreeBSD Jail Sistemlere İkinci IP Eklemek
- FreeBSD – Jail Sistemleri Ramdisk Üzerinde Çalıştırmak
- Ezjail Flavours ile Öntanımlı Jail Sistemler Oluşturmak
- Portsnap ile Süratli Ports Collection Güncellemesi.
- FreeBSD – pkg_add: File unavailable (file not found, no access)
Yorumlar
Trackbacks
Yorumda bulunun.
jail i kurduktan sonra root kullanıcısına password atadım ama ;
ifconfig em0 up dediğimde permission denied diyor.
bu sorunu nasıl çözebilirim?
[Cevapla]
Normal şartlarda Jail start olduğu zaman ethernet up oluyor. Sizin up etmeniz gerekmez.
ifconfig ile baktiğiniz zaman UP olarak görmüyor musunuz ?
[Cevapla]
active görünüyor ama resolv.conf u da ayarladım ama jail de root olmama rağmen
ping: socket: Operation not permitted
diyor./etc/rc.conf dosyası jail oluşturulduğunda boştu yeniden oluşturdum resolv.conf ile beraber
[Cevapla]
Jail içerisinde ping vs. desteği yok :) Amaç güvenlik olduğu için gerekmeyecek hiç bir tool kullanilamiyor.
Muhtemelen su an baglanti ile ilgili bir sorununuz yok. Test etmek icin orneğin
şeklinde bash kurulumu yaparsaniz paketlerin internetten download edilip kurulacagini goreceksiniz.
Ya da fetch ile bir sey download edebilirsiniz.
[Cevapla]
:) evet öyleymiş.
[Cevapla]
Abi elıne saglık
[Cevapla]
Merhaba,
Yazınız için tebrik ederim. Gayet anlaşılır ve net ifadelerle yazıya dökülmüş. Aşamaları FreeBSD’nin 9.1 sürümünde denedim. Herhangi bir aksaklık yaşamadım. Sadece jail ortamda usr/ports dizinine erişemediğimizde yapmamız gereken aşamalarda environment değerini set ederken komut hatası verdi. FreeBSD 9.1 de bir ortam tanımlarken şu şekilde tanımlamak gerekiyormuş.
setenv D /usr/jails/web1.cagriersen.net
FreeBSD 9.1 için şu şekilde yapıldığında sorun çıkmıyor.
# rm /usr/jails/web1.cagriersen.net/usr/ports
# setenv D /usr/jails/web1.cagriersen.net
# mkdir -p $D/usr/ports
# mount_nullfs /usr/ports $D/usr/ports
Tekrar teşekkürler.
[Cevapla]
Selamlar,
Katkınız için teşekkür ederim. Yazının ilgili bölümününe verdiğiniz bu bilgiyi de ekleyeceğim.
[Cevapla]