{"id":1678,"date":"2017-07-31T16:23:05","date_gmt":"2017-07-31T14:23:05","guid":{"rendered":"http:\/\/miroslaw.borodziuk.eu\/?p=1678"},"modified":"2017-08-01T16:18:00","modified_gmt":"2017-08-01T14:18:00","slug":"serwer-poczty-postfix","status":"publish","type":"post","link":"http:\/\/miro.borodziuk.eu\/index.php\/2017\/07\/31\/serwer-poczty-postfix\/","title":{"rendered":"Serwer poczty Postfix"},"content":{"rendered":"<p>Postfix jest kompatybilny z Sendmailem jednak jest \u0142atwiejszy w konfiguracji, administracji, jest bardziej modularny, bardziej bezpieczny i oferuje wi\u0119ksz\u0105 wydajno\u015b\u0107. Zawiera tak\u0105 funkcjonalno\u015b\u0107 jak dopasowywanie wzorc\u00f3w do filtrowania niechcianej poczty, ponadto wspiera wiele wirtualnych domen w ramach jednego systemu.<\/p>\n<p><!--more--><\/p>\n<p>Demonem Postfixa jest master zlokalizowany w katalogu <i>\/usr\/libexec\/postfix. <\/i>Aby wykona\u0107 swoje zdania demon uruchamia na \u017c\u0105danie procesy takich agent\u00f3w jak\u00a0 <i>nqmgr<\/i>, <i>pickup<\/i> oraz <i>smtpd. <\/i>Ka\u017cdy agent ma swoja ma\u0142\u0105 dobrze zdefiniowan\u0105 funkcj\u0119 i pracuje z minimalnymi uprawnieniami. Manad\u017cer kolejki nqmgr jest odpowiedzialny za wysy\u0142k\u0119 maili i lokalne dostarczanie. Agent pickup przekazuje komunikaty z katalogu \/var\/spool\/postfix do \/var\/spool\/mail we wsp\u00f3\u0142pracy z agentem smtpd. Procesy agent\u00f3w zostaj\u0105 zako\u0144czone po wykonaniu przez nich swojego zadania lub bo pozostawaniu nieaktywnym przez okre\u015blony czas. Proces master i inni agenci wsp\u00f3\u0142pracuj\u0105 w zarz\u0105dzaniu ca\u0142ym systemem poczty.<\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #3366ff;\">Komendy Postfixa.<\/span><\/p>\n<p><code><span style=\"color: #008000;\"># alternatives<\/span><\/code> &#8211; wy\u015bwietla i ustawia domy\u015blnego MTA.<\/p>\n<p><span style=\"color: #008000;\"><code># mail\/mailx<\/code><\/span> &#8211; wysy\u0142a i odbiera maile.<\/p>\n<p><span style=\"color: #008000;\"><code>#  postalias\/newaliases<\/code> <\/span>&#8211; przetwarza baz\u0119 alias\u00f3w sk\u0142adowan\u0105 w pliku \/etc\/aliases.<\/p>\n<p><span style=\"color: #008000;\"><code># postconf<\/code> <\/span>&#8211; wy\u015bwietla i modyfiikuje konfiguracj\u0119 Postfixa sk\u0142adowan\u0105 w pliku main.cf.<\/p>\n<p><span style=\"color: #008000;\"><code># postfix<\/code><\/span> &#8211; kontroluje wszelkie operacje Postfixa, takie jak uruchamianie, zatrzymywanie, sprawdzanie stanu i prze\u0142adowywanie konfiguracji.<\/p>\n<p><span style=\"color: #008000;\"><code># postmap<\/code><\/span> &#8211; przetwarza i konwertuje niekt\u00f3re pliki konfiguracyjne do bazy kompatybilnej z Postfixem.<\/p>\n<p><span style=\"color: #008000;\"><code> # postqueue\/mailq<\/code><\/span> &#8211; wy\u015bwwietla i kontroluje kolejk\u0119 Postfixa.<\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #3366ff;\">Pliki konfiguracyjne Postfixa.<\/span><\/p>\n<p>Pliki te (z wyj\u0105tiem pliku<code>\/etc\/aliases<\/code>) sk\u0142adowane s\u0105 w katalogu<code> \/etc\/postfix<\/code>.<\/p>\n<ul>\n<li><span style=\"color: #008000;\"><code>main.cf<\/code><\/span> &#8211; podstawowy plik konfiguracyjny, niekt\u00f3re jego dyrektywy:<\/li>\n<\/ul>\n<p style=\"text-align: left;\"><code> queue_directory\u00a0\u00a0\u00a0\u00a0\u00a0 = \/var\/spool\/postfix<\/code><br \/>\n<code>command_directory\u00a0\u00a0\u00a0 = \/usr\/sbin<\/code><br \/>\n<code>daemon_directory\u00a0\u00a0\u00a0\u00a0 = \/usr\/libexec\/postfix<\/code><br \/>\n<code>mail_owner\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 = postfix<\/code><br \/>\n<code>myhostname\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 = host2.example.com<\/code><br \/>\n<code>mydomain\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 = example.com<\/code><br \/>\n<code>myorigin\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 = $myhostname<\/code><br \/>\n<code>inet_interfaces\u00a0\u00a0\u00a0\u00a0\u00a0 = localhost<\/code><br \/>\n<code>mydestination\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 = $myhostname, localhost.$mydomain, localhost<\/code><br \/>\n<code>mynetworks\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 = 192.168.2.0\/24, 127.0.0.0\/8<\/code><br \/>\n<code>relayhost\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 = $mydomain<\/code><br \/>\n<code>alias_maps\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 = hash:\/etc\/aliases<\/code><br \/>\n<code>alias_database\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 = hash:\/etc\/aliases<\/code><br \/>\n<code>mail_spool_directory = \/var\/spool\/mail<\/code><\/p>\n<table style=\"width: 755.767px;\">\n<tbody>\n<tr>\n<td style=\"width: 194px;\"><span style=\"color: #808080;\">Dyrektywa<\/span><\/td>\n<td style=\"width: 543.767px;\"><span style=\"color: #808080;\">Opis<\/span><\/td>\n<\/tr>\n<tr>\n<td style=\"width: 194px;\"><span style=\"color: #008000;\"><code>queue_directory\u00a0\u00a0<\/code><\/span><\/td>\n<td style=\"width: 543.767px;\">Po\u0142o\u017cenie kolejki Postfixa.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 194px;\"><span style=\"color: #008000;\"><code>command_directory\u00a0<\/code><\/span><\/td>\n<td style=\"width: 543.767px;\">Po\u0142o\u017cenie komend Postfixa.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 194px;\"><span style=\"color: #008000;\"><code>daemon_directory\u00a0<\/code><\/span><\/td>\n<td style=\"width: 543.767px;\">Po\u0142o\u017cenie demon\u00f3w Postfixa.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 194px;\"><span style=\"color: #008000;\"><code>mail_owner\u00a0\u00a0<\/code><\/span><\/td>\n<td style=\"width: 543.767px;\">\u00a0W\u0142a\u015bciciel demon\u00f3w Postfixa i kolejki<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 194px;\"><span style=\"color: #008000;\"><code>myhostname\u00a0\u00a0\u00a0\u00a0<\/code><\/span><\/td>\n<td style=\"width: 543.767px;\">\u00a0Pe\u0142na nazwa domenowa serwera.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 194px;\"><span style=\"color: #008000;\"><code>mydomain\u00a0<\/code><\/span><\/td>\n<td style=\"width: 543.767px;\">\u00a0Domena serwera.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 194px;\"><span style=\"color: #008000;\"><code>myorigin<\/code><\/span><\/td>\n<td style=\"width: 543.767px;\">Host lub domena, kt\u00f3ra ma by\u0107 wy\u015bwietlana jako pochodzenie na mailach wychodz\u0105cych z serwera.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 194px;\"><span style=\"color: #008000;\"><code>inet_interfaces<\/code><\/span><\/td>\n<td style=\"width: 543.767px;\">\u00a0Interfejsy sieciowe jakie maj\u0105 by\u0107 u\u017cywane do przychodz\u0105cej poczty.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 194px;\"><span style=\"color: #008000;\"><code>mydestination<\/code><\/span><\/td>\n<td style=\"width: 543.767px;\">\u00a0Domeny, z kt\u00f3rych serwer akceptuje poczt\u0119.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 194px;\"><span style=\"color: #008000;\"><code>mynetworks<\/code><\/span><\/td>\n<td style=\"width: 543.767px;\">\u00a0Adres IP zaufanych sieci.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 194px;\"><span style=\"color: #008000;\"><code>relayhost<\/code><\/span><\/td>\n<td style=\"width: 543.767px;\">Host lub inny serwer poczty, przez kt\u00f3ry b\u0119dzie przesy\u0142ana poczta. Ten serwer b\u0119dzie pe\u0142ni\u0142 rol\u0119 bramy wychodz\u0105cej.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 194px;\"><span style=\"color: #008000;\"><code>alias_maps\u00a0<\/code><\/span><\/td>\n<td style=\"width: 543.767px;\">\u00a0Baza alias\u00f3w u\u017cywana przez agenta lokalnego dostarczania.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 194px;\"><span style=\"color: #008000;\"><code>alias_database<\/code><\/span><\/td>\n<td style=\"width: 543.767px;\">\u00a0Baza alias\u00f3w generowana komend\u0105 <em>newaliases<\/em>.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 194px;\"><span style=\"color: #008000;\"><code>mail_spool_directory <\/code><\/span><\/td>\n<td style=\"width: 543.767px;\">\u00a0Lokalizacja, w kt\u00f3rej sk\u0142adowane b\u0119d\u0105 skrzynki u\u017cytkownik\u00f3w.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Wy\u015bwietlanie domy\u015blnych (-n) ustawie\u0144, kt\u00f3re s\u0105 zdefiniowane w pliku <code>main.cf<\/code>:<\/p>\n<pre class=\"lang:sh decode:true\">alias_database = hash:\/etc\/aliases\r\nalias_maps = hash:\/etc\/aliases\r\ncommand_directory = \/usr\/sbin\r\nconfig_directory = \/etc\/postfix\r\ndaemon_directory = \/usr\/libexec\/postfix\r\ndata_directory = \/var\/lib\/postfix\r\ndebug_peer_level = 2\r\ndebugger_command = PATH=\/bin:\/usr\/bin:\/usr\/local\/bin:\/usr\/X11R\r\nsleep 5\r\nhtml_directory = no\r\ninet_interfaces = localhost\r\ninet_protocols = all\r\nmail_owner = postfix\r\nmailq_path = \/usr\/bin\/mailq.postfix\r\nmanpage_directory = \/usr\/share\/man\r\nmydestination = $myhostname, localhost.$mydomain, localhost\r\nnewaliases_path = \/usr\/bin\/newaliases.postfix\r\nqueue_directory = \/var\/spool\/postfix\r\nreadme_directory = \/usr\/share\/doc\/postfix-2.10.1\/README_FILES\r\nsample_directory = \/usr\/share\/doc\/postfix-2.10.1\/samples\r\nsendmail_path = \/usr\/sbin\/sendmail.postfix\r\nsetgid_group = postdrop\r\nunknown_local_recipient_reject_code = 550<\/pre>\n<p>Wy\u015bwietlanie domy\u015blnych (-d) ustawie\u0144, kt\u00f3re nie s\u0105 zdefiniowane w pliku <code>main.cf<\/code>:<\/p>\n<pre class=\"lang:sh decode:true\"># postconf \u2013d\r\nbounce_notice_recipient = postmaster\r\naccess_map_defer_code = 450\r\naccess_map_reject_code = 554\r\naddress_verify_cache_cleanup_interval = 12h\r\naddress_verify_default_transport = $default_transport\r\naddress_verify_local_transport = $local_transport\r\naddress_verify_map = btree:$data_directory\/verify_cache\r\naddress_verify_negative_cache = yes\r\n......<\/pre>\n<p>Modyfikacja ustawie\u0144 z pliku <code>main.cf<\/code> mo\u017ce si\u0119 tak\u017ce odbywa\u0107 bezpo\u015brednio z linii komend np. poni\u017csza komenda modyfikuje dyrektyw\u0119<em> inet_interfaces<\/em>:<\/p>\n<pre class=\"lang:sh decode:true \"># postconf \u2013e inet_interfaces=all<\/pre>\n<p>Weryfikacja:<\/p>\n<pre class=\"lang:sh decode:true \"># grep ^inet_interfaces \/etc\/postfix\/main.cf\r\n\r\nInet_interfaces = all<\/pre>\n<p>&nbsp;<\/p>\n<ul>\n<li><span style=\"color: #008000;\"><code>master.cf<\/code><\/span> &#8211; definiuje ustawienia konfiguracyjne dla demona master i spos\u00f3b w jaki powinien wsp\u00f3\u0142pracowa\u0107 z innymi agentami aby dostarcza\u0107 poczt\u0119. Fragment pliku:<\/li>\n<\/ul>\n<pre class=\"lang:sh decode:true \">#==========================================================================\r\n# service type private unpriv chroot wakeup maxproc command + args\r\n# (yes) (yes) (yes) (never) (100)\r\n# ==========================================================================\r\nsmtp inet n - n - - smtpd\r\n#smtp inet n - n - 1 postscreen\r\n#smtpd pass - - n - - smtpd\r\n#dnsblog unix - - n - 0 dnsblog\r\n#tlsproxy unix - - n - 0 tlsproxy\r\n#submission inet n - n - - smtpd<\/pre>\n<p>Dla ka\u017cdej us\u0142ugi wylistowanej w pliku <code>master.cf<\/code> jest siedem kolumn, kt\u00f3re definiuj\u0105 jak us\u0142uga ma by\u0107 u\u017cywana.<\/p>\n<table style=\"width: 756px;\">\n<tbody>\n<tr>\n<td style=\"width: 123.933px;\"><em><span style=\"color: #808080;\">Kolumna<\/span><\/em><\/td>\n<td style=\"width: 615.067px;\"><em><span style=\"color: #808080;\">Opis<\/span><\/em><\/td>\n<\/tr>\n<tr>\n<td style=\"width: 123.933px;\"><code><span style=\"color: #008000;\">service<\/span><\/code><\/td>\n<td style=\"width: 615.067px;\">Nazwa us\u0142ugi.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 123.933px;\"><code><span style=\"color: #008000;\">type<\/span><\/code><\/td>\n<td style=\"width: 615.067px;\">Mechanizm transportu, kt\u00f3ry ma by\u0107 u\u017cywany.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 123.933px;\"><code><span style=\"color: #008000;\">private<\/span><\/code><\/td>\n<td style=\"width: 615.067px;\">Czy us\u0142uga jest tylko do u\u017cytku przez Postfixa.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 123.933px;\"><code><span style=\"color: #008000;\">unpriv<\/span><\/code><\/td>\n<td style=\"width: 615.067px;\">Czy us\u0142uga mo\u017ce by\u0107 uruchamiana przez zwyk\u0142ych u\u017cytkownik\u00f3w.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 123.933px;\"><code><span style=\"color: #008000;\">chroot<\/span><\/code><\/td>\n<td style=\"width: 615.067px;\">Czy us\u0142uga ma zmienia\u0107 g\u0142\u00f3wny katalog (chroot) dla kolejki mail.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 123.933px;\"><code><span style=\"color: #008000;\">wakeup<\/span><\/code><\/td>\n<td style=\"width: 615.067px;\">Interwa\u0142 wake up dla us\u0142ugi.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 123.933px;\"><code><span style=\"color: #008000;\">maxproc<\/span><\/code><\/td>\n<td style=\"width: 615.067px;\">Maksymalna ilo\u015b\u0107 proces\u00f3w na jaki us\u0142uga mo\u017ce si\u0119 sforkowa\u0107 (rodzieli\u0107).<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 123.933px;\"><code><span style=\"color: #008000;\">command + args<\/span><\/code><\/td>\n<td style=\"width: 615.067px;\">Komenda powi\u0105zana z us\u0142ug\u0105 plus dowolny argument.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<ul>\n<li><code><span style=\"color: #008000;\">access<\/span><\/code> &#8211; mo\u017ce by\u0107 u\u017cywany do kontroli dost\u0119pu opartej o adres e-mail, adres hosta, domen\u0119 lub adres sieci.<\/li>\n<\/ul>\n<p>Aby zezwoli\u0107 na dost\u0119p dla okre\u015blonego adresu IP:<\/p>\n<pre class=\"lang:sh decode:true \">192.168.122.20 OK<\/pre>\n<p>Aby zezwoli\u0107 na dost\u0119p dla okre\u015blonej domeny:<\/p>\n<pre class=\"lang:sh decode:true \">example.com OK<\/pre>\n<p>Aby odm\u00f3wi\u0107 dost\u0119pu dla sieci 192.168.3.0\/24:<\/p>\n<pre class=\"lang:sh decode:true \">192.168.3 REJECT<\/pre>\n<p>Po wprowadzeniu zmian w pliku <code>access<\/code> nale\u017cy przekonwertowa\u0107 jego zawarto\u015b\u0107 do bazy <code>access.db<\/code> komend\u0105 <em>postmap<\/em>:<\/p>\n<pre class=\"lang:sh decode:true \"># postmap \/etc\/postfix\/access\r\n# ll \/etc\/postfix\/access*\r\n-rw-r--r--. 1 root root 20876 Jan 26 2014 \/etc\/postfix\/access\r\n-rw-r--r--. 1 root root 12288 Feb 12 07:47 \/etc\/postfix\/access.db<\/pre>\n<p>&nbsp;<\/p>\n<ul>\n<li><code><span style=\"color: #008000;\">canonical<\/span><\/code> &#8211; mapowanie maili przychodz\u0105cych do lokalnych u\u017cytkownik\u00f3w na zdalne skrzynki e-mail.<\/li>\n<\/ul>\n<p>Aby przekazywa\u0107 maile dla u\u017cytkownika user1 na skrzynk\u0119 user1@yahoo.com:<\/p>\n<pre class=\"lang:sh decode:true \">user1 user1@yahoo.com<\/pre>\n<p>Aby przekazywa\u0107 wszystkie maile przeznaczone dla domeny example.org na inn\u0105 domen\u0119 example.com:<\/p>\n<pre class=\"lang:sh decode:true \">@example.org @example.com<\/pre>\n<p>Po wprowadzeniu zmian w pliku <code>canonical<\/code> nale\u017cy przekonwertowa\u0107 jego zawarto\u015b\u0107 do bazy <code>canonical.db<\/code> komend\u0105 <em>postmap<\/em>:<\/p>\n<pre class=\"lang:sh decode:true \"># postmap \/etc\/postfix\/canonical\r\n# ll \/etc\/postfix\/canonical*\r\n-rw-r--r--. 1 root root 11681 2014-06-10 \/etc\/postfix\/canonical\r\n-rw-r--r--. 1 root root 12288 07-31 20:56 \/etc\/postfix\/canonical.db<\/pre>\n<p>&nbsp;<\/p>\n<ul>\n<li><span style=\"color: #008000;\"><code>generic<\/code><\/span> &#8211; mapowanie maili wychodz\u0105cych do lokalnych u\u017cytkownik\u00f3w na zdalne skrzynki e-mail. Sk\u0142adnia taka sama jak pliku <code>canonical<\/code>. Po wprowadzeniu zmian w tym pliku tak\u017ce nale\u017cy uruchomi\u0107 komend\u0119 <em>postmap<\/em>.<\/li>\n<\/ul>\n<pre class=\"lang:sh decode:true \"># postmap \/etc\/postfix\/generic\r\n# ll \/etc\/postfix\/generic*\r\n-rw-r--r--. 1 root root 9904 2014-06-10 \/etc\/postfix\/generic\r\n-rw-r--r--. 1 root root 12288 07-31 21:15 \/etc\/postfix\/generic.db\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<ul>\n<li><code><span style=\"color: #008000;\">relocated<\/span> <\/code>&#8211; informacje o u\u017cytkownikach, kt\u00f3rzy zostali przeniesieni. Sk\u0142adnia pliku taka sama jak plik\u00f3w <code>canonical<\/code> i <code>generic<\/code>.<\/li>\n<\/ul>\n<p>Zak\u0142adaj\u0105c, \u017ce u\u017cytkownik <em>user1<\/em> zosta\u0142 przeniesiony z domeny <code>example.com<\/code> do <code>example.net<\/code> mo\u017cna przekazywa\u0107 wszystkie maile otrzymane na starym adresie na nowy adres:<\/p>\n<pre class=\"lang:sh decode:true \">user1@example.com user1@example.net<\/pre>\n<p>Po wprowadzeniu zmian w tym pliku tak\u017ce nale\u017cy uruchomi\u0107 komend\u0119 <em>postmap<\/em>.<\/p>\n<pre class=\"lang:sh decode:true\"># postmap \/etc\/postfix\/relocated\r\n# ll \/etc\/postfix\/relocated*\r\n-rw-r--r--. 1 root root 6816 2014-06-10 \/etc\/postfix\/relocated\r\n-rw-r--r--. 1 root root 12288 07-31 21:26 \/etc\/postfix\/relocated.d<\/pre>\n<p>&nbsp;<\/p>\n<ul>\n<li><code>transport<\/code> &#8211; mapowanie pomi\u0119dzy adresami e-mail i serwerami przez kt\u00f3re te maile maj\u0105 by\u0107 wysy\u0142ane (nast\u0119pnymi hopami) w formacie <em>transport:nexthop<\/em>.\u00a0 Np.:<\/li>\n<\/ul>\n<pre class=\"lang:sh decode:true \">user1@example.com  smtp:host1.example.com<\/pre>\n<p>Po wprowadzeniu zmian w tym pliku tak\u017ce nale\u017cy uruchomi\u0107 komend\u0119 <em>postmap<\/em>.<\/p>\n<pre class=\"lang:sh decode:true \"># postmap \/etc\/postfix\/transport\r\n[root@server1 postfix]# ll \/etc\/postfix\/transport*\r\n-rw-r--r--. 1 root root 12549 2014-06-10 \/etc\/postfix\/transport\r\n-rw-r--r--. 1 root root 12288 07-31 21:32 \/etc\/postfix\/transport.db<\/pre>\n<p>&nbsp;<\/p>\n<ul>\n<li><code>virtual<\/code> &#8211; u\u017cywany do przekierowania maili przeznaczonych dla pewnego u\u017cytkownika na konto innego u\u017cytkownika lub wielu u\u017cytkownik\u00f3w. Mo\u017ce by\u0107 te\u017c u\u017cywany do implementacji mechanizmu alias\u00f3w domen.<\/li>\n<\/ul>\n<p>Przekierowanie maila dla u\u017cytkownika user1 do u\u017cytkownik\u00f3w root i user3:<\/p>\n<pre class=\"lang:sh decode:true \">user1   root, user3<\/pre>\n<p>Przekierowanie maila dla u\u017cytkownika <em>user1<\/em> w domenie<em> example.com<\/em> do u\u017cytkownika root:<\/p>\n<pre class=\"lang:sh decode:true \">user1@example.com    root<\/pre>\n<p>Po wprowadzeniu zmian w tym pliku tak\u017ce nale\u017cy uruchomi\u0107 komend\u0119 <em>postmap<\/em>.<\/p>\n<pre class=\"lang:sh decode:true \"># postmap \/etc\/postfix\/virtual\r\n# ll \/etc\/postfix\/virtual*\r\n-rw-r--r--. 1 root root 12494 2014-06-10 \/etc\/postfix\/virtual\r\n-rw-r--r--. 1 root root 12288 07-31 21:58 \/etc\/postfix\/virtual.db<\/pre>\n<p>&nbsp;<\/p>\n<ul>\n<li><span style=\"color: #008000;\"><code>\/etc\/aliases<\/code><\/span> &#8211; przekazywanie maile przeznaczonych do u\u017cytkownik\u00f3w lokalnych do innych u\u017cytkownik\u00f3w lokalnych lub adres\u00f3w zdalnych.<\/li>\n<\/ul>\n<pre class=\"lang:sh decode:true\"># cat \/etc\/aliases\r\n\r\n...\r\n# Basic system aliases -- these MUST be present.\r\nmailer-daemon: postmaster\r\npostmaster: root\r\n\r\n# General redirections for pseudo accounts.\r\nbin: root\r\ndaemon: root\r\nadm: root\r\nlp: root\r\nsync: root\r\nshutdown: root\r\n\r\n# Person who should get root's mail\r\n#root: marc\r\n...<\/pre>\n<p>Aby przekazywa\u0107 maile przeznaczone do wykasowanego konta <em>user50<\/em> do lokalnego u\u017cytkownika <em>user1<\/em> i zdalnego u\u017cytkownika <em>user2@host1.example.com<\/em> :<\/p>\n<pre class=\"lang:sh decode:true \">user50:         user1, user2@host1.example.com<\/pre>\n<p>Plik <code>aliases<\/code> pozwala\u00a0 tak\u017ce na utworzenie grupy mailingowej. Tak mo\u017cemy utworzy\u0107 grup\u0119 mailingow\u0105 <em>lnxadmteam<\/em> z cz\u0142onkami: <em>user1, user2, user3<\/em>:<\/p>\n<pre class=\"lang:sh decode:true \">lnxadmteam:       user1, user2, user3<\/pre>\n<p>Po ka\u017cdej modyfikacji tego pliku nale\u017cy komend\u0105 <em>newaliases<\/em> przekonwertowa\u0107 plik do bazy <code>aliases.db<\/code>:<\/p>\n<pre class=\"lang:sh decode:true \"># newaliases\r\n# ll \/etc\/aliases*\r\n-rw-r--r--. 1 root root 1518 2013-06-07 \/etc\/aliases\r\n-rw-r--r--. 1 root root 12288 07-31 22:12 \/etc\/aliases.db<\/pre>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #3366ff;\">Logi Postfixa.<\/span><\/p>\n<p>Wszystkie komunikaty i ostrze\u017cenia logowane s\u0105 do pliku <i>\/var\/log\/maillog.<\/i><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #3366ff;\">Wymagania SELinux zwi\u0105zane z Postfixem.<\/span><\/p>\n<p>Typy plik\u00f3w SELinx zwi\u0105zane z Postfixem to<em> postfix_exec_t<\/em> dla katalogu\u00a0 z konfiguracj\u0105 <code>\/etc\/postfix<\/code>, <em>postfix_data_t<\/em> dla katalogu z danymi <code>\/var\/lib\/postfix<\/code> i <em>postfix_spool_t<\/em>\u00a0 dla katalogu z poczt\u0105 przychodz\u0105c\u0105 i wychodz\u0105c\u0105<br \/>\n<code>\/var\/spool\/postfix<\/code>.<\/p>\n<pre class=\"lang:sh decode:true\"># ll -Zd \/etc\/postfix \/var\/lib\/postfix \/var\/spool\/postfix\r\n\r\ndrwxr-xr-x. root root system_u:object_r:postfix_etc_t:s0 \/etc\/postfix\r\ndrwx------. postfix root system_u:object_r:postfix_data_t:s0 \/var\/lib\/postfix\r\ndrwxr-xr-x. root root system_u:object_r:postfix_spool_t:s0 \/var\/spool\/postfix\r\n\r\n<\/pre>\n<p>Typ SELinux zwi\u0105zany z portem SMTP to <em>smtp_port_t<\/em>:<\/p>\n<pre class=\"lang:sh decode:true \"># semanage port \u2013l | grep smtp\r\nsmtp_port_t tcp 25, 465, 587<\/pre>\n<p>Zmienna boolean zwi\u0105zana z postfixem, kt\u00f3ra pozwala lub zabrania Postfixowi na zapis w lokalnym katalogu spool. Domy\u015blnie zmienna jest w\u0142\u0105czona.<\/p>\n<pre class=\"lang:sh decode:true \"># getsebool \u2013a | grep postfix\r\npostfix_local_write_mail_spool --&gt; on<\/pre>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #3366ff;\">Konfiguracja centralnego serwera poczty.<\/span><\/p>\n<p>1. Instalacja Postfixa:<\/p>\n<pre class=\"lang:sh decode:true\"># yum \u2013y install postfix<\/pre>\n<p>&nbsp;<\/p>\n<p>2. Edycja pliku konfiguracyjnego <code>main.cf<\/code> i modyfikacja poni\u017cszych dyrektyw, pozosta\u0142e zostawiamy niezmienione.<\/p>\n<pre class=\"lang:sh decode:true\">myhostname = server.example.com\r\nmydomain = example.com\r\nmyorigin = $myhostname\r\ninet_interfaces = all\r\nmydestination = $myhostname, localhost.$mydomain, localhost, $mydomain\r\nmynetworks = 192.168.0.0\/24, 127.0.0.0\/8\r\ndisable_dns_lookups = yes<\/pre>\n<p>Domy\u015blnie serwer poczty rozwi\u0105zuje nazwy domenowe dzi\u0119ki DNS. Je\u017celi DNS jest nieobecny mo\u017cna poinstruowa\u0107 Postfixa aby u\u017cywa\u0142 pliku<code> \/etc\/hosts<\/code> dyrektyw\u0105 <code>disable_dns_lookups = yes<\/code>.<\/p>\n<p>3. Sprawdzenie sk\u0142adni pliku konfiguracyjnego<code> main.cf<\/code>.<\/p>\n<pre class=\"lang:sh decode:true \"># postfix check<\/pre>\n<p>4. Wy\u015bwietlenie zmian dokonanych w pliku <code>main.cf<\/code> komend\u0105 <em>postconf<\/em>:<\/p>\n<pre class=\"lang:sh decode:true  \"># postconf \u2013n\r\n\r\nalias_database = hash:\/etc\/aliases\r\nalias_maps = hash:\/etc\/aliases\r\ncommand_directory = \/usr\/sbin\r\nconfig_directory = \/etc\/postfix\r\ndaemon_directory = \/usr\/libexec\/postfix\r\ndata_directory = \/var\/lib\/postfix\r\ndisable_dns_lookups = yes\r\ninet_interfaces = all\r\ninet_protocols = all\r\nmail_owner = postfix\r\nmail_spool_directory = \/var\/spool\/mail\r\nmydestination = $myhostname, localhost.$mydomain, localhost, $mydomain\r\nmydomain = example.com\r\nmyhostname = server.example.com\r\nmynetworks = 192.168.0.0\/24, 127.0.0.0\/8\r\nmyorigin = $myhostname\r\nqueue_directory = \/var\/spool\/postfix<\/pre>\n<p>5. Odblokowanie us\u0142ugi smtp na firewallu.<\/p>\n<pre class=\"lang:sh decode:true \"># firewall-cmd --permanent --add-service smtp\r\n# firewall-cmd --reload<\/pre>\n<p>6. Autostart, start i status Postfixa.<\/p>\n<pre class=\"lang:sh decode:true \"># systemctl enable postfix\r\n# systemctl start postfix\r\n# systemctl status postfix<\/pre>\n<p>7. Ustawienie Postfixa jako domy\u015blnego MTA.<\/p>\n<pre class=\"lang:sh decode:true \"># alternatives --set mta \/usr\/sbin\/sendmail.postfix\r\n# alternatives --display mta | grep current\r\nlink currently points to \/usr\/sbin\/sendmail.postfix<\/pre>\n<p>8. Wysy\u0142ka maila do u\u017cytkownika <em>user1<\/em> z tematem <em>Test<\/em>:<\/p>\n<pre class=\"lang:sh decode:true \"># mailx user1\r\nSubject: Test\r\nTest wysylania poczty\r\nCTRL+D<\/pre>\n<p>9. Prze\u0142\u0105czenie na konto <em>user1<\/em> i sprawdzenie czy poczta dosz\u0142a.<\/p>\n<pre class=\"lang:sh decode:true \"># su - user1\r\n[user1@smtp1 ~]$ mail\r\nHeirloom Mail version 12.5 7\/5\/10. Type ? for help.\r\n\"\/var\/spool\/mail\/user1\": 1 message 1 new\r\n&gt;N 1 root Tue Aug 1 13:33 18\/596 \"Test\"<\/pre>\n<p>10. Sprawdzenie logu.<\/p>\n<pre class=\"lang:sh decode:true \"># tail \/var\/log\/maillog<\/pre>\n<p>11. Poczta wy\u015bwietla si\u0119 jako wys\u0142ana z <em>server.example.com<\/em> mo\u017cemy zmodyfikowa\u0107 zmienn\u0105 myorigin aby wskazywa\u0142a na domen\u0119.<\/p>\n<pre class=\"lang:sh decode:true \">myorigin = $mydomain<\/pre>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #3366ff;\">Test centralnego serwera poczty ze zdalnego klienta.<\/span><\/p>\n<p><span style=\"color: #808080;\">Strona klienta (client.example.com).<\/span><\/p>\n<p>1. Instalacja Postfixa:<\/p>\n<pre class=\"lang:sh decode:true \"># yum \u2013y install postfix<\/pre>\n<p>2. Edycja <code>main.cf<\/code> i wy\u0142\u0105czenie korzystania z DNSa na rzecz pliku<code> \/etc\/hosts<\/code>.<\/p>\n<pre class=\"lang:sh decode:true\">disable_dns_lookups = yes<\/pre>\n<p>3. Autostart i start Postfixa.<\/p>\n<pre class=\"lang:sh decode:true\"># systemctl enable postfix\r\n# systemctl start postfix<\/pre>\n<p>4. Wysy\u0142ka poczty na konto user1@server.example.com.<\/p>\n<pre class=\"lang:sh decode:true \"># mailx user1@server.example.com\r\nSubject: Test zdalny\r\nTest zdalny\r\nCTRL+D<\/pre>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #808080;\">Strona serwera (server.example.com).<\/span><\/p>\n<p>5. Sprawdzenie czy dosz\u0142a poczta do u\u017cytkownika <em>user1<\/em>.<\/p>\n<pre class=\"lang:sh decode:true \"># su - user1\r\n$ mail\r\nHeirloom Mail version 12.5 7\/5\/10. Type ? for help.\r\n\"\/var\/spool\/mail\/user1\": 2 messages 1 new\r\n1 root Tue Aug 1 13:33 19\/607 \"Test\"\r\n&gt;N 2 root Tue Aug 1 14:36 21\/898 \"Test zdalny\"\r\n&amp; q\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #3366ff;\">Konfiguracja Postfixa do forwardowania lokalnej poczty z klienta do centralnego serwera poczty i odrzucania poczty ze \u017ar\u00f3de\u0142 zewn\u0119trznych.<\/span><\/p>\n<p><span style=\"color: #808080;\">Strona klienta (client.example.com).<\/span><\/p>\n<p>1. Instalacja postfixa.<\/p>\n<pre class=\"lang:sh decode:true\"># yum \u2013y install postfix<\/pre>\n<p>2. Edycja pliku konfiguracyjnego <code>main.cf<\/code> i modyfikacja poni\u017cszych dyrektyw. Pozosta\u0142e zostawiamy niezmienione.<\/p>\n<pre class=\"lang:sh decode:true \">myhostname = client.example.com\r\nmydomain = example.com\r\nmyorigin = $mydomain\r\ninet_interfaces = localhost\r\nmydestination = localhost\r\nrelayhost = server.example.com\r\ndisable_dns_lookups = yes<\/pre>\n<p>3. Sprawdzenie sk\u0142adni <code>main.cf<\/code>:<\/p>\n<pre class=\"lang:sh decode:true \"># postfix check<\/pre>\n<p>4. Podejrzenie zmian dokonanych w pliku <code>main.cf<\/code> komend\u0105 <em>postconf<\/em>:<\/p>\n<pre class=\"lang:sh decode:true\"># postconf \u2013n\r\n\r\ncommand_directory = \/usr\/sbin\r\nconfig_directory = \/etc\/postfix\r\ndaemon_directory = \/usr\/libexec\/postfix\r\ndata_directory = \/var\/lib\/postfix\r\ndisable_dns_lookups = yes\r\ninet_interfaces = localhost\r\nmail_owner = postfix\r\nmydestination = localhost\r\nmydomain = example.com\r\nmyhostname = client.example.com\r\nmyorigin = $mydomain\r\nqueue_directory = \/var\/spool\/postfix\r\nrelayhost = server.example.com\r\n<\/pre>\n<p>5. <span style=\"color: #ff0000;\">Otworzenie portu w \u0142a\u0144cuchu incoming nie jest potrzebne bo serwer tylko forwarduje poczt\u0119. Port 25 w \u0142a\u0144cuch outgoing jest otwarty.<\/span><\/p>\n<p>6. Autostart i start Postfixa.<\/p>\n<pre class=\"lang:sh decode:true \"># systemctl enable postfix\r\n# systemctl start postfix<\/pre>\n<p>7. Ustawienie Postfixa jako domy\u015blnego MTA.<\/p>\n<pre class=\"lang:sh decode:true \"># alternatives --set mta \/usr\/sbin\/sendmail.postfix\r\n# alternatives --display mta | grep current\r\nlink currently points to \/usr\/sbin\/sendmail.postfix<\/pre>\n<p>8. Wysy\u0142ka maila do u\u017cytkownika <em>user1<\/em> z tematem Test. Konto <em>user1<\/em> musi by\u0107 za\u0142o\u017cone na serwerze. Je\u017celi nie ma takiego konta na kliencie to mail dojdzie ale nie b\u0119dziemy wiedzie\u0107 czy przekazywanie dzia\u0142a poprawnie. Lepiej za\u0142o\u017cy\u0107 r\u00f3wnie\u017c na kliencie i prze\u0142\u0105czy\u0107 si\u0119 na konto user1 na kliencie i sprawdzi\u0107, \u017ce na konto user1@localhost nie dosz\u0142a \u017cadna poczta.<\/p>\n<pre class=\"lang:sh decode:true \"># mailx user1\r\nSubject: Test Forwardowania\r\nTest wysylania poczty\r\nCTRL+D<\/pre>\n<p>9. Sprawdzenie czy kolejka jest pusta, tj. czy mail zosta\u0142 wysy\u0142any<\/p>\n<pre class=\"lang:sh decode:true \"># mailq\r\nMail queue is empty<\/pre>\n<p>10. Prze\u0142\u0105czenie na konto <em>user1<\/em> i sprawdzenie czy czasem lokalnie ten mail nie zosta\u0142 wys\u0142any.<\/p>\n<pre class=\"lang:sh decode:true \"># su - user1\r\n$ mailx\r\nNo mail for user1<\/pre>\n<p>Wszystko pasuje mail nie zosta\u0142 wys\u0142any lokalnie.<\/p>\n<p><span style=\"color: #808080;\">Strona serwera (server.example.com).<\/span><\/p>\n<p>11. Prze\u0142\u0105czenie na konto <em>user1<\/em> i sprawdzenie czy poczta dosz\u0142a.<\/p>\n<pre class=\"lang:sh decode:true\"># su - user1\r\n[user1@smtp1 ~]$ mail\r\nHeirloom Mail version 12.5 7\/5\/10. Type ? for help.\r\n\"\/var\/spool\/mail\/user1\": 1 message 1 new\r\n&gt;N 1 root Tue Aug 1 13:40 18\/596 \"Test Forwardowania\"<\/pre>\n<p>Mail dotar\u0142 na skrzynk\u0119 <em>user1@server.example.com<\/em> czyli a nie na skrzynk\u0119 <em>user1@localhost<\/em> a wi\u0119c wszystko w porz\u0105dku.<\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #3366ff;\">Konfiguracja Postfixa do otrzymywania poczty z sieci lokalnej i forwardowania jej do centralnego serwera.<\/span><\/p>\n<p>Strona klienta, kt\u00f3ry pracuje jako forwarder (client.example.com)<\/p>\n<p>1. Edycja pliku konfiguracyjnego <code>main.cf<\/code> i modyfikacja poni\u017cszych dyrektyw. Pozosta\u0142e zostawiamy niezmienione.<\/p>\n<pre class=\"lang:sh decode:true \">myhostname = client.example.com\r\nmydomain = example.com\r\nmyorigin = $mydomain\r\ninet_interfaces = all\r\nmydestination = $myhostname, localhost.$mydomain, localhost, $mydomain\r\nmynetworks = 192.168.0.0\/24, 127.0.0.0\/8\r\nrelayhost = server.example.com\r\ndisable_dns_lookups = yes<\/pre>\n<p>2. Restart Postfixa.<\/p>\n<pre class=\"lang:sh decode:true \"># systemctl restart postfix<\/pre>\n<p>3. Otworzenie portu 25 na firewallu.<\/p>\n<pre class=\"lang:sh decode:true \"># firewall-cmd --permanent --add-service smtp\r\n# firewall-cmd --reload<\/pre>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #808080;\">Jaki\u015b inny klient (nie client.example.com) z sieci lokalnej, z kt\u00f3rego wy\u015blemy maila.<\/span><\/p>\n<p>4. Wysy\u0142ka maila.<\/p>\n<pre class=\"lang:sh decode:true\"># su - user1\r\n$ mailx user1@client.example.com\r\nSubject: Test forwardowania poczty z sieci lokalnej\r\nTest\r\nEOT<\/pre>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #808080;\">Na centralnym serwerze (server.example.com).<\/span><\/p>\n<pre class=\"lang:sh decode:true \"># su - user1\r\n$ mail\r\nHeirloom Mail version 12.5 7\/5\/10. Type ? for help.\r\n\"\/var\/spool\/mail\/user1\": 1 message 1 new\r\n&gt;N 1 root Tue Aug 1 13:45 18\/596 \"Test forwardowania poczty z sieci lokalnej\"<\/pre>\n<p>Mail dotar\u0142 na skrzynk\u0119 <em>user1@server.example.com<\/em> czyli wszystko w porz\u0105dku.<\/p>\n<p><span style=\"color: #008000;\"><code><\/code><\/span><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Postfix jest kompatybilny z Sendmailem jednak jest \u0142atwiejszy w konfiguracji, administracji, jest bardziej modularny, bardziej bezpieczny i oferuje wi\u0119ksz\u0105 wydajno\u015b\u0107. Zawiera tak\u0105 funkcjonalno\u015b\u0107 jak dopasowywanie wzorc\u00f3w do filtrowania niechcianej poczty, ponadto wspiera wiele wirtualnych domen w ramach jednego systemu.<\/p>\n","protected":false},"author":1,"featured_media":1685,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[48],"tags":[],"_links":{"self":[{"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/posts\/1678"}],"collection":[{"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/comments?post=1678"}],"version-history":[{"count":22,"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/posts\/1678\/revisions"}],"predecessor-version":[{"id":1705,"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/posts\/1678\/revisions\/1705"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/media\/1685"}],"wp:attachment":[{"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/media?parent=1678"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/categories?post=1678"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/tags?post=1678"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}