Qmail’de 587 Submission Portunu Devreye Almak
Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MY2p38Gr' (Errcode: 28 - No space left on device) in /usr/share/nginx/html/syslogs/wp-includes/class-wpdb.php on line 2349
Bildiğiniz gibi bir müddet önce TTNET bazı illerden başlamak üzere dinamik ip sahibi ADSL abonelerinin 25. portlarını kapayacağını ve bu kullanıcıların mail gönderimi için 587. (submission) portunu kullanmaları gerekeceğini duyurmuştu. Bu yerinde uygulama için insanlardan gelen anlaşılmaz eleştriler nedeni ile de buradan erişebileceğiniz naçizane bir yazı hazırlamıştım. Eleştriler devam ede dursun, TTNet uygulamayı devreye almaya başladı ve çeşitli mecralarda smtp portunun bloklandığını duyar olduk. |
Sonuç olarak, bir posta sunucusu yönetiyor ve adsl üzerinde posta hizmeti alan kullanıcılarınız varsa, kullanıcılarınıza submission portu üzerinden de hizmet vermeniz gerekir. Bu yazıda, üzerinde qmail ve vpopmail çalışan bir FreeBSD posta sunucusunda, submission portunun nasıl devreye alınabileceğini anlatan kurulum notlarını paylaşmak istiyorum.
GENEL BİLGİLER
NOT: Bu yazıda anlatılan yöntemle, qmail'a submission desteği kazandırmak için sisteme bir PATCH geçilmesi gerekmektedir. Ancak patch geçmeye gerek kalmayan bir yöntem arıyorsanız. Aynı işin spamdyke ile nasıl yapıldığını anlatan bu makaleden yararlanabilirsiniz. |
qmail sunucularda, submission desteğini olması gerektiği gibi verebilmek için yapmanız gereken iki işlem bulunuyor:
- qmail'de ikinci bir smtp instance oluşturup 587. port üzerine çalıştırmak.
- 587. port'ta Kimlik Doğrulamasını zorunlu kılmak.
Aslına bakarsanız, ilk adımı uygulamanız TTNet'in 25. portu bloklamasından etkilenmemeniz için yeterli olur, ama amaç bu port üzerinde kimlik doğrulamasını zorunlu kılarak, sadece geçerli kullanıcılar tarafından mail gönderilebilmesini sağlamak olduğu için bu şekilde submission meselesini olması gerektiği gibi kullanmamış oluruz . (Aksi halde, firewall'unuzdan 587'yi 25. porta yönlendirerek de çözüm(?) sağlayabilirsiniz.) Bu nedenle, ikinci adımı da uygulamanız gerekiyor. Kafanızda soru işaretleri varsa, yazının başında verdiğim linkten daha önceki yazımı inceleyebilirsiniz.
Ben, testler için üzerinde netqmail-1.06 ve vpopmail-5.4.27 kurulu olan bir qmail kullandım. Bu qmail'de SMTP-AUTH için Qmail SMTP-AUTH/TLS composite patch‘i kullanılıyor. Ayrıca, submission portu üzerinde smtp kimlik doğrulamasını zorunlu kılmak için de qmail'e plugin desteği sağlayan qmail-spp patch'ni sisteme kurup, patch ile kullanılabilen Authrequired pluginini 587. port üzerine çalıştırdım.
NOT: Kullandığım qmail, FreeBSD üzerinde LWQ prosedürüne göre kurulmuştur. Siz qmail'inizi farklı bir yöntemle kurduysanız, qmail script ve binary dosyalarının yerlerinin değişik olması gibi küçük farklar olabilir. |
İşte nasıl yapıldığı…
UYGULAMA
İşe ikinci bir qmail-smtp instance'ı oluşturup, 587. porta bind ederek başlayacağız bu instance, MSA (message submission agent) olarak kullanılacak, aşağıdaki yönergeleri takip ederek kolayca yapabilirsiniz.
İKİNCİ qmail-smtp INSTANCE'ININ OLUŞTURULMASI
Yapılması gereken şey halihazırda çalışmakta olan qmail-smtpd'ye ait yapılandırma dizin ve dosyalarının farklı bir isimle kopyalanması ve qmailctl başlangıç betiğine ikinci instance için gerekli eklemelerin yapılmasından ibaret.
Önce qmail'inizi durdurun.
# qmailctl stop
İlk olarak gerekli dizinleri kopyalayacağız, sonrasında da yapılandırma dosyalarındaki değişiklikleri yapacağız.
Şimdi /var/qmail/supervise/ altındaki qmail-smtpd dizinini aynı dizine qmail-submission ismi ile kopyalayın.
# cd /var/qmail/supervise/ # cp -pr qmail-smtpd qmail-submission
Daha sonra smtpd log dizinini submission ismi ile kopyalayın.
# cd /var/log/qmail/ # cp -pr smtpd submission
supervise altındaki qmail-submission dizinini /service dizinine linkleyin.
# ln -s /var/qmail/supervise/qmail-submission /service
Şimdi kopyaladığımız dosyalardaki yapılandırma ayarlarını düzenleyeceğiz.
Önce qmail-submission/run betiğini editleyin:
# vi /var/qmail/supervise/qmail-submission/run
ve içeriğini şu şekilde değiştirin.
#!/bin/sh
QMAILDUID=`id -u vpopmail`
NOFILESGID=`id -g vpopmail`
MAXSMTPD=`cat /var/qmail/control/concurrencyincoming`
exec /usr/local/bin/softlimit -m 8000000 \
/usr/local/bin/tcpserver -v -H -R -l 0 \
-x /etc/tcp.smtp.cdb -c "$MAXSMTPD" \
-u "$QMAILDUID" -g "$NOFILESGID" 0 587
Gördüğünüz gibi bu dosyada servis 587. port bind ediliyor.
Şimdi de, log/run dosyasını editleyin
# vi /var/qmail/supervise/qmail-submission/log/run
içeriğini şu şekilde değiştirin.
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail/submission
Son olarak, qmailctl isimli başlangıç betiğine qmail-submission için gerekli eklemeleri yapacağız. Uğraşmak istemiyorsanız, buradan indirebilirsiniz.
NOT: Betik, standart LWQ qmailctl'sidir. qmail-smtp, qmail-send, qmail-pop3d ve qmail-submission servisleri için editlenmiştir. Sizin betik dosyanız farklılıklar gösteriyorsa, ekleme işlemini aşağıdaki adımları izleyerek manuel olarak yapın. |
qmailctl betiğini editleyin
# vi /var/qmail/bin/qmailctl
“start” segmesine aşağıdaki satırları formal olarak ekleyin.
if svok /service/qmail-submission ; then svc -u /service/qmail-submission /service/qmail-submission/log else echo "qmail-submission supervise not running" fi
“stop” segmesine:
echo " qmail-submission" svc -d /service/qmail-submission /service/qmail-submission/log
“stat” segmesine:
svstat /service/qmail-submission svstat /service/qmail-submission/log
“pause” segmesine:
echo "Pausing qmail-submission" svc -p /service/qmail-submission
“cont” segmesine:
echo "Continuing qmail-submission" svc -c /service/qmail-submission
“restart” segmesine:
echo "* Stopping qmail-submission." svc -d /service/qmail-submission /service/qmail-submission/log echo "* Sending qmail-send SIGTERM and restarting." echo "* Restarting qmail-submission." svc -u /service/qmail-submission /service/qmail-submission/log
İlgili satırları ekledikten sonra, qmail çalışmaya hazırdır. Start edelim.
# qmailctl start
Şu an qmail 587. porttan hizmet veriyor olmalı. Aşağıdaki şekilde kontrol edebilirsiniz.
# netstat -an |grep LISTEN
Çıktı şu şekilde olmalıdır:
tcp4 0 0 *.110 *.* LISTEN
tcp4 0 0 *.587 *.* LISTEN
tcp4 0 0 *.25 *.* LISTEN
Görüldüğü gibi 587. port bind edilmiş durumda.
Ayrıca, qmailctl stat komutunun çıktısında da oluşturduğumuz qmail-submission instance'ının çalışıyor olduğunu görmeniz gerekir.
/service/qmail-send: up (pid 10038) 5262 seconds
/service/qmail-send/log: up (pid 10043) 5261 seconds
/service/qmail-smtpd: up (pid 10046) 5261 seconds
/service/qmail-smtpd/log: up (pid 10051) 5261 seconds
/service/qmail-submission: up (pid 10054) 5261 seconds
/service/qmail-submission/log: up (pid 10058) 5261 seconds
/service/qmail-pop3d: up (pid 10061) 5261 seconds
/service/qmail-pop3d/log: up (pid 10062) 5261 seconds
messages in queue: 0
messages in queue but not yet preprocessed: 0
Son olarak, telnet ile kontrol edelim.
# telnet localhost 587 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 sub.cagriersen.net ESMTP ehlo 250-sub.cagriersen.net 250-STARTTLS 250-PIPELINING 250-8BITMIME 250-SIZE 0 250 AUTH LOGIN PLAIN CRAM-MD5
Telnet üzerinde ya da herhangi bir e-posta istemcisi ile de mail göndermeyi deneyip, düzgün çalıştığından emin olabilirsiniz.
Submission portunu devreye aldıktan sonra, ikinci aşama olan kimlik denetiminin zorunlu kılınması işine geçebiliriz.
587. PORT ÜZERİNDE ZORUNLU KİMLİK DOĞRULAMASI
Bu iş için yazının başında belirttiğim qmail-spp patch'ini kullandım. Bu patch, qmail-smtpd için plugin desteği sağlamakta. Yani qmail'inize ekstra özellikler kazandırmak istemeniz durumunda, her bir özellik için ayrı ayrı patch'ler geçmenize gerek kalmıyor.
Patch'i geçerek, http://qmail-spp.sourceforge.net/plugins/ adresinde belirtilen ekstra özellikleri kolayca kullanmaya başlayabiliyorsunuz. Pluginler arasında, authrequired isimli bir patch bulunuyor. Bu patch qmail-smtpd üzerinde zorunlu kimlik denetimi yapılmasına olanak sağlıyor.
Ben patch'i geçtikten sonra, submission portu üzerinde (ikinci qmail-smtpd) bu plugini devreye alarak smtp kimlik doğrulamasını devreye aldım.
Aşağıdaki adımları izleyerek bu işlemi yapabilirsiniz.
Önce qmail-spp patchini geçeceğiz.
qmail'in kaynak kodlarının bulunduğu dizine girin (bende /usr/local/src) ve bu adresten patch'i download edin. (şu an son sürüm 0.42).
# cd /usr/local/src # http://garr.dl.sourceforge.net/sourceforge/qmail-spp/qmail-spp-0.42.tar.gz
Sıkıştırılmış paketi açıyoruz.
# tar -xvf qmail-spp-0.42.tar.gz
Paketin içerisinde, patch'in bir kaç farklı versiyonu bulunuyor. Versiyonlar şu şekilde:
- qmail-spp.diff – qmail 1.03 için.
- netqmail-spp.diff – netqmail 1.05 (ve 1.06) için.
- qmail-spp-smtpauth.diff – Krzysztof Dabrowski”nin SMTP-AUTH patch'i geçilmiş qmail için.
- qmail-spp-smtpauth-eh.diff – Erwin Hoffman”ın SMTP AUTH patch v. 0.4.3 patch'i geçilmiş qmail için.
- qmail-spp-smtpauth-tls-20060105.diff – Bill Shupp”ın, netqmail 1.05 (ve 1.06) için yazdığı SMTP-AUTH/TLS ( version 20060105) composite patch'inin geçilmiş olduğu qmail'ler için
Gördüğünüz gibi en popüler smtp-auth patch'leri için birer versiyon bulunuyor. (sisteminizde muhtemelen bu patch'lerden biri geçilidir.) Ben netqmail 1.06 üzerinde SMTP-AUTH/TLS composite patch'ini kullandığımı söylemiştim. Bu nedenle qmail-spp'nin, qmail-spp-smtpauth-tls-20060105.diff versiyonunu kullandım. Siz, kendi qmail sürümünüze ve kullandığınız smtp-auth patchine uygun versiyonu kullanın.
Kullanacağımız patch versiyonunu, bulunduğumuz (usr/local/src) dizine kopyalıyoruz, sonra qmail kaynak kodlarının bulunduğu dizine geçip patch'i uyguluyoruz.
Şimdi qmail'i durdurup, yeniden derleme ve kurma işlemi yapıyoruz.
UYARI: Yeniden derleme ve kurma işlemi /var/qmail/bin dizinindeki qmail binary dosyalarının kaldırılmasına neden olur. Eğer (örneğin qsheff ve spamassassin için özel qmail-queue dosyası gibi) custom binary dosyalarınız varsa, sıradaki adıma geçmeden önce yedek almanızı öneririm. Derleme/kurma işleminden sonra, özel binary'leri yeniden set etmeniz gerekir. |
# qmailctl stop # make # make setup check
Kurulumun ardından, qmail-spp'nin ana yapılandırma dosyasını ve plugin dizinini oluşturun. (yapılandırma dosyasını kullanmayacağız ama oluşturulması gerekiyor.)
# touch /var/qmail/control/smtpplugins # mkdir /var/qmail/plugins
Şimdi qmail'i yeniden başlatabiliriz.
# qmailctl start
Herşeyin yolunda gittiyse patch, dolayısı ile pluginler kullanılabilir durumda demektir. Şimdi authrequired plugin'ini 587. port için devreye alacağız.
Plugini buradan download edebilirsiniz. Kurulum adımları şöyle:
# fetch http://xs3.b92.net/tomislavr/authrequired.c # gcc authrequired.c -o authrequired # strip authrequired
Authrequired dosyasını, plugin dizinine kopyalıyoruz. (dizin genellikle /var/qmail/plugins ‘dir.)
# cp authrequired /var/qmail/plugins
Bu plugin için sadece 587. port üzerinde çalışan qmail-smtpd'de kullanılmak üzere bir yapılandırma dosyası oluşturuyoruz.
# touch /var/qmail/control/submission-smtpd
Şimdi de dosyanın içerisine aşağıdaki satırları girelim.
[connection] [auth] [helo] [mail] plugins/authrequired [rcpt] [data]
Plugin hazır durumda, bundan sonraki aşama, submission portu için kullandığımız qmail-smtpd daemonuna, bu yapılandırma dosyasını kullanmasını söylemekten ibaret.
Bunun için farklı bir isimle yeni bir tcp.smtpd.cdb dosyası oluşturacağız ve içerisinde SPPCONFFILE çevre değişkeni ile yapılandırma dosyasının yerini belirteceğiz. Son olarak, submission için kullandığımız qmail-smtpd'nin bu cdb dosyasını kullanmasını söyleyeceğiz.
Önce cdb dosyasını oluşturalım. Normal olarak default cdb dosyası /etc altında tcp.smtp.cdb ismi ile bulunmaktadır. Submission için ise tcp.submission.cdb ismini kullanalım.
cdb dosyasına dönüştürmek için /etc altında tcp.submission isimli bir dosya oluşturun.
# touch /etc/tcp.submission
Sonra dosya içerisine aşağıdaki satırları ekleyin.
127.:allow,RELAYCLIENT="" :allow,SPPCONFFILE="/var/qmail/control/submission-smtpd"
Böylece localhost harici diğer herkes için, kimlik doğrulamasını zorunlu kılan “submission-smtpd” conf dosyası kullanılacak.
Şimdi, bu dosyayı kullanarak tcp.submission.cdb dosyasını oluşturun.
cdb dosyası hazır. İleride 587. port üzerinden birilerine relay izni vermek istemeniz durumunda (aslında niye isteyesiniz ki?) tcp.submission dosyasına ekleme yaptıktan sonra yukarıdaki komutu manuel olarak çalıştırmak yerine “qmailctl cdb” komutunu kullanmak isterseniz, aşağıdaki satırları qmailctl dosyanızın cdb segmesine ekleyebilirsiniz.
Artık, submission'a ait qmail-smtpd'ye bu cdb'yi kullanmasını söyleyebiliriz.
qmail-submission/run dosyasını editleyin:
# vi /var/qmail/supervise/qmail-submission/run
ve aşağıda mavi ile belirtilen değişikliği yaparak dosyayı kaydedin.
#!/bin/sh
QMAILDUID=`id -u vpopmail`
NOFILESGID=`id -g vpopmail`
MAXSMTPD=`cat /var/qmail/control/concurrencyincoming`
exec /usr/local/bin/softlimit -m 11000000 \
/usr/local/bin/tcpserver -v -H -R -l 0 \
-x /etc/tcp.submission.cdb
Artık 25. porttan normal olarak mail gönderimi yapılabilirken, submission portu üzerinden kimlik doğrulaması yapılmadan mail gönderilemeyecektir.
Kontrol etmek için sunucuya 587. porttan telnet ile bağlanalım ve mail göndermeyi deneyelim. (Not: Bu işlemi sunucunun kendi üzerinden yapmayın, localhost'a relay izni bulunduğu için gönderim yapılabilir.)
cagriersen@crom-home:~$ telnet 192.168.12.236 587 Trying 192.168.12.236... Connected to 192.168.12.236. Escape character is '^]'. 220 sub.cagriersen.net ESMTP helo crom-home.cagriersen.net 250-sub.cagriersen.net mail from: [email protected] 550 SMTP AUTH required
Görüldüğü gibi, 550 SMTP AUTH required hatası ile önce kimlik doğrulaması isteniyor.
Fakat aynı işlemi 25. port üzerinden denerseniz AUTH olmanıza gerek olmayacaktır:
cagriersen@crom-home:~$ telnet 192.168.12.236 25 Trying 192.168.12.236... Connected to 192.168.12.236. Escape character is '^]'. 220 sub.cagriersen.net ESMTP helo crom-home.cagriersen.net 250-sub.cagriersen.net mail from: [email protected] 250 ok
Şimdi de, 587 üzerinde kimlik doğrulaması yaparak mail gönderimini deneyelim.
cagriersen@crom-home:~$ telnet 192.168.12.236 587 Trying 192.168.12.236... Connected to 192.168.12.236. Escape character is '^]'. 220 sub.cagriersen.net ESMTP helo crom-home.cagriersen.net 250-sub.cagriersen.net AUTH LOGIN 334 VXNlcm5hbWU6 Y2FncmlAdGVzdC5jb20= 334 UGFzc3dvcmQ6 aG9jYW0gYnVrYWRhciB1Z3Jhc3RpbiBtaSB5YWh1 235 ok, go ahead (#2.0.0) mail from: [email protected] 250 ok rcpt to: [email protected] 250 ok data 354 go ahead Subject: Selamlar Test olayi. . 250 ok 1244065693 qp 1253 quit 221 sub.cagriersen.net
Görüldüğü üzere mail gönderimi başarılı oldu.
Sonuç olarak TTNet dinamik ip sahibi ADSL abonelerinin 25. porta erişimlerini kapamaya başladığı zaman (ki başladı) kullanıcılarınız sunucunuza 587. porttan erişebilecek ve login olarak mail gönderebilecekler.
Bu yazılar da ilginizi çekebilir:
- Spamdyke ile Qmail’de 587 Submission Yapılandırması
- qmail – Oversize DNS Patch
- qmail smtpd – Disable Reverse DNS Lookups
- Rblsmtpd
- Netqmail
Yorumlar
Trackbacks
Yorumda bulunun.
yazını çok beğendim. ttnetin bu spamlara yönelik çalışmasını buradan öğrendim. çok hoşuma gitti. bence bunlarla savaşabilecek büyük bir kuruluş lazımdı.
[Cevapla]
Evet çalışma çok yerinde…
Ancak malesef insanlar halen tam olarak bu uygulamanın amacını anlayamıyorlar. Sizin gibi düşünen pek fazla kişi yok.
Selamlar.
[Cevapla]
ttnetin bu spamlara karşı yaptığı bu çalışma toplum tarafından bilinmiyordu bende yeni öğrendim…hem hizmetleriyle hem de bu tur çalışmalarıyla ttnet internette bir numara oldugunu gosteriyor..
[Cevapla]
ttnet in spamlardan bizi kurtarmak için yaotığı bu çalışmayı kutluyorummm.
[Cevapla]
ttnet ten yine güzel bir kampanya herkesin canını sıkan spamlara kesin bi çözüm bulmuşlar helal olsun
[Cevapla]
ttnet spam projesiyle turkıye icin dew bir adım atmıs oldu daha temız bir internet icin tesekkurler ttnet
[Cevapla]
inşallah diğer firmalara da örnek olur. çok yararlı bi çalışma. kullanıcılarını koruduğu için ttnete teşekkür ediyorum.
[Cevapla]
spammer’lar 587 nolu porttan spam yaymaya basladiklarinda da bu portu kapatirlar. sonra baska port, daha baska port…nasilsa geriye daha 64 bin port var.
yasaklarla bir yere varilamaz !
[Cevapla]
Ancak spammerlar, 587. portu kullanarak spam yapamiyorlar.
[Cevapla]
Merhaba, yazınız çok acıklayıcı teşekkürler. Tüm adımları tek tek takip ederek 587. portu aktive ettim. Netstat ile 587. portun dinlendiğini görebiliyorum. qmailctl stat komutu ile submission in calistigini gorebiliyorum.
Ancak telnet localhost 587 dedigimde connection closed diyor ve outlook express ile denedim. Bu porttan islem yapamiyorum.
Henuz auth vermedim bu porta. O adıma geçmeden bu adımda takıldım.
Tum hersey dogru gorunurken neden 587. porttan baglantı saglanamaz?
Saygılar
[Cevapla]
Sorunu buldum. /etc/tcp.smtp.cdb dosyası bende farklı bir dizindeymiş. Su an 1. adımı tamamlamış bulunuyorum.
Saygılar
[Cevapla]
smtp-auth patch’lerinden hangisi secmemiz gerektini nasıl anlayabiliriz, hali hazırdaki qmail kurulumunu ben yapmadım. Dogru patch hangisidir naısl anlayabilirim?
[Cevapla]
Su an sisteminizde zaten bir smtp-auth patch’i gecilmis olmali ?
yoksa smtp-auth yapmiyor musunuz ?
[Cevapla]
ttnet ten çok yerinde bi kampanya daha umarım işe yarar teşekkürler
[Cevapla]
ttnet ten çok yerinde bi çalışma daha baş belası spamlardan ttnet sayesinde kurtulcaz:))
[Cevapla]
Merhaba Çağrı ERSEN.
Sayenizde qmail kullanır olduk. Emeğinize sağlık.
[Cevapla]
Merhabalar,
LWQ da anlatılan gibi kuruduğumda smtpd sıfır olarak görünüyor. 587 portunu anlatılan gibi aktif ettim port dinlemeye başladı yalnız 110 portunu dinlemiyor bu seferde. telnet den başlanmaya çalıştığımda 110 potu Connection refused veriyor 587 ise Connection closed by foreign host.
Araştırmama rağmen çözemedim sorun neden kaynaklanıyor olabilir.
#qmailctl stat
/service/qmail-send: up (pid 11518) 1985 seconds
/service/qmail-send/log: up (pid 11519) 1985 seconds
/service/qmail-smtpd: up (pid 25345) 0 seconds
/service/qmail-smtpd/log: up (pid 11524) 1985 seconds
messages in queue: 0
messages in queue but not yet preprocessed: 0
/service/qmail-submission: up (pid 11533) 1985 seconds
/service/qmail-submission/log: up (pid 11534) 1985 second
[Cevapla]
Selamlar Centos üzerine qmail server kurulumu yaptım Ns kayıtlarım, sp kayıtlarım, ptr kayıtlarım hepsi var server’ımdan örnek veriyorum [email protected] domainine mail gönderdiğimde gidiyor ama bazı domainlere gitmiyor, yine hotmaile gönderiyorum junk’a düşüyor yahoo’da da bu şekilde gmail’e ise gönderdiğimde geri geliyor. Spam listelerini kontrol ettiğimde spam listelerinde olmadığımı görüyorum. gmail’e mail gönderdiğimde geri dönen mailin içerisinde aşağıdaki şekildeki gibi bir hata alıyorum konu hakkında tecrübeleriniz varsa yararlanmak isterim saygılarımla,
:
User and password not set, continuing without authentication.
74.125.43.27 failed after I sent the message.
Remote host said: 550-5.7.1 [111.222.333.444 1] Our system has detected an unusual
rate of
550-5.7.1 unsolicited mail originating from your IP address. To protect our
550-5.7.1 users from spam, mail sent from your IP address has been blocked.
550-5.7.1 Please visit http://www.google.com/mail/help/bulk_mail.html to review
550 5.7.1 our Bulk Email Senders Guidelines. l18si21749567bkb.25
[Cevapla]
Üstat harikasın.. Diyecek birşey bulamıyorum, kaç yıl önce açtığın konu şimdi nasıl işimi gördü anlatamam. Farklı bir makale üzerinden takip ediyordum fakat çok absürt yerlerde hata yapıyordum senin makalen sayesinde nokta atışı yaptım. Kolaylıklar dilerim.
[Cevapla]