original in de Stefan Blechschmidt
de to tr Ceyhun Elmas
1990 yılında Elektrik Eğitimi sırasında bir CAD işistasyonunun başında bir Şalter tasarlıyordu. Sonrasında sistemine bilinmeyen bir Virüs bulaştı ve gerçekten güçlü bir Virüstü.
Bir disketlik bir router'ı kim kullanmazki ;
http://www.fli4l.de/.
Bu problemi herkes bilir, Router bir dial-on-demand olarak ileti sunucusu içeren bir Ağ sisteminde kullanılırsa.
Router bir bağlantı yaptığında ileti sunucusu da iletilerini göndermek ve almak için bunu bilmelidir.
Bu yazı bu problemin nasıl çözülebileceğini anlatıyor.
Giriş resminde bu yazıdaki genel ağ yapısını şematik olarak kabaca gösteriyor. WS1-3 Router üzerinden WWW 'ye açılan işistasyonlarını temsil ediyor. Service-Host iç ve dış iletilerden sorumlu. Göndermeler MTA tarafından başarılıyor. Gelen iletilerden fetchmail sorumlu ve sonrasında procmail ile sıralanıyor. Service-Host üzerindeki iletikutuları POP3 ya da IMAP üzerinden işistasyonlarına sağlanıyor.
İşistasyonlarından biri WWW'ye bir bağlantı sağladığında Service-Host normalde bununla ilgilenmez. Bununla birlikte cronjob yardımıyla belirli zamanlarda ileti gönderip alabilir. Ama daha güzeli Service-Host'u bilgilendirmeye bağlantı sağlandığında ileti gönderilmesidir.
Router bir disket üzerinde çalıştığından bu yana ileti sunucusunu Router'dan denetlemek için karmaşık bir betik ya da program bulunmuyor.
Service-Host'u bir bağlantı hakkında bilgilendirmek için, bir request oluşturulabilir ve bu request bir işlemi başlatarak bu işlemle ileti gönderilip alınabilir.
fli4l için diskete sığabilecek olan (yaklaşık 100 Kb) wget programı yardımıcı olabilir. wget ile arama ile aynı anda Service-Host'a bağlantı sağlanabilir. Service-Host üzerine inetd ile bir port açılabilir ve bu Router'dan bir bağlantı bekleyebilir. Bağlantı sağlandığında ileti gönderip alabilecek bir betik başlatılabilir.
Betik Perl ile yazılı ve adresinden (mailstart.pl.gz) indirebilirsiniz.
Aramada .../opt/etc/ppp/ip-up dosyası çalışmaya başlar. Burası Service-Host'umuza bir bağlantı oluşturmak için doğru yerdir. Bu satır ile :
wget -t 1 --spider MAILSERVER:PORT/xyz &> /dev/null
bunu yaparız.
wget komutu
* Parametre -t 1 Bu seçenekle bir İleti sunucusu üzerindeki mailstart programına erişmeye bir çalışılır. * Parametre --spider Bu seçenekle sayfanın varlığı denetlenir ama indirme yapılmaz. * MAILSERVER:PORT/xyz Burada İletisunucusu ve Port programa erişeceği yere yönlenir. xyz indirilecek dosyadır. Bir tanımlama gerekmiyor wget benimsenmiş değer olarak index.html ismini kullanacaktır. * /dev/null Bu wget'ın çıktısının Nirvana'ya gönderileceği anlamına geliyor. Burada wget'in hangi dosyayı aldığı görmek önemsizdir.
İletisunucusu üzerinde Süpersunucu inetd üzerinden mailstart[1] programı başlatılır. Burada /etc/services ve /etc/inetd.conf dosyalarını düzenlemeliyiz.
/etc/services
Burada wget'in hangi Portu kullancağını belirtmeliyiz.
mailstart 4000/tcp # Mailstart
satırı ile bu sağlanır.
/etc/inetd.conf
Bu dosya içinde hangi programların başlatılacağını tanımlıyoruz. inetd çalışmayı görüntüler ve loglar /var/log/syslog dosyasına yazılır.
mailstart stream tcp nowait root /usr/sbin/tcpd /root/bin/mailstart
bu adım bu satırla tamamlanır. İlk isim /etc/services dosyasındaki ile aynı olmalı.
Programın değişkenleri sunucuya göre düzenlenir.
$protokoll
$protokoll değişkeniyle çağrılarının log'a yazılıp yazılmayacağını belirleriz. 1 değeri ile çağrı logları /var/log/mailstart.log dosyasına yazılır. Eğer değer 0 olursa log tutulmaz.
Default: 1 log yaz
$protokoll_ziel
Bu değişkenle hedef log'un adresi belirlenir.
Default: /var/log/mailstart.log
$mailholen
Burada ileti ile alınan programlar işlenir. Programı çalıştıran kullanıcı (örneğin root) /etc/inetd.conf dosyasına girilmelidir. Eğer biri programı kullanmak isterse su USER -c \"COMMAND PARAMETER\" komutu kulanılır. Eğer komut bir kaç parça uzunlupundaysa " ile ayrılmalıdır ve \ ile kullanılmalıdır.
Voreinstellung (eine Zeile):
su postmaster -c \"fetchmail -t 40 -a -L /var/log/fetchmail/fetchmail.log -f /home/postmaster/.fetchmailrc\"
$mailsenden
Burası programın ileti gmndereceği yer. Programı başlatan kullanıcı root örneğin, /etc/inetd.conf dosyası içinde yer almalıdır. Eğer biri programı kullanmak isterse su USER -c \"COMMAND PARAMETER\" komutu kulanılır. Eğer komut bir kaç parça uzunlupundaysa " ile ayrılmalıdır ve \ ile kullanılmalıdır.
Default: sendmail -q
Bu arada programın bir parçası küçük bir POD dokumanıdır ve kısa açıklamalar içerir. Bu açıklamaları perdoc mailstart ile görebilirsiniz.
Test'ten önce Süpersunucu yeniden başlatılmaldır.
/etc/init.d/inetd restart bunu yapacaktır.
Şimdi
Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. HTTP/1.1 220 OK Date: Sun, 20 Jul 2003 10:45:46 GMT Server: mailstart/perl (sbsbavaria) Last-Modified: Sun, 20 Jul 2003 10:45:46 GMT Content-Type: text/txt Content-Length: 11 1234567890 Connection closed by foreign host.
İşte hepsi bu. Umarım açıklamalrımla istenilen sonucu elde edersiniz. Aksi durumda ortada bir problem var demektir.
- Siz, çünkü çalışmadı.
- Ben, çünkü size yeterli açıklamaları yapamadım :-).