Ubuntu LAMP server kurulumu

LAMP, bir web sunucusunun temel bileşenleri olan Linux, Apache, Mysql ve PHP bileşenlerinin ilk harflerinden oluşan bir kısaltmadır. Linux web sunucusunun üzerinde çalıştırılacağı işletim sistemi, Apache linux işletim sisteminde çalışacak web sunucusu, Mysql web sitelerinin kullanacağı ilişkisel veri tabanı ve PHP de web sitelerinin kodlanmasında kullanılan sunucu tabanlı programlama dili olarak tanımlanabilir.

Günümüzde en çok tercih edilen Linux dağıtımı olan Ubuntu’ da lamp server ı tek bir komutla kurabilirsiniz. Bunun için konsole programını  açarak aşağıdaki komutu yazın ve çalıştırın.

[bash]sudo apt-get install lamp-server^[/bash]

Bu komutu çalıştırdıktan sonra gerekli paketler indirilecek ve kurulacaktır. Kurulum sırasında MYSQL sunucusu yetkili kullanıcısına(root) bir şifre tanımlamanızı isteyecektir.

mysqlroot

istediğiniz şifreyi yazarak enter a basın ve karşınıza gelen şifre doğrulama ekranına şifreyi  tekrar yazarak enter a basın. Şifrei tanımladıktan sonra geri kalan paketlerde kurulacak ve LAMP SERVER kurulmuş olacaktır.

Web tarayıcınızda adres çubuğuna “localhost” yazdığınızda karşınıza aşağıdaki sayfa geliyorsa apache kurulumunu z tamamlanmış demektir.

apacheiswork

Artık /var/www/html/ dizinine sitenizin dosyalarını kopyalayarak sitenizi localhost adresinde çalıştırabilirsiniz.

Devam

Postfix, Dovecot ve MySQL ile Mail Server Kurulumu

Giriş

Bu yazı sonunda  sanal  domainler ,kullanıcılar ve takma adlar oluşturabileceğiniz bir mail sunucusu kurmuş olacaksınız.Ayrıca SpamAssassin ile  spam  mesajlara karşı korunmuş olacaksınız.

[box type="info"]

Başlamadan önce sunucunuzda olması  gerekenler:

* Sunucunuza yönlendirilmiş bir domain (setup domain)
* Kurulu ve çalışan  MySQL  (setup mysql)
* Root yetkili bir kullanıcı (setup new users– omit step 5)
* FQDN tanımlanası (setup FQDN)

İsteğe bağlı: SSL sertifikası (setup free signed ssl certificate)

[/box]

Adım 1: Paket Kurulumu

[bash]apt-get install postfix postfix-mysql dovecot-core dovecot-imapd dovecot-lmtpd dovecot-mysql dovecot-pop3d[/bash]

Bu komuttan sonra dovecot  SSL sertifikası oluşturup oluşturmayacağınızı  soruyor ,eğer SSL sertifikanız varsa hayır deyip devam edebilirsiniz.Bu yazıda Dovecot un oluşturduğu SSL sertifikasını kullanacağımız için evet seçeneğini seçiyoruz.

Sonrasında SSL sertifikası oluşturulurken kullanılacak domain adresini isteyecek ,buraya sunucunuzun ana domain adresini  yazıp  devam edin.  Postfix yapılandırma sayfası karşınıza gelecek ,”Internet Site” seçeneğini seçip tamam diyoruz.

postfix-configiration

Sonrasında  sitem mail adresini girmemiz gerekiyor.Bu değer FQDN adresiniz yada ana domain adresiniz olabilir.

postfix-configiration1

Adım 2 : Veri tabanı oluşturma,Sanal domain ,Kullanıcılar ve Takma adlar

Kurulumu  bitirdikten sonra Domainler,kullanıcılar ve takma adlar için üç tane  tablo oluşturacağız.Tablolar için servermail isimli bir veri tabanı oluşturacağız, isterseniz başka bir isim kullanabilirsiniz.

Servermail veri tabanını oluşturmak için:

[bash]mysqladmin -p create mailserver[/bash]

MYSQL de root yetkisi  almak için:

[bash]mysql -u root -p[/bash]

komutunu yazıp  root  şifresini girdiğinizde eğer bir sorun yoksa şu şekilde bir satır gelecek:

[bash]mysql >[/bash]

İlk  olarak bir kullanıcı oluşturacağız ve o kullanıcıya mailserver veri tabanındaki  tüm tablolar için SELECT yetkisi vereceğiz.

[bash]> GRANT SELECT ON mailserver.* TO ‘mailroot’@’127.0.0.1’ IDENTIFIED BY ‘mailpassword’;[/bash]

mailroot isimli mailpassword şifreli bir kullanıcı oluşturup mailserver veri tabaında SELECT yetkisini vermiş olduk. İşlemimizin geçerli olması için MYSQL ayarlarını yeniden yüklemeliyiz bunun için :

[bash]mysql >FLUSH PRIVILEGES;[/bash]

komutunu çalıştırıyoruz.

Tabloları oluşturmak için veritabanımızı seçiyoruz:

[bash]mysql > USE mailserver;[/bash]

Sanal domain bilgilerini  saklayacağımız tablo için :

[bash]CREATE TABLE `virtual_domains`
( `id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(50) NOT NULL,
PRIMARY KEY (`id`) )
ENGINE=InnoDB DEFAULT CHARSET=utf8;[/bash]

Kullanıcı bilgilerini saklamak için virtual_user tablosunu oluşturacağız. Bu tabloya mail adresi ve şifre bilgilerini yazacağız mail adresinin domain ile eşleşmesi gereklidir.

[bash]CREATE TABLE `virtual_users`
( `id` INT NOT NULL AUTO_INCREMENT,
`domain_id` INT NOT NULL,
`password` VARCHAR(106) NOT NULL,
`email` VARCHAR(120) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `email` (`email`),
FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE )
ENGINE=InnoDB DEFAULT CHARSET=utf8;[/bash]

Son olarak takma adlar için tablomuzu oluşturacağız.Takma adlar bir hesap için birden fazla adres tanımlayabilmemizi sağlayacak.

[bash]CREATE TABLE `virtual_aliases`
( `id` INT NOT NULL AUTO_INCREMENT,
`domain_id` INT NOT NULL,
`source` varchar(100) NOT NULL,
`destination` varchar(100) NOT NULL,
PRIMARY KEY (`id`),
FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE )
ENGINE=InnoDB DEFAULT CHARSET=utf8;[/bash]

Tablolarımız oluşturduk artık veri ekleme işlemine geçebiliriz.

Sanal Adresler

Virtual_domains tablosuna kullanmak istediğiniz her adresi  ekleyebilirsiniz.Örnek olarak example.com ve hostname.example.com adreslerini ekleyeceğim.

[bash]INSERT INTO `mailserver`.`virtual_domains`
(`id` ,`name`)
VALUES
(‘1’, ‘example.com’),
(‘2’, ‘hostname.example.com’);[/bash]

Sanal Mail adresleri

Virtual_users tablosuna kullanacağımız  mail  adreslerini tanımlıyoruz.Bu adreslerin domain isimleri virtual_domains tablosunda kayıtlı olmalı.

INSERT INTO `mailserver`.`virtual_users`
(`id`, `domain_id`, `password` , `email`)
VALUES
('1', '1', ENCRYPT('firstpassword', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), '[email protected]'),
('2', '1', ENCRYPT('secondpassword', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), '[email protected]');

Yukarıdaki istekte password alanında  rand() ile 0-1 arasında bir rastgele sayi ürettik. Ardından sha() ile bunu hashledik ve substring(hash, -16) ile bu hash değerinin son 16 hanesini aldık. concat(‘$6$’, hash’in son 16 hanesi) ile elimizdeki değerin başına $6$ ekledik ki bu da crypt icin SHA512 anlamına gelir. Ardından ENCRYPT ile şifremizi ve az önce oluşturduğumuz şifremizi birleştirip  bu değeri verdik.

Sanal Takma Adlar

Virtual_aliases tablomuza takma adlarımızı ekleyeceğiz.

INSERT INTO `mailserver`.`virtual_aliases`
(`id`, `domain_id`, `source`, `destination`)
VALUES
('1', '1', '[email protected]', '[email protected]');

Mysql ile işimizi bitirdik artık çıkış yapabliriz.
[bash]mysql > exit[/bash]

 Adım 3: Postfix Yapılandırması

Posfix SMPT ayarlarını ve Mysql bağlantısı ile sanal adresleri kullanabilecek şekilde yapılandırmamız gerekiyor. İlk olarak aşağıdaki komutla postfix yapılandırma dosyasının bir yedeğini alalım.

[bash]cp /etc/postfix/main.cf /etc/postfix/main.cf.orig[/bash]

Artık rahat bir şekilde posfix yapılandırma dosyasını düzenleyebiliriz.

[bash]nano /etc/postfix/main.cf[/bash]

Komutuyla dosyayı düzenleyelim.İlk olarak TLS parametrelerini yorum satırı yaparak etkisiz hale getiriyoruz ve hemen altına yeni parametrelerimizi ekliyoruz:

[bash]# TLS parameters
#smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
#smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
#smtpd_use_tls=yes
#smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
#smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
# pem ve key dosyaları dovecot un oluşturduğu dosyalar
# —
smtpd_tls_cert_file=/etc/dovecot/dovecot.pem
smtpd_tls_key_file= /etc/dovecot/private/dovecot.pem
smtpd_use_tls=yes
smtpd_tls_auth_only = yes
smtpd_tls_security_level=may
smtpd_tls_protocols = !SSLv2, !SSLv3
# —
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination

[/bash]

mydestination parametresini yorum satırı yaparak hemen altına

[bash]#mydestination = example.com, hostname.example.com, localhost.example.com, localhost
mydestination = localhost[/bash]

myhostname parametresi sunucunuzun FQDN adresi olmalıdır. Eğer FQDN adresiniz sunucunuzda doğru bir şekilde tanımlıysa bu mydestination ve myhostname parametreleri sunucunuzun adres bilgilerine göre ayarlanmış olacaktır,yani example.com yerine sizin domaininiz yazacaktır.

Sanal domainler  için post teslim alma işlemini dovecot un üsleneceğini belirtmek için dosyanın sonuna şu satırı ekliyoruz.

[bash]virtual_transport = lmtp:unix:private/dovecot-lmtp[/bash]

Son olarak Postfix in adres,kullanıcı,ve takma ad bilgilerini mysql den almasını sağlamak için şu satırları ekliyoruz:

[bash]virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf
[/bash]

Şimdi postfix in mysql ile bağlantı kurmasını sağlayacak olan dosyaları oluşturalım.Sanal adresler için:

[bash]nano /etc/postfix/mysql-virtual-mailbox-domains.cf[/bash]

komutu ile dosyayı oluşturalım ve içerisine

[bash]user = mailroot
password = mailpassword
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 1 FROM virtual_domains WHERE name=’%s’[/bash]

yazıp kaydediyoruz.Buradaki bilgiler MYSQL veritabanımızı oluşturduktan sonra oluşturduğumuz ve SELECT yetkisi verdiğimiz kullanıcının bilgileri.Dosyamızın aktif olması için postfix i  yeniden başlatmalıyız.

[bash]service postfix restart[/bash]

Postfix in adresimizi bulabildiğini kontrol etmek için aşağıdaki komutu çalıştırın eğer 1 değerini dönerse çalışıyor demektir.

[bash]postmap -q example.com mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf[/bash]

Sıradaki dosyamızı oluşturmak için :

[bash]nano /etc/postfix/mysql-virtual-mailbox-maps.cf[/bash]

Dosya içeriği :

[bash]user = mailroot
password = mailpassword
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 1 FROM virtual_users WHERE email=’%s’[/bash]

Posfix i  yeniden başlatıyoruz:

[bash]service postfix restart[/bash]

Doğrulamak için :

[bash]postmap -q [email protected] mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf[/bash]

Son olarak takma adlar için kullandığımız dosyayı oluşturalım :

[bash]nano /etc/postfix/mysql-virtual-alias-maps.cf[/bash]

Dosya içeriği:

[bash]user = mailroot
password = mailpassword
hosts = 127.0.0.1
dbname = mailserver
query = SELECT destination FROM virtual_aliases WHERE source=’%s’[/bash] [bash]service postfix restart[/bash]

Doğrulamak için :

[bash]postmap -q [email protected] mysql:/etc/postfix/mysql-virtual-alias-maps.cf[/bash]

SMTP üzerinden  bağlanmak için 587. portu açmalıyız.Bunun için /etc/postfix/master.cf dosyasını düzenleyelim.

[bash]nano /etc/postfix/master.cf[/bash]

Bu dosyada aşağıdaki satırları bulup başlarındaki # işaretini kaldırmalısınız:

[bash]submission inet n – – – – smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject[/bash] [bash]service postfix restart[/bash]

Adım 4 : Dovecot Yapılandırması

İlk olarak dovecot yapılandırması yaparken değiştireceğimiz dosyaların yedeklerini alalım.

[bash]cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.orig
cp /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-mail.conf.orig
cp /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/10-auth.conf.orig
cp /etc/dovecot/dovecot-sql.conf.ext /etc/dovecot/dovecot-sql.conf.ext.orig
cp /etc/dovecot/conf.d/10-master.conf /etc/dovecot/conf.d/10-master.conf.orig
cp /etc/dovecot/conf.d/10-ssl.conf /etc/dovecot/conf.d/10-ssl.conf.orig
[/bash]

dovecot yapılandırma dosyasını  açalım:

[bash]nano /etc/dovecot/dovecot.conf[/bash] [bash]!include conf.d/*.conf[/bash]

satırını  bulup bu satırın aktif yani yorumlanmamış olduğunu kontrol edelim. Sonrasında protokolleri  aktif  etmek için

[bash]!include_try /usr/share/dovecot/protocols.d/*.protocol[/bash]

satırını bulup hemen altına

[bash]protocols = imap lmtp pop3[/bash]

satırını  ekliyoruz.

Sırada 10-mail.conf dosyası var :

[bash]nano /etc/dovecot/conf.d/10-mail.conf[/bash]

mail_location değerini bulup şu şekilde değiştiriyoruz.Eğer yorum satırı ise baştaki # işaretini kaldırarak aktif hale getiriyoruz.

[bash]mail_location = maildir:/var/mail/vhosts/%d/%n[/bash]

mail_privileged_group değerini bulup aşağıdaki  şekilde değiştiriyoruz.Eğer yorum satırı ise baştaki # işaretini kaldırarak aktif hale getiriyoruz.

[bash]mail_privileged_group = mail[/bash]

Mail dizinimizin  dosya izinlerini  ayarlayalım:

ilk önce mail  işlemlerimizde yetkili olacak kullanıcıyı ve grubu oluşturalım:

[bash]groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /var/mail[/bash]

sonrasında kullanacağımız  her domain için aşağıdaki gibi  klasör oluşturalım.

[bash]mkdir -p /var/mail/vhosts/example.com[/bash]

Şimdi mail dizinimizin sahibini ve grubunu  belirleyelim:

[bash]chown -R vmail:vmail /var/mail[/bash]

işlemler tamamlandıktan sonra sorun olmadıysa

[bash]ls -ld /var/mail[/bash]

komutun çıktısı aşağıdaki şekilde olmalı(Dosya izinleri):

[bash]drwxrwsr-x 3 root vmail 4096 Jan 24 21:23 /var/mail[/bash]

Dovecot u yapılandırmaya 10-auth.conf dosyasıyla devam ediyoruz.

[bash]nano /etc/dovecot/conf.d/10-auth.conf[/bash] [bash]disable_plaintext_auth = yes[/bash]

satırını  buluyoruz ve satırı aktif hale getiriyoruz.

auth_mechanisms değerini buluyoruz ve aşağıdaki gibi  düzenliyoruz.

[bash]auth_mechanisms = plain login[/bash] [bash]!include auth-system.conf.ext[/bash]

satırını  buluyoruz ve yorum satırı yaparak etkisiz bırakıyoruz.

[bash]#!include auth-sql.conf.ext[/bash]

satırını bulup satırı aktif hale getiriyoruz.

Şimdi  dovecot  mysql ile iletişim kurabilsin diye auth-sql-conf.ext dosyasını düzenlemeliyiz.

[bash]nano /etc/dovecot/conf.d/auth-sql.conf.ext[/bash]

komutu ile dosyayı açıp içerisindeki bütün satırları yorum satırı yapıyoruz yada siliyoruz ve dosya içeriğine aşağıdaki kodları ekliyoruz.

[bash]passdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
driver = static
args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n
}[/bash]

Şimdi /etc/dovecot/dovecot-sql.conf.ext dosyasını düzenleyelim

[bash]nano /etc/dovecot/dovecot-sql.conf.ext[/bash]

dirver parametresini aktif hale getireli m ve değerini mysql olarak ayarlıyalım

[bash]driver = mysql [/bash]

connect satırını aktif hale getirin ve kendi  bilgilerinizi kullanarak aşağıdaki gibi düzenleyin

[bash]connect = host=127.0.0.1 dbname=mailserver user=mailroot password=mailpassword[/bash]

default_pass_scheme paremetresini aktif hale getirin ve aşağıdaki şekilde değiştirin

[bash]default_pass_scheme = SHA512-CRYPT[/bash]

password_query parametresini aktif hale getirin ve aşağıdaki gibi  değiştirin

[bash]password_query = SELECT email as user, password FROM virtual_users WHERE email=’%u’;[/bash]

Sonrasında /etc/dovecot/conf.d/10-master.conf dosyasını düzenlememiz gerekiyor biraz karışık bir dosya olduğu için hazır halini paylaşacağım içeriği kopyalayıp kendi sunucunuzdaki dosya ile değiştirin.

/etc/dovecot/conf.d/10-master.conf :
https://www.dropbox.com/s/g0vnt233obh6v2h/etc.dovecot.conf.d.10-master.conf.txt

Hepsi bu kadar son olarak dovecot u  baştan başlatıyoruz:

[bash]service dovecot restart[/bash]

kullanıcıadı:[email protected]
şifre: firstpassword
IMAP:example.com
SMTP:example.com

şeklinde kendi adreslerinizi kullarak mail adresinize ulaşabilirsiniz.

kaynak :https://www.digitalocean.com/community/tutorials/how-to-configure-a-mail-server-using-postfix-dovecot-mysql-and-spamassasin

Devam

Mysql sunucusuna uzaktan erişim

Mysql  normal  kurulumla sadece localhost tan gelen bağlantıları kabul ediyor.Uzak bir sunucudan bağlantı kurmak istediğimizde başarısız oluyoruz.Bu durumun nedeni  mysql sunucunuzun dışarıdan gelen bağlantıları kabul etmiyor olması. Mysql servisini dışarıdan bağlantı  kabul  edecek  şekilde çalıştırmak için mysql ayar dosyasında bir kaç değişiklik yapmamız gerekiyor. Bu değişikliği aşağıdaki  adımları izleyerek yapabiliriz.
SSH bağlantısı  ile sunucumuza eriştikten sonra (localde çalışıyorsanız direk konsolu  kullanarak)
[bash]sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf[/bash]

komutunu verdiğimizde konsol üzerinden mysql yapılandırma dosyasını düzenlemek için açmış oluyoruz. Bu dosya içerisinde  “bind-address = 127.0.0.1” satırını kaldırmamız gerekiyor. Bunun için Ctrl + w tuşlarına basarak arama yapabilirsiniz. Bu satırı bulduktan sonra başına “#” işareti ekleyerek bu ayarı etkisiz hale getirmiş olursunuz.

sonrasında
[bash]mysql -u root -p[/bash]
komutunu vererek mysql bağlantısı kuruyoruz ve aşağıdaki  sorguları çalıştırıyoruz
[bash]
GRANT ALL PRIVILEGES ON *.* TO ‘kullaniciadi’@’%’ IDENTIFIED BY ‘sifre’ WITH GRANT OPTION;
FLUSH PRIVILEGES;
[/bash]
Burada kullanıcı  adı  ve şifre bilgilerini  kendimize göre düzenliyoruz.Sonra ctrl+c ile konsola dönebiliriz. Son olarak mysql servisini yeniden başlatmak için
[bash]sudo service mysql restart[/bash]
komutunu veriyoruz artık belirttiğimiz kullanıcı  mysql sunucumuza dışarıdan erişebilir. Bu işlemlerden sonra yeni bir kullanıcı  eklerken makine olarak “%” değerini  belirtirseniz yeni oluşturduğunuz kullanıcıda uzaktan erişime açık olacaktır.

Devam