Bu döküman The Perfect Server – CentOS 7 x86_64 (nginx, Dovecot, ISPConfig 3) isimli dökümanın Türkçe çevirisi ve iyileştirilmiş versiyonudur.

Dökümana başlamadan önce hatırlatmamız gereken bazı noktalar var. Bu döküman ilk kez kurulmuş bir CentOS 7 işletim sistemi üzerine Web server (nginx), Mail server (dovecot), MySQL, PHP 7 ve IspConfig yazılımının kurulumunu içermektedir. Bunun için temiz kurulmuş bir CentOS 7 işletim sistemine ve ssh erişimine ihtiyacımız vardır. Eğer sunucu yakınınızdaysa bash ile login olmanız yeterlidir. Bu dökümanda CentOS 7 kurulumu anlatılmamaktadır. İşletim sistemi kurulumundan sonraki aşamaları anlatmaktadır. Burada yaptığımız tüm işlemleri root kullanıcısıyla yapmaktayız.

EPEL Repo Ve Bazı Ek Programların Kurulumu

EPEL açılımı Extra Packages for Enterprise Linux olan ve  Redhat’ın Fedora projesine yaptığı katkılarını barındıran bir bir yazılım deposudur. Enterprise Linux sunucularının yönetiminde çok sıklıkla kullanılan programlar bu depo içerisindedir. EPEL hakkında daha detaylı bilgi için tıklayın.

yum -y install epel-release yum-priorities

Epel depoyu ve yum-priorities paketlerini kurduktan sonra epel repo tanımlamalarının bulunduğu dosyanın önceliğini ayarlıyoruz. Bunun için priority=10 ifadesini [epel] bölümüne ekliyoruz.

nano /etc/yum.repos.d/epel.repo
[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
failovermethod=priority
enabled=1
priority=10
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
[...]

Artık işletim sistemimizi güncelleyebiliriz. Tüm paketlerin güncellenmesi birkaç dakika sürebilir.

yum -y update

Güncelleme bittikten sonra ‘Development Tools’ grubunda bulunan paketleri kurabiliriz. Bu grupta şu paketler mevcuttur: zip, cpp, doxygen, gcc-g++, glibc-devel, m4, bazı Perl ve Python paketleri, rpm dosyalarının yönetimiyle ilgili paketler vs…

yum -y groupinstall 'Development Tools'
yum -y install nano wget htop net-tools NetworkManager-tui
hostname Bilgisini Ayarlamak

Her bilgisayarın ağda tanımlı bir ismi vardır. Bu isim web domain adresinden farklı olabilir. Sunuculara isim tanımlamanın amacı birden fazla sunucumuz olduğunda karmaşıklığı önlemek ve yönetimi kolaylaştırmaktır. Örnek olarak biz s100.nixarsoft.com adresini kurulum yapacağımız sunucuya tanımlayacağız. Siz kendi domaininizi veya sadece “s1”, “server2”, “sunucu1” gibi isimler de verebilirsiniz. Fakat bunun için öncelikle sunucumuza tanımlanmış olan IP adresini listeleyelim.

ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 170.210.10.100  netmask 255.255.255.0  broadcast 170.210.10.255
        ether 00:50:56:40:33:1e  txqueuelen 1000  (Ethernet)
        RX packets 246619  bytes 44477721 (42.4 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 219987  bytes 37732901 (35.9 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Burada kalın olarak işaretlediğim IP adresine host bilgisini tanımlayacağız.

nano /etc/hosts

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
170.210.10.100 s100.nixarsoft.com s100
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

Artık “ping s100” yazdığımızda 170.210.10.100 adresine ping attığını görebilirsiniz. Sıradaki işlemimiz hostname bilgisini ayarlamak ve sistemi yeniden başlatmak.

echo 's100.nixarsoft.com' > /etc/hostname
reboot
Güvenlik Duvarını Kapatmak

ISPConfig kendi güvenlik duvarı servisiyle birlikte gelmektedir. Bu yüzden CentOS’un güvenlik duvarını kapatmamız gerekmektedir.

systemctl stop firewalld.service
systemctl disable firewalld.service

Güvenlik duvarının çalışmadığından emin olmak için aşağıdaki komutu yazıyoruz. Çıktısının “not running” şeklinde olması gerekmektedir.

firewall-cmd --state
not running
SELinux’u Pasifleştirmek

SELinux’un amacı işletim sisteminin güvenliğini arttırmaktır. Açılımı Security Enhanced Linux’tur fakat bu özellik faydadan daha çok problem çıkarmaktadır. Bu yüzden bu özelliği iptal etmemiz gerekmektedir.

nano /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

Buradaki “SELINUX” yazan satırı “disabled” şeklinde ayarlıyoruz ve reboot komutuyla sistemi yeniden başlatıyoruz.

reboot

quota (kota) Kurulumu

Hosting veya e-posta hesaplarına kota tanımlamamız gerekebilir. Bunu ISPConfig üzerinden yapabilmek için işletim sistemi çekirdeğinde quota özelliğini aktifleştirmemiz gerekmektedir. Öncelikle quota paketini kuruyoruz:

yum -y install quota

Ardından sisteme bağlanmış olan dizinlerin quota durumunu sorguluyoruz:

mount | grep ' / '
[[email protected] ~]# mount | grep ' / '
/dev/sda2 on / type ext4 (rw,noatime,data=ordered)

Gördüğünüz gibi herhangi bir kota ifadesi mevcut değil. Bazı işletim sistemlerinde çıktı olarak “noquota” ifadesi mevcut olabilir. Her iki durumda da quota özelliği aktif değil anlamına gelmektedir. Şimdi quota özelliğini aktifleştirmeye başlayabiliriz. Bu özellik çekirdeğe tanımlanacağı için “grub” dosyasını düzenlememiz gerekmektedir.

nano /etc/default/grub

Burada “GRUB_CMDLINE_LINUX” ile başlayan bir satır mevcut. Bu satırın atandığı tırnaklı ifadenin en sonuna rootflags=uquota,gquota ifadesini ekliyoruz:

GRUB_CMDLINE_LINUX="crashkernel=auto biosdevname=0 net.ifnames=0 rhgb quiet rootflags=usrquota,grpquota"

Bu konfigürasyonun aktif olabilmesi için grub’u tekrar oluşturuyoruz:

# grub config dosyasının yedeğini al
cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg_bak
# grubu tekrar oluştur
grub2-mkconfig -o /boot/grub2/grub.cfg
# yeniden başlat
reboot

Şimdi tekrar bağlanmış olan dizinlerin quota durumunu sorguluyoruz:

[[email protected] ~]# mount | grep ' / '
/dev/sda2 on / type ext4 (rw,noatime,quota,usrquota,grpquota,data=ordered)
[[email protected] ~]#

Artık ISPConfig üzeirnden hosting oluştururken kota belirleyebiliriz.

Sistem Tarihini Senkronize Etmek

Sistemin tarih saat bilgisini NTP (Network Time Protocol) ile senkronize etmek faydalı olacaktır.

yum -y install ntp

MySQL Kurulumu

Web projelerinde en çok MySQL 5.7 tercih edilmektedir. Fakat CentOS’un standart depolarında Mariadb mevcuttur. Biz MySQL depolarını kurup ardından 5.7 deposunu aktifleştirip ondan sonra kurulum gerçekleştireceğiz. Öncelikle MySQL deposunu kuruyoruz:

yum -y localinstall https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm

Şimdi MySQL community server paketini kurabiliriz:

yum -y install mysql-community-server

Şimdi MySQL servisinin başlatıp etkinleştirelim:

systemctl start mysqld
systemctl enable mysqld

MySQL’i ilk defa başlattığımızda kendisi otomatik olarak bir root şifresi belirleyip log dosyasına yazar. Buradan şifreyi bulabiliriz:

grep 'temporary' /var/log/mysqld.log
2020-07-18T09:00:26.217513Z 1 [Note] A temporary password is generated for [email protected]: xUb)0Y:fr!Dz
2020-07-18T09:00:28.782901Z 0 [Note] InnoDB: Creating shared tablespace for temporary tables

Bu şifreyi değiştirmek güvenlik açısından gerekli ve önemlidir. Şimdi MySQL root şifremizi değiştirelim:

mysql -u root -p
[yukarıdaki şifreyi girip enter tuşuna basıyoruz]

MySQL komut satırına ulaştıktan sonra karmaşık bir şifre belirliyoruz. Şifreniz yeterince zor değilse password validation plugin size uyarı mesajı verecektir. Bu yüzden şifrenizde özel karakterler ve büyük küçük harf içermelidir. En kolay yöntemle az önceki şifrenin sonuna üç adet ünlem işareti koyarak şifrenizi kolayca belirleyebilirsiniz. İsterseniz bir sonraki aşamada anlatıldığı üzere bu eklentiyi iptal edip sonra tekrar root şifrenizi hatırlayabileceğiniz bir şifreyle tekrar değiştirebilirsiniz:

> ALTER USER 'root'@'localhost' IDENTIFIED BY 'xUb)0Y:fr!Dz!!!';
> flush privileges;

Eğer şifre doğrulama eklentisini (validate_password) iptal etmek isterseniz MySQL komut satırındayken aşağıdaki komutla bu eklentiyi kaldırabilirsiniz:

> uninstall plugin validate_password;
Dovecot Kurulumu

Dovecot IMAP ve POP3 sunucusudur. E-posta gönderme ve alma işlemleri için gereklidir. Öncelikle dovecot paketini ve mysql bağlantı paketini kuruyoruz:

yum -y install dovecot dovecot-pigeonhole dovecot-mysql

Ardından dovecot sql bağlantısı için gerekli olan konfigürasyon dosyasını oluşturup gerekli yere soft link yapıyoruz:

touch /etc/dovecot/dovecot-sql.conf
ln -s /etc/dovecot/dovecot-sql.conf /etc/dovecot-sql.conf

Artık dovecot servisini başlatıp aktifleştirebiliriz:

systemctl enable dovecot.service
systemctl start dovecot.service
Postfix ve Getmail Kurulumu

Postfix, Unix ve türevi işletim sistemlerinde kullanılan bir açık kaynaklı e-posta aktarma ajanıdır. E-posta gönderebilmek için gereklidir. CentOS kurulumunda sendmail isimli program bu işlemi gerçekleştirir ama biz postfix kullanacağız:

yum -y install postfix

Kurulumu yaptıktan sonra sendmail’i disable edip diğer gerekli servisleri başlatıyoruz::

systemctl restart mysld
systemctl disable sendmail
systemctl enable postfix
systemctl restart postfix

Şimdi getmail kurabiliriz:

yum -y install getmail
Antivirüs (ClamAV) ve Spam Blocker (SpamAssassin) Kurulumu

E-postalarda virüslü eklentiler, kod blokları ve spam içerikler gelecektir. Tüm bunları bloklamak ve temizlemek için bu yazılımları kurmak gerekmektedir.

yum -y install amavisd-new spamassassin clamav clamd clamav-update unzip bzip2 perl-DBD-mysql

Rar dosyalarını açabilmek ve Rar dosyası oluşturabilmek için de aşağıdaki işlemleri yapıyoruz:

wget https://www.rarlab.com/rar/rarlinux-x64-5.5.0.tar.gz
tar -zxvf rarlinux-x64-5.5.0.tar.gz
cd rar
sudo cp -v rar unrar /usr/local/bin/

Freshclam konfigürasyonunu yapmak için aşağıdaki komutu yazıyoruz:

nano /etc/freshclam.conf

Burada “Example” satırının yorum satırı olarak ayarlandığından emin olmamız gerekiyor:

[....]
# Example
[....]

Şimdi gerekli servisleri başlatabiliriz:

sa-update
freshclam
systemctl enable amavisd.service
PHP 7.4 Kurulumu

CentOS’un standart depolarında PHP’nin eski versiyonu mevcut. Biz şuan en çok tercih edilen versiyon olan PHP 7.4 kurulumunu yapmak için farklı bir depo kullanacağız. İlk aşamamız yum-utils paketini kurmak. Bu paket içerisinde yum paket yöneticisiyle ilgili bazı komutlar mevcut:

yum -y install yum-utils

Ardından Remi isimli depoyu kuracağız. Bu depoda farklı PHP versiyonları mevcut. İlerleyen aşamada kurmak istediğimiz PHP versiyonunu aktifleştireceğiz:

yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
Total size: 26 k
Installed size: 26 k
Is this ok [y/d/N]: y        <------------ Burada "y" yazıp Enter tuşuna basıyoruz

Depo kuruldu. Bu depo içerisinde farklı PHP versiyonları mevcut. Aşağıdaki komutu yazarak 7.4 versiyonunu içeren depoyu aktifleştiriyoruz:

yum-config-manager --enable remi-php74

Şimdi depolarda olan PHP versiyonlarını listeleyelim:

yum search php74

Burada çıkan paketlerden ihtiyacımız olanları seçebiliriz. Bu dökümanda en çok ihtiyaç duyulan paketleri burada kuracağız:

yum -y install php74 php74-php php74-php-bcmath php74-php-cli php74-php-common php74-php-dbg php74-php-devel php74-php-fpm php74-php-gd php74-php-gmp php74-php-imap php74-php-intl php74-php-json php74-php-ldap php74-php-mbstring php74-php-mysqlnd php74-php-opcache php74-php-pdo php74-php-pear php74-php-pecl-base58 php74-php-pecl-csv php74-php-pecl-ip2location php74-php-pecl-mcrypt php74-php-pecl-memcache php74-php-pecl-psr php74-php-pecl-rar php74-php-pecl-redis5 php74-php-pecl-recode php74-php-pecl-uuid php74-php-pecl-zip php74-php-pecl-zmq php74-php-pgsql php74-php-phpiredis php74-php-tidy php74-php-soap php74-php-xml php74-php-xmlrpc

PHP’yi Remi deposundan kurduğumuz için farklı bir folder içerisine php-cli yazılımını kurar. Bu folder $PATH değişkeni içerisinde olmadığı için PHP çalıştırılabilir dosyasını $PATH değişkeninde bulunan herhangi bir klasöre linkliyoruz:

ln -s /opt/remi/php74/root/bin/php /usr/bin/php
[[email protected] ~]# php --version
PHP 7.4.8 (cli) (built: Jul  9 2020 08:57:23) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.8, Copyright (c), by Zend Technologies

Şimdi php.ini dosyasına bazı değişiklikler yapmamız gerekiyor:

nano /etc/opt/remi/php74/php.ini

Öncelikle error_reporting ifadesini aşağıdaki gibi güncelleyelim:

[...]
;error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
error_reporting = E_ALL & ~E_NOTICE
[...]

Sonra cgi.fix_pathinfo=0: ifadesini aktifleştirelim. Bu satırın sol tarafındaki noktalı virgülü kaldırıyoruz:

cgi.fix_pathinfo=0:

Ardından timezone ayarını yapıyoruz:

date.timezone = 'Europe/Istanbul'

Bu dosya içerisinde farklı ayarlar da yapabilirsiniz. Dosya yükleme limiti (upload_max_filesize), post max size (post_max_size), short_open_tag vs…

Şimdi PHP-FPM servisini başlatıyoruz. Nginx arkaplanda bu servisle iletişim kurmaktadır:

systemctl restart php74-php-fpm
systemctl enable php74-php-fpm
Nginx ve Fcgiwrap Kurulumu

Apache sunucusunu durdurup disable ettikten sonra nginx sunucusunu kuracağız:

systemctl stop httpd.service
systemctl disable httpd.service

yum -y install nginx  # nginx kurulumu burada
systemctl enable nginx.service
systemctl restart nginx.service

ISPConfig kurulum esnasında Apache veya Nginx seçimini soracaktır. Burada Nginx seçmemiz gerekiyor. Şimdi Fcgiwrap yazılımını kuruyoruz. CentOS depolarında bu paket mevcut olmadığından kaynak koddan derleyerek kurulum gerçekleştireceğiz. Kaynak koddan derleyebilmek için öncelikle fcgi-devel paketini kurmamız gerekiyor :

yum -y install fcgi-devel

Şimdi kaynak koddan kuruluma geçebiliriz:

cd /usr/local/src/
git clone git://github.com/gnosek/fcgiwrap.git
cd fcgiwrap
autoreconf -i
./configure
make
make install

Bu işlem fcgiwrap programını /usr/local/sbin/fcgiwrap adresine yükler. Şimdi spawn-fcgi paketini kurark fcgiwrap programını daemon olarak çalışmasını sağlıyoruz:

yum -y install spawn-fcgi

Şimdi spawn-fcgi servisinin ayar dosyasını aşağıdaki gibi güncelliyoruz. Kırmızıyla işaretlenmiş olan satırları dosyanın sonuna ekleyeceğiz:

nano /etc/sysconfig/spawn-fcgi
# You must set some working options before the "spawn-fcgi" service will work.
# If SOCKET points to a file, then this file is cleaned up by the init script.
#
# See spawn-fcgi(1) for all possible options.
#
# Example :
#SOCKET=/var/run/php-fcgi.sock
#OPTIONS="-u apache -g apache -s $SOCKET -S -M 0600 -C 32 -F 1 -P /var/run/spawn-fcgi.pid -- /usr/bin/php-cgi"

FCGI_SOCKET=/var/run/fcgiwrap.socket
FCGI_PROGRAM=/usr/local/sbin/fcgiwrap
FCGI_USER=apache
FCGI_GROUP=apache
FCGI_EXTRA_OPTIONS="-M 0770"
OPTIONS="-u $FCGI_USER -g $FCGI_GROUP -s $FCGI_SOCKET -S $FCGI_EXTRA_OPTIONS -F 1 -P /var/run/spawn-fcgi.pid -- $FCGI_PROGRAM"

İşlemlerin geçerli olabilmesi için aşağıdaki komutları sırayla giriyoruz:

usermod -a -G apache nginx
chkconfig spawn-fcgi on
systemctl restart spawn-fcgi
systemctl enable spawn-fcgi

Bu işlemleri yaptıktan sonra fcgiwrap soken dosyasını /var/run/fcgiwrap.socket adresinde göründüğünden emin olmamız gerekiyor. Bu soket dosyasının kullanıcısı ve grubu apache olmalı. Bu yüzden nginx kullanıcısını apache grubuna dahil ettik.

ls -lha /var/run/fcgiwrap.socket
srwxrwx--- 1 apache apache 0 Jul 20 11:50 /var/run/fcgiwrap.socket

Sonraki Döküman >

 

 

 

 

 

 

 

 

 


0 yorum

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.