Referat
Transkrypt
Referat
SENDMAIL Jarosław Piersa AUS LabC inf3 WMiI UMK "Nikt, kto choć raz nie skonfigurował programu sendmail nie jest prawdziwym administratorem. Każdy kto brał się za to więcej niż raz, jest niespełna rozumu." RFC 822 mail (Request For Comments) Definiuje standard postaci e-maila. Dzięki temu można wysłać pocztę z maszyny unixowej na windows i da się tę wiadomość odczytać Mail składa się z nagłówka i ciała (treści??) (header and body) . W nagłówku zdefiniowane są różne parametry dotyczące maila. Po nagłówku znajduje się jedna linia pusta i po niej następuje treść (body) wiadomości. Trzy podkreślenia „___” oznaczać mają „małpę” tj. @, (a), at. Np. From Fri Nov 18 13:36:12 2005 XUIDL: 1130538968.11 XMozillaStatus: 0001 XMozillaStatus2: 00000000 ReturnPath: <piersaj___mat.uni.torun.pl> Received: from mx4.go2.pl (mx4 [192.168.2.44]) by b29 SERVER; Fri, 18 Nov 2005 13:34:12 +0100 Xmf: first3.pl v0.6 Received: by mx4.go2.pl (Postfix) id 7B28857D5BA; Fri, 18 Nov 2005 13:34:12 +0100 (CET) DeliveredTo: piersaj___o2.pl Received: from mx4.go2.pl (mx4 [127.0.0.1]) by mx4.go2.pl (Postfix) with ESMTP id 61AE257D63B for <piersaj___o2.pl>; Fri, 18 Nov 2005 13:34:12 +0100 (CET) Received: from Leon.mat.uni.torun.pl (leon.mat.uni.torun.pl [158.75.2.17]) by mx4.go2.pl (Postfix) with ESMTP for <piersaj___o2.pl>; Fri, 18 Nov 2005 13:34:12 +0100 (CET) Received: from juliusz.mat.uni.torun.pl (Juliusz [158.75.2.230]) by Leon.mat.uni.torun.pl (8.13.2/8.13.2) with SMTP id jAICXABL026320 for piersaj___o2.pl; Fri, 18 Nov 2005 13:33:59 +0100 Date: Fri, 18 Nov 2005 13:33:10 +0100 From: Jaroslaw Piersa <piersaj___mat.uni.torun.pl> MessageId: <200511181233.jAICXABL026320___Leon.mat.uni.torun.pl> XVirusScanned: by amavisdnew To: undisclosedrecipients:; ala ma kota jp RFC 821 Simple Mail Transfer Protocol Definiuje sposób adresowania oraz dostarczania maila do adresata, poprzez protokół SMTP. SMTP jest protokołem klient- serwer opartym o TCP. Po nawiązaniu połączenia wymieniane są komunikaty między klientem, a serwerem. Komunikaty mają postać czteroznakowych poleceń, odpowiedzi serwera są trój cyfrowymi kodami. Klient podaje serwerowi treść wiadomości oraz inne dane niezbędne do jej dostarczenia adres odbiorcy, nadawcy, temat itp. Dane te nazywa się kopertą (envelope). Obecnie w użyciu jest ESMTP, czyli Enhenced SMTP. 1 Przykład działania serwera SMTP: juliusz:2% telnet leon 25 Trying 158.75.2.17... Connected to Leon. Escape character is '^]'. 220 Leon.mat.uni.torun.pl ESMTP Sendmail 8.13.2/8.13.2; Fri, 18 Nov 2005 13:33:10 +0100 helo juliusz.mat.uni.torun.pl 250 Leon.mat.uni.torun.pl Hello Juliusz [158.75.2.230], pleased to meet you mail from: piersaj___mat.uni.torun.pl 250 2.1.0 piersaj___mat.uni.torun.pl... Sender ok rcpt to: piersaj___o2.pl 250 2.1.5 piersaj___o2.pl... Recipient ok data 354 Enter mail, end with "." on a line by itself ala ma kota jp . 250 2.0.0 jAICXABL026320 Message accepted for delivery quit 221 2.0.0 Leon.mat.uni.torun.pl closing connection Connection to Leon closed by foreign host. Oczywiście do redagowania i wysyłania poczty mało kto korzysta z tego sposobu. Wyręczamy się MUA (Mail User Agent) np. Thunderbird, Pine, Outlook , który po przygotowaniu wiadomości łączy się z serwerem MTA (Mail Transfer Agent, lub Mail Delivery Agent) i przekazuje mu wiadomość. To Właśnie MTA odpowiada za dostarczenie wiadomości do adresata w tym: ustalenie adresu, ustalenie drogi przekazu i przekazanie wiadomości. W tym miejscu dochodzimy do Sendmaila. Jest to po prostu jeden z MTA. Tak dokładniej jest najpopularniejszym i jednym z najstarszych, (co nie oznacza, że najprostszym i najbezpieczniejszym...) Pierwsza jego wersja została wydana w 1983r. Twórcą jest Eric Allman, który napisał również Delivermail – swoistego poprzednika Sendmaila (1979). Szacuje się, że obecnie ok. 40% poczty jest obsługiwana przez sendmaila. Sendmail przez wiele osób jest uznawany za wyjątkowo dziurawy, a jego konfiguracja – skomplikowana. ROLA SERWERA DNS Jasne jest, że wiadomość dochodzi do adresata na podstawie adresu – pisanego zazwyczaj z ręki w formie kanonicznej. Często też obsługą poczty na kilku hostach zajmuje się jeden serwer nie umieszczony na żadnym z nich. MTA pyta się serwera DNS o rekordy Mail eXchange lub prościej – MX. Serwery pocztowe muszą mieć rekord MX w publicznym DNSie aby mogła do niech dochodzić poczta. Więcej hosty, na które może być wysyłana poczta, a które nie mają postawionego serwera pocztowego również muszą mieć rekord MX przekierowujący tę pocztę na działający serwer pocztowy. Liczba po oznaczeniu rekordu oznacza priorytet wyboru. W pierwszej kolejności wybierany jest rekord o niższej wartości. Jeżeli próba nie powiodła się wybierany jest rekord o następnym priorytecie. Po polsku: pc257357.akademiki.uni.torun.pl. IN pc257257.akademiki.uni.torun.pl. IN inny_host.akademiki.uni.torun.pl. IN MX MX MX 1 5 1 158.75.257.257. 158.75.257.257. 158.75.257.257. Przed instalacją należy również skonfigurować firewall aby przepuszczał połączenia na port 25 (SMTP) 2 INSTALACJA SENDMAILA Storna www: http://www.sendmail.org/ z której można pobrać źródła programu. Referat jest napisany dla wersji Sendmail 8.13.5 Wpierw sugeruję sprawdzić czy już jakiegoś sendmaila nie mamy zainstalowanego i jeżeli tak, usunąć go: #>rpm –q sendmail #>rpm –e sendmail rozpakować paczkę można: #>gzip –d sendmail.8.13.5.tar.gz #>tar xf sendmail.8.13.5.tar Szczęśliwie twórcy byli na tyle mili, że napisali własny skrypt do instalacji. Choć de facto zbyt złożony to on nie jest, polecam zerknąć... #>./Build #>./Build install Uwaga: u mnie w domu na program miał obiekcje do nieistniejących katalogów: mkdir /usr/man /usr/man/man1 /usr/man/man8 Pliki jakie powinny zostać zainstalowane i ich znaczenie: • /usr/sbin/sendmail binaria sendmaila • /etc/mail/sendmail.cf plik konfiguracyjny Sendmaila, bez niego program się w ogóle nie uruchomi • /usr/bin/newaliases link do /usr/sbin/sendmail sendmail wywołany jako newaliases odświeża listę aliasów • /usr/bin/hoststat podobnie link do /usr/sbin/sendmail • /usr/bin/purgestat podobnie link do /usr/sbin/sendmail • /usr/bin/mailq podobnie link do /usr/sbin/sendmail, program wywołany jako mailq wydrukuje kolejkę wiadomości oczekujących na wysłanie • /var/spool/mqueue folder służący do przechowywania oczekujących na wysłanie maili, sugerowane prawa drwx------ sugerowany właściciel: root. • /etc/mail/aliases lista aliasów, czyli informacje, jaki użytkownik powinien /etc/mail/aliases.db odebrać mail adresowany do “...”, aliases.db można odświeżyć poleceniem /usr/bib/newaliases Przykładowe wpisy w /etc/aliases: mailer-daemon: postmaster postmaster: root • /etc/init.d/sendmail znajomy folder.... przykładowa treść skryptu: if [ -f /usr/sbin/sendmail -a -f /etc/sendmail.cf ]; then (cd /var/spool/mqueue; rm -f [lnx]f*) /usr/sbin/sendmail -bd -q30m & echo -n ' sendmail' >/dev/console fi • /etc/mail/helpfile Plik pomocy używany po wydaniu komendy HELP podczas sesji SMTP. Jego lokalizację i nazwę można określać w konfiguracji. W starszych wersjach: sendmail.hf • /etc/mail/statistics Statystyki programu, nazwę i lokalizację można zmienić w konfiguracji. Uruchomienie Sendmaila niektóre parametry: #>sendmail bd uruchomienie jako demon w tle #>sendmial bD uruchomienie jako demon na pierwszym planie #>sendmial bd q30m 3 wysyłanie wiadomości zakolejkowanych co 30 min, inne jednostki: s, m, h, d, w #>sendmial bp patrz /usr/bin/mailq #>sendmial C file użyj inngo niż domyślny pliku konfiguracyjnego KONFIGURACJA SENDMAILA Plik konfiguracyjny Sendmaila to /etc/mail/sendmail.cf Oto jego mały fragment: # location of help file O HelpFile=/etc/mail/helpfile R$* $: $1 <@> mark addresses R$* < $* > $* <@> $: $1 < $2 > $3 unmark <addr> R@ $* <@> $: @ $1 unmark @host:... Na pierwszy rzut oka wygląda naplik binarny otworzony edytorem teksu, przepleciony z tekstem ascii. W rzeczywistości taka jest jego składnia i można go edytować z ręki. Wychodząc naprzeciw oczekiwaniom użytkowników Autorzy jednak dodali skrypt upraszczający tworzenie pliku konfiguracyjnego. W tym celu tworzymy plik sendmail.mc (mc – Master Config). Następnie po napisaniu konfiguracji w tym pliku przetwarzamy go za pomocą skryptu m4, który za pomocą odpowiednich makr stworzy plik .cf bazując na ustawieniach podanych w pliku mc. #>m4 sendmail.mc > sendmail.cf Struktura pliku mc: VERSIONID OSTYPE DOMAIN FEATURE local macro definitions MAILER LOCAL_CONFIG LOCAL_RULE_* LOCAL_RULESETS Komentarze: dnl komentarz do końca wiersza (Delete to NewLine) uwaga na spacje!! Przykładowy plik i opis: include(`../m4/cf.m4') VERSIONID(`sendmail.mc 18 nov 2005') OSTYPE(linux) DOMAIN(`generic') define(HELPFILE , `/etc/mail/helpfile') FEATURE(nouucp, `nospecial') MASQUERADE_AS(ourco.com) MAILER(local) MAILER(smtp) A teraz co to oznacza... include(`../m4/cf.m4') Wczytuje stosowny plik z makrami, który znacznie upraszcza tworzenie pliku cf VERSIONID(`sendmail.mc 18 nov 2005') Informacje o wersji pliku – autor, data, gdzie i dla jakiego sprzetu pisany itp. Znaczenie ma raczej dla administratora niż dla sendmaila 4 OSTYPE(linux) Najważniejsza linijka!! Definicja systemu operacyjnego, bez niej dalsza obróbka pliku mc skończy się błędami. DOMAIN(`generic’) nazwa pliku opisującego konfiguracje i definicje dla domeny, `generic’ jest domyślna i “zazwyczaj” pasuje define(HELPFILE , `/etc/mail/helpfile’) Przypisanie zmiennej wartości, Uwagi: brak przypisania powoduje ustawienie wartości domyślnej, apostrofy są istotne!!! Zmiennych jest DUŻO i po listę wszystkich odsyłam do pliku README. W tym wypadku jest to ścieżka do pliku pomocy do komendy HELP podczas połączenia. FEATURE(nouucp, `nospecial’) Dodatkowe funkcje programu i ewentualne parametry. Featurów jest DUŻO i odsyłam do stosownego pliku (dir)/sendmail-8.13.5/cf/README działanie niektórych funkcji zostanie podana później. MAILER(local) Definicje mailera (czyli interfejsu), który ma być obsługiwany. local - lokalny smtp - wiadomo uucp – Unix to UnixCopy Program mailer inne – odsyłam do README MASKOWANIE ADRESU MASQUERADE_AS(`host.domain') ukrywa adres własnego hosta, z którego mail został wysłany na host.domain MASQUERADE_DOMAIN(`otherhost.domain') ukrywa adres, obcego hosta z którego został wysłany list, listę hostów można oddzielać spacjami MASQUERADE_DOMAIN_FILE(`filename') maskowanie adresów zadanych w pliku, MASQUERADE_EXCEPTION(`host.domain') Wyjątek od maskowania adresu całej domeny MASQUERADE_EXCEPTION_FILE(`filename') plik z domenami nie obejmowanymi maskowaniem feature(masquerade_entire_domain) w połączeniu z masquerade_domain() i masquerade_as() ukrywa adres całej domeny np. host.otherhost.domain nie byłby maskowany feature(masquerade_envelope) w połączeniu z masquerade_as() ukrywa adresy całej koperty, a nie tylko nagłówka feature(local_no_masquerade) zapobiega maskowaniu poczty wysyłanej lokalnie EXPOSED_USER(`usernames') niektórzy użytkownicy zawsze powinni być odkryci: np root, użytkownicy tak zadani nie będą mieli maskowanych adresów FILTROWANIE WIADOMOŚCI feature(`relay_based_on_MX') Akceptuje wiadomości adresowane na serwery, które mają rekord mx w serwerze dns RELAY_DOMAIN(domain) RELAY_DOMAIN_FILE(file) Akceptuje wiadomości pochodzące z domeny zadanej jako parametr lub wylistowanej w pliku FEATURE(`relay_entire_domain') Akceptuje całą domenę wraz z poddomenami. FEATURE(`accept_unresolvable_domains') Akceptuje wiadomości z domen których nie można zweryfikować czy istnieją FEATURE(`accept_unqualified_senders') Akceptuje wiadomości od nie dających się zweryfikować użytkowników. FEATURE(`blacklist_recipients') Umożliwia blokowanie poczty dla lokalnych użytkowników, hostów, domen... feature(`access_db', `hash -T<TMPF> /etc/mail/access_map') filtrowanie oparte na bazie dostępu, do pliku access dopisujemy adresy lub/i domeny które akceptujemy lub odrzucamy Przykłady konfiguracji pliku dostępu: From:spammer___aol.com From:cyberspammer.com Connect:cyberspammer.com Connect:TLD Connect:192.168.212 Connect:IPv6:2002:c0a8:02c7 REJECT REJECT REJECT REJECT REJECT RELAY 5 Connect:IPv6:2002:c0a8:51d2::23f4 REJECT tworzenie bazy z pliku: makemap hash /etc/mail/access < /etc/mail/access Tagi: From To Connect- pole nadawcy w kopercie pole odbiorcy w kopercie połączenie z dotyczy zarówno nadawcy jak i adresu Akcje: OK - akceptacja RELAY - akceptacja, jest kilka różnic miedzy OK, a RELAY REJECT - odesłanie do nadawcy z domyślną wiadomością błędu DISCARD - brak akceptacji skip - pominięcie sprawdzenia, podęcie domyślnej decyzji ###“tekst” - odesłanie wiadomości z kodem błędu ### RFC821i raportem błędu “tekst”, tekst nie musie być cytowany, ale jest to wskazane ERROR:###”tekst” - j/w tyle, że bardziej czytelne ERROR:D.S.N:###”tekst” - j/w tyle, że kod błędu dotyczy RFC 1983 QUARANTINE:”tekst” - wiadomość przeniesiona do kwarantanny + wiadomość zwrotna inny przykład: From:cyberspammer.com ERROR:"550 We don't accept mail from spammers" From:okay.cyberspammer.com OK Connect:sendmail.org RELAY To:sendmail.org RELAY Connect:128.32 RELAY Connect:128.32.2 SKIP Connect:IPv6:1:2:3:4:5:6:7 RELAY Connect:suspicious.example.com QUARANTINE:Mail from suspicious host To:badlocaluser@ ERROR:550 Mailbox disabled for badlocaluser Nie żeby to było już wszystko co o sendmailu da się powiedzieć (czy choćby 25%), ale na początek mam nadzieję wystarczy. I jeszcze jedno: tekst był pisany o różnych porach i po różnej ilości wypitej kofeiny... Jeżeli zdarzy się, że referat twierdzi co innego niż dokumentacja... należy wierzyć dokumentacji. linkografia: /root/sendmail-8.13.5/cf/README http://www.networkcomputing.com/unixworld/tutorial/008/008.txt.html#over http://www.networkcomputing.com/unixworld/tutorial/01/01.txt.html http://zlobek.tcz.wroclaw.pl/dzial.php3?dzial=7 http://www.sendmail.org/ http://en.wikipedia.org/wiki/Sendmail http://www.nmr.mgh.harvard.edu/Sendmail8.9/ConfigFiles.shtml http://rfc.net/rfc821.html 6