Kategori arşivi: Debian 9

En Kolay Mail Sunucusu Nasıl Kurulur?

Bazı VPS sağlayıcılarının spam e-posta gönderimine karşı olarak mail gönderim portlarını ön tanımlı olarak kapattıklarını hatırlatayım, yani abi ben kurdum ama e-posta gönderip alamıyorum diyorsanız sağlayıcınız ile ilgilidir ve destek ile iletişime geçmeniz gerekmektedir.

Engelleme olmayan bir sağlayıcı arıyorsanız, bakacağınız adres https://www.ilkbyte.com/ olmalı.

mail sunucusu nasıl kurulur, vps üstüne mail sunucusu kurulumu

Bu makalede, sistemde yer alacak olan mail komutuyla programatik olarak posta gönderebileceğimiz basit bir Postfix sunucusu kuracağız. Gerçek ve tam işlevsel bir posta sunucusuna sahip olmak için kullanıcıların gelen kutularını okuyup uzaktan posta gönderebilecekleri bir posta istemcisine giriş yapabilmeleri gerekiyor.

Bu amaca ulaşmak için bizim Dovecot’a ihtiyacımız var. Dovecot, sunucu tarafından alınan postaları depolayabilir, kullanıcı hesaplarını doğrulayabilir ve postayla etkileşim kurabilir.

Eğer bir gelen kutusu kuruyorsak, spam koruma yazılımı olan spamassassin gibi bir yazılımı da kuracağız böylece spam e-postalarda gelmeyecek.

apt install mailutils postfix dovecot-imapd dovecot-sieve spamassassin spamc
ShellScript

Kurulum tamamlandıktan sonra e-posta için kullanılacak alt alan adı için SSL ayarlanacak isterseniz Acme.sh ile Ücretsiz SSL Sertifikası Nasıl Alınır ile isterseniz de Let’s Encrypt ile Web Server Yapılandırma ile bu işi kolayca yapabilir.

Ayrıca, alan adınızı nereden aldıysanız artık onun sitesinden ve/veya DNS sunucusunda iki küçük DNS kaydına ihtiyacımız var;

  • Bir MX kaydı, “@” için ekleme yapın, örneğin mertcangokgoz.com olarak tanımlayın.
  • Bir CNAME kaydı, Ana bilgisayar alanı: mail.example.org.
ssl = required
ssl_cert = </etc/letsencrypt/live/mail.example.org/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.example.org/privkey.pem
ssl_min_protocol = TLSv1.2
ssl_cipher_list = EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA256:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EDH+aRSA+AESGCM:EDH+aRSA+SHA256:EDH+aRSA:EECDH:!aNULL:!eNULL:!MEDIUM:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4:!SEED
ssl_prefer_server_ciphers = yes
ssl_dh = </usr/share/dovecot/dh.pem
auth_mechanisms = plain login
auth_username_format = %n

protocols = $protocols imap

userdb {
    driver = passwd
}
passdb {
    driver = pam
}

mail_location = maildir:~/Mail:INBOX=~/Mail/Inbox:LAYOUT=fs
namespace inbox {
    inbox = yes
    mailbox Drafts {
    special_use = \Drafts
    auto = subscribe
}
    mailbox Junk {
    special_use = \Junk
    auto = subscribe
    autoexpunge = 30d
}
    mailbox Sent {
    special_use = \Sent
    auto = subscribe
}
    mailbox Trash {
    special_use = \Trash
}
    mailbox Archive {
    special_use = \Archive
}
}

service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0660
    user = postfix
    group = postfix
}
}

protocol lda {
  mail_plugins = \$mail_plugins sieve
}
protocol lmtp {
  mail_plugins = \$mail_plugins sieve
}
plugin {
	sieve = ~/.dovecot.sieve
	sieve_default = /var/lib/dovecot/sieve/default.sieve
	sieve_dir = ~/.sieve
	sieve_global_dir = /var/lib/dovecot/sieve/
}
ShellScript

Hemen ardından spamlar için /var/lib/dovecot/sieve/default.sieve içerisine bir yapılandırma uygulayalım.

echo "require [\"fileinto\", \"mailbox\"];
if header :contains \"X-Spam-Flag\" \"YES\"
        {
                fileinto \"Junk\";
        }"
ShellScript

Bu işlemden sonra, e-postalara erişecek olan kullanıcıyı ve buna bağlı grubu oluşturmalıyız ardından sieve yapılandırmasını güncellemeliyiz.

grep -q '^vmail:' /etc/passwd || useradd vmail
chown -R vmail:vmail /var/lib/dovecot
sievec /var/lib/dovecot/sieve/default.sieve
ShellScript

Daha sonra, Dovecot için pam kimlik doğrulamayı etkinleştirmemiz gerekiyor.

echo "auth    required        pam_unix.so nullok
account required        pam_unix.so" >> /etc/pam.d/dovecot
ShellScript

Postfix’e kullanıcıların/parolaların kimlik doğrulaması için Dovecot’a bakmasını söylememiz gerekiyor /var/spool/postfix/private/auth içerisine aşağıdaki değişikliği uygulayın.

postconf -e 'smtpd_sasl_auth_enable = yes'
postconf -e 'smtpd_sasl_type = dovecot'
postconf -e 'smtpd_sasl_path = private/auth'
postconf -e 'mailbox_command = /usr/lib/dovecot/deliver'
ShellScript

Postfix’in posta akışını spamassassin üzerinden yönlendirebilmesi için /etc/postfix/master.cf dosyasını değiştireceğiz. Varsayılan yapılandırmayı kullanmayacağız silin gitsin ve aşağıdaki komutu çalıştırın.

echo "smtp unix - - n - - smtp
smtp inet n - y - - smtpd
  -o content_filter=spamassassin
submission inet n       -       y       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_tls_auth_only=yes
smtps     inet  n       -       y       -       -       smtpd
  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
spamassassin unix -     n       n       -       -       pipe
  user=debian-spamd argv=/usr/bin/spamc -f -e /usr/sbin/sendmail -oi -f \${sender} \${recipient}" >> /etc/postfix/master.cf
ShellScript

İşlem tamam, geleneksel yöntem ile mail sunucunuz hazır, bu işlemler neticesinde sunucunuz üzerinden e-posta gönderebilirsiniz. Çok az sayıda e-posta atıyorsanız işinize oldukça yarar, diğer amaçlar için kullanılmasını önermem.

Debian 9 Üzerinde IPv6 Tunnel Oluşturma

Türkiye\’de IPv6 kullanım imkanı olmadığı için Tunnel oluşturmamız gerekmektedir. Mevcut verilen yapılandırma ile bu iş çalışmadığı için aşağıdaki adımları yapmamız gerekiyor.

Ön tanımlı olarak tunnel tanımı

auto he-ipv6
iface he-ipv6 inet6 v4tunnel
        address 2001:470:1f0a:355::2
        netmask 64
        endpoint 216.66.80.30
        local 94.55.144.200
        ttl 255
        gateway 2001:470:1f0a:355::1

Ipv6 Tunnel\’in çalıştırılacağı IPv6 to IPv4 için sit0 ağ ara yüzünü açıyoruz.

ifconfig sit0 up
ifconfig sit0 inet6 tunnel ::216.66.80.30
ifconfig sit1 up
ifconfig sit1 inet6 add 2001:470:1f0a:355::2/64
route -A inet6 add ::/0 dev sit1

Ardından network üzerinde diğer makinelerin IPv6\’dan çıkış yapabilmesi için aşağıdaki adımlar takip edilir. İlk önce radvd kurulumu yapılır.

apt install radvd

IP dağıtımı ve RA işlemleri için aşağıdaki yapılandırma yapılır.

root@debian:~# nano /etc/radvd.conf
interface eth0
{
        AdvSendAdvert on;
        MinRtrAdvInterval 3;
        MaxRtrAdvInterval 10;
        AdvLinkMTU 1480;
        prefix 2001:470:1f0b:358::/64 {
                AdvOnLink on;
                AdvAutonomous on;
        };

        route ::/0 {
        };

        RDNSS 2001:470:20::2 {};

        DNSSL horus.local {
                FlushDNSSL on;
                AdvDNSSLLifetime 10;
        };

};

Mevcut ağ kartımızın üzerine sabit bir IPv6 tanımlaması yapmayı unutmuyoruz.

#IPv6
iface eth0 inet6 static
        address 2001:470:1f0b:358::1
        netmask 64

IPv6 için Türkiye\’de mevcut sağlayıcı bulunmadığı için tunelleme hizmeti Hurricane Electric LLC tarafından sağlanmaktadır.

Debian 9 Üzerine SOCKS5 Proxy Kurulumu

Dante SOCKS5 proxy aracının Debian 9 işletim sistemi üzerine nasıl kurulup yapılandırılacağını anlatacağım, çok basit bir şekilde istediğiniz sunucu üzerinden proxy çıkışı yapabileceksiniz. Kişiye özel hesap tanımlama imkanınız ve ip kısıtlaması gibi özellikleri de var.

Sisteme gerekli olan dante paketini dahil ediyoruz. Repoda güncel sürümü bulunmadığı için derlememiz daha iyi olacak ancak fark etmez bana diyenler olursa apt install dante-server ile kurulumu yapabilirler

apt update
apt install build-essential gcc make
wget http://www.inet.no/dante/files/dante-1.4.2.tar.gz
tar -xvf dante-1.4.2.tar.gz
cd dante-1.4.2
./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --disable-client --without-libwrap --without-bsdauth --without-gssapi --without-krb5 --without-upnp --without-pam
make
make install

Ardından servisini oluşturmamız gerekiyor bunun için nano /etc/init.d/danted de düzenleme yapacağız.

#! /bin/sh
### BEGIN INIT INFO
# Provides:          danted
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: SOCKS (v4 and v5) proxy daemon (danted)
# Description:       Starts or stops the Dante SOCKS proxy daemon.
#                    Its configuration is stored in the /etc/danted.conf file;
#                    see the danted.conf(5) manual page for details.
### END INIT INFO
#
# dante SOCKS server init.d file. Based on /etc/init.d/skeleton:
# Version:  @(#)skeleton  1.8  03-Mar-1998  [email protected]

. /lib/lsb/init-functions

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/sbin/sockd
NAME=danted
DESC="Dante SOCKS daemon"
PIDFILE=/var/run/$NAME.pid
CONFFILE=/etc/$NAME.conf

test -f $DAEMON || exit 0

set -e

# This function makes sure that the Dante server can write to the pid-file.
touch_pidfile ()
{
  if [ -r $CONFFILE ]; then
    uid="`sed -n -e 's/[[:space:]]//g' -e 's/#.*//' -e '/^user\.privileged/{s/[^:]*://p;q;}' $CONFFILE`"
    if [ -n "$uid" ]; then
      touch $PIDFILE
      chown $uid $PIDFILE
    fi
  fi
}
        
case "$1" in
  start)
    if ! egrep -cve '^ *(#|$)' \
        -e '^(logoutput|user\.((not)?privileged|libwrap)):' \
        $CONFFILE > /dev/null
    then
        echo "Not starting $DESC: not configured."
        exit 0
    fi
    echo -n "Starting $DESC: "
    touch_pidfile
    start-stop-daemon --start --quiet --oknodo --pidfile $PIDFILE \
        --exec $DAEMON -- -D
    echo "$NAME."
    ;;
  stop)
    echo -n "Stopping $DESC: "
    start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE \
        --exec $DAEMON
    echo "$NAME."
    ;;
  reload|force-reload)
    #
    #   If the daemon can reload its config files on the fly
    #   for example by sending it SIGHUP, do it here.
    #
    #   If the daemon responds to changes in its config file
    #   directly anyway, make this a do-nothing entry.
    #
     echo "Reloading $DESC configuration files."
     start-stop-daemon --stop --signal 1 --quiet --pidfile \
        $PIDFILE --exec $DAEMON -- -D
  ;;
  restart)
    #
    #   If the "reload" option is implemented, move the "force-reload"
    #   option to the "reload" entry above. If not, "force-reload" is
    #   just the same as "restart".
    #
    echo -n "Restarting $DESC: "
    start-stop-daemon --stop --quiet --pidfile $PIDFILE --exec $DAEMON
    sleep 1
    touch_pidfile
    start-stop-daemon --start --quiet --pidfile $PIDFILE \
      --exec $DAEMON -- -D
    echo "$NAME."
    ;;
  status)
    if ! egrep -cve '^ *(#|$)' \
        -e '^(logoutput|user\.((not)?privileged|libwrap)):' \
        $CONFFILE > /dev/null
    then
        configured=''
    else
        configured='1'
    fi
    if start-stop-daemon --status --quiet --pidfile $PIDFILE \
      --exec $DAEMON; then
        if [ -n "$configured" ]; then
            echo "$DESC running"
        else
            echo "$DESC running, yet not configured?!"
        fi
    else
        if [ -n "$configured" ]; then
            echo "$DESC not running"
        else
            echo "$DESC not configured"
        fi
    fi
    ;;
  *)
    N=/etc/init.d/$NAME
    # echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2
    echo "Usage: $N {start|stop|restart|force-reload|status}" >&2
    exit 1
    ;;
esac

exit 0

Danted uygulamasına erişim tanımlıyoruz.

chmod +x /etc/init.d/danted
update-rc.d danted defaults

Artık aşağıdaki servis komutlarını kullanabiliriz

systemctl status danted
systemctl start danted
systemctl stop danted

Kendi yapılandırmamızı yapacağımız için eski dosyayı yedekleyelim, ne olur ne olmaz bir yerde tekrar işimiz düşer google’da arama yaparak vakit kaybetmeyelim.

mv /etc/danted.conf /etc/danted.conf.bak

Yapılandırma dosyamızı nano /etc/danted.conf ile açalım ve aşağıdaki satırları ekleyelim.

logoutput: /var/log/socks.log
internal: eth0 port = 1080
external: eth0
clientmethod: none
socksmethod: username
user.privileged: root
user.notprivileged: nobody

client pass {
        from: 0.0.0.0/0 to: 0.0.0.0/0
        log: error connect disconnect
}
client block {
        from: 0.0.0.0/0 to: 0.0.0.0/0
        log: connect error
}

socks pass {
        from: 0.0.0.0/0 to: 0.0.0.0/0
        command: bind connect udpassociate
        log: error connect disconnect
        socksmethod: username
}

socks block {
        from: 0.0.0.0/0 to: 0.0.0.0/0
        log: connect error
}

Yapılandırmanın geçerli olabilmesi için servisi yeniden başlatalım.

systemctl restart danted

Şimdi sistemde var olan bir kullanıcı ile giriş yapılma imkanı var, tabii root kullanıcı ile giriş hoş olmaz bu sebeple yeni bir kullanıcı oluşturalım ve parola belirleyelim.

useradd mertcan -r
passwd mertcan

Ardından herhangi bir proxy aracı ile bağlantı sağlayıp kullanabilirsiniz.

Debian 9 Üzerine PHP 8.0 Kurulumu

Güncel PHP kullanmak ve yeniliklere hızlı adapte olmak isteyen arkadaşlar PHP sürümlerini 8.0 yapmak isterlerse debian 9 için aşağıdaki işlemleri yapmaları yeterli olacaktır.

apt -y install lsb-release apt-transport-https ca-certificates 
wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list

Güncel repo dahil edildikten sonra güncelleme komutu verilir.

apt update

Gerekli olan modüllerle birlikte sisteme kurulum gerçekleştirilir.

apt install php8.0
apt install php8.0-{bcmath,bz2,intl,gd,mbstring,mysql,zip,xml,fpm,redis}

Debian 9’da DHCP Sunucusu Nasıl Yapılandırılır?

Kullanılacak olan DHCP sunucusu içerisinde yapılacak ayarlamalar aşağıdaki gibidir. Kurulan DHCP sunucusu 67/UDP portundan hizmet verecek

root@debian:~# apt -y install isc-dhcp-server

Yapılandırma için uygulanacak adımlar

root@debian:~# nano /etc/default/isc-dhcp-server
DHCPDv4_CONF=/etc/dhcp/dhcpd.conf
# IPv6 Kullanılacaksa aktif edebilirsiniz.
INTERFACESv4="eth0"
#INTERFACESv6=""
root@debian:~# neno /etc/dhcp/dhcpd.conf
# özel bir domain adı belirleme
option domain-name "hastane.local";
# host adına veya IP adresine özel domain
option domain-name-servers hastane.local.lo;
authoritative;

# networkde dağıtılacak ip aralığı ve tanımlamalar
subnet 10.0.0.0 netmask 255.255.255.0 {
     # yönlendirici
     option routers 10.0.0.1;
     # subnet
     option subnet-mask 255.255.255.0;
     # networkde dağıtılacak ip aralığını belirtme
     range dynamic-bootp 10.0.0.200 10.0.0.254;
}
root@debian:~# systemctl restart isc-dhcp-server

Debian 9’da djbdns Nasıl Kurulur?

Djbdns debian repolarında bulunmuyor lakin kurulumu yapabiliriz tabii ki derleyeceğiz, farklı bir dns sunucusu keyfi yaşatacağından emin olabilirsiniz.

daemontools, daemontools-run ve ucspi-tcp paketlerine ihtiyacımız var kurulumlarını gerçekleştirelim.

apt install daemontools daemontools-run ucspi-tcp

djbdns kurabilmemiz için ayrıca derleyici araçları elinizde bulunması gerekiyor.

apt install build-essential

şimdi djbdns indirelim ve kaynaktan derleme işlemine başlayalım.

wget <http://cr.yp.to/djbdns/djbdns-1.05.tar.gz>
tar xf djbdns-1.05.tar.gz
cd djbdns-1.05/
echo gcc -O2 -include /usr/include/errno.h > conf-cc
make
make setup check

tinydns ve dnslog için gerekli kullanıcıları ekliyoruz.

useradd --no-create-home --shell /bin/false Gtinydns
useradd --no-create-home --shell /bin/false Gdnslog

tinydns temel ayarlamalarını aşağıdaki komut ile başlatıyoruz.

tinydns-conf Gtinydns Gdnslog /etc/tinydns <SERVER_IP>
ln -s /etc/tinydns /etc/service

Her şey tamamdır aşağıdaki komut ile çalışıyor mu diye kontrol edelim.

ps uax | grep tinydns

Aşağıdaki çıktının gözükmesi beklenir.

root      1657  0.0  0.0   4056   696 ?        S    21:05   0:00 supervise tinydns
tinydns   1659  0.0  0.0   4192  1168 ?        S    21:05   0:00 /usr/local/bin/tinydns
tinydns   1660  0.0  0.0   4072   676 ?        S    21:05   0:00 multilog t ./main

Kurulumunuz tamamlandı güle güle kullanabilirsiniz.

Debian 9 Temel Sunucu Ayarları

Sıfır bir debian kurduğumuzda temelde yaptığımız bir kaç değişikliğin olması gerekir. Bize ilerde kolaylık sağlayacak olan bu değişiklikleri genellikle temel sunucu ayarları olarak adlandırırız.

Kullanıcı oluşturma

# [stretch] isimli kullanıcı oluşturma
root@debian:~# adduser stretch 
Adding user `stretch' ...
Adding new group `stretch' (1001) ...
Adding new user `stretch' (1001) with group `stretch' ...
Creating home directory `/home/stretch' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:     # Kullanıcı parolası tanımlama
Retype new UNIX password:     # parola onayı
passwd: password updated successfully
Changing the user information for stretch
Enter the new value, or press ENTER for the default
		Full Name []:     # Bilgiler girilecek
		Room Number []:
		Work Phone []:
		Home Phone []:
		Other []:
Is the information correct? [Y/n] y
root@debian:~#

Kullanıcı yetkilendirme

root@debian:~# usermod -G adm stretch 
root@debian:~# nano /etc/pam.d/su
# admin grubuna eklemek için
auth   required   pam_wheel.so   group=adm

Tüm kullanıcılar için Alias tanımlama

root@debian:~# nano /etc/profile
# Bitime aşağıdakini ekle
alias ll='ls $LS_OPTIONS -l'
alias l='ls $LS_OPTIONS -lA'
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
# tekrar yükle
root@debian:~# source /etc/profile

Statik IP adresi ayarlama

root@debian:~# nano /etc/network/interfaces

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback
		# Birincil ağ kartı
		allow-hotplug ens3
		# DHCP ayarını kapatıyoruz
		#iface ens3 inet dhcp
		# birincil ağ kartında tanımladığımızı yazıyoruz.
		iface ens3 inet static
		# IP adresimiz
		address 10.0.0.30
		# network adresimiz
		network 10.0.0.0
		# subnet mask
		netmask 255.255.255.0
		# broadcast adresimiz
		broadcast 10.0.0.255
		# default gateway
		gateway 10.0.0.1
		# name server
		dns-nameservers 10.0.0.10
root@debian:~# reboot

IPv6 gerekli değilse kapatıyoruz.

root@debian:~# echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf 
root@debian:~# sysctl -p 
net.ipv6.conf.all.disable_ipv6 = 1

Servislerin durumunu kontrol etmek için

# Çalışan servislerin listesini gösterir.
root@debian:~# systemctl -t service 
UNIT                             LOAD   ACTIVE SUB     DESCRIPTION
console-setup.service            loaded active exited  Set console font and keym
cron.service                     loaded active running Regular background progra
dbus.service                     loaded active running D-Bus System Message Bus
[email protected]               loaded active running Getty on tty1
[email protected]              loaded active running Getty on ttyS0
[email protected]                loaded active exited  ifup for ens3
keyboard-setup.service           loaded active exited  Set the console keyboard
...
...
...
systemd-update-utmp.service      loaded active exited  Update UTMP about System
systemd-user-sessions.service    loaded active exited  Permit User Sessions
[email protected]                   loaded active running User Manager for UID 0

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

28 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.

# Tüm servislerin listelenmesi
root@debian:~# systemctl list-unit-files -t service 
UNIT FILE                              STATE
apt-daily-upgrade.service              static
apt-daily.service                      static
[email protected]                        enabled
bootlogd.service                       masked
bootlogs.service                       masked
bootmisc.service                       masked
...
...
...
urandom.service                        static
[email protected]                          static
x11-common.service                     masked

121 unit files listed.

İhtiyacınız yoksa bir hizmet için otomatik başlatma ayarını durdurun ve KAPATIN.

root@debian:~# systemctl stop atd 
root@debian:~# systemctl disable atd

Modulleri güncelleştirme

# listeleri güncelliyoruz
root@debian:~# apt update 
Ign:1 http://ftp.de.debian.org/debian stretch InRelease
Get:2 http://ftp.de.debian.org/debian stretch-updates InRelease [88.5 kB]
Hit:3 http://ftp.de.debian.org/debian stretch Release
Get:5 http://security.debian.org/debian-security stretch/updates InRelease [62.9 kB]
Get:6 http://security.debian.org/debian-security stretch/updates/main Sources [24.0 kB]
Get:7 http://security.debian.org/debian-security stretch/updates/main amd64 Packages [43.7 kB]
Get:8 http://security.debian.org/debian-security stretch/updates/main Translation-en [19.0 kB]
Fetched 238 kB in 1s (148 kB/s)
Reading package lists... Done
Building dependency tree
Reading state information... Done
6 packages can be upgraded. Run 'apt list --upgradable' to see them.

# sistemi güncelle
root@debian:~# apt -y upgrade

Bazı kullanıcılar ayrıcalıkları paylaşıyorsa kullanıcıların görevlerini ayırmak için Sudo’yu yapılandırın.

root@debian:~# apt -y install sudo

root@debian:~# visudo
# [stretch] kullanıcısı için tüm yetkilerin verilmesi
stretch   ALL=(ALL)   ALL
# [Ctrl + x] ile visudodan çıkış yapıyoruz.

Spesifik yetkilerin limitlendirilmesi

root@debian:~# visudo
# makinanın kapatılmasını engellemek
# Cmnd özelliğinden faydalanıyoruz.
Cmnd_Alias SHUTDOWN = /sbin/halt, /sbin/shutdown, \
/sbin/poweroff, /sbin/reboot, /sbin/init, /bin/systemctl
# [SHUTDOWN] ile makinenin kapatılmasını engelliyoruz.
stretch   ALL=(ALL)   ALL, !SHUTDOWN

Sudo için günlükler /var/log/auth.log içinde tutulur, ancak içinde birçok çeşit log vardır. Yani, bir dosyada sadece sudo kaydını tutmak isterseniz, aşağıdaki gibi bir satır eklemelisiniz.

root@debian:~# visudo
# satır sonuna ekliyoruz
Defaults syslog=local1

Log için tanımlamayı geçerli kılıyoruz.

root@debian:~# vi /etc/rsyslog.conf
# aşağıdaki eklemeyi yapıyoruz
local1.*                     /var/log/sudo.log

root@debian:~# systemctl restart rsyslog

Bash historyde kullanıcılar için kaydedilen komutların çalıştırıldıkları zaman bilgisinin gösterilmesi

nano /etc/profile.d/bash_history_date.sh
  export HISTTIMEFORMAT="%d/%m/%y %T " 

Host Yapılandırma

# Hostname'in FQDN (Fully Qualified Domain Name) olması gerekiyor. 
root@debian:~# hostname mail.mertcangokgoz.com
# ardından sunucu ip adresiyle alan adı tanımını yapıyoruz.
root@debian:~# nano /etc/hosts
   <sunucu_ip_adresi> mail.mertcangokgoz.com
# elle kontrol ediyoruz son durumu
root@debian:~# hostname -f 
10.0.0.2 mail.mertcangokgoz.com

Swappiness Ayarlanması

# gereksiz yere swapness aktif olmaması için
root@debian:~# nano /etc/sysctl.conf
   vm.swappiness = 1
# ayarın etkinleşmesi için
root@debian:~# sysctl -p

Debian 9 OpenJDK 9 Kurulumu

Repoda bulunmadığı için backports tarafının depolarını sisteme dahil edelim.

echo "deb http://ftp.debian.org/debian stretch-backports main" | \
      sudo tee --append /etc/apt/sources.list.d/stretch-backports.list > /dev/null

Paket listesini güncelleyelim

sudo apt-get update

Gereken paketleri kuralım

sudo apt-get install -t jessie-backports openjdk-9-jdk

Ön tanımlı java sürümünü değiştirelim. Eski sürümlerin sistemde bulunması dahilinde geçerlidir.

sudo update-java-alternatives -s java-1.9.0-openjdk-amd64

Debian 9 Üzerine R Nasıl Kurulur

R, istatistiksel ve grafik sunumunda uzmanlaşmış bilgi işlem çalışanları arasında popüler olan ve hızlı büyüyen açık kaynak kodlu bir programlama dili ve analiz ortamıdır. İstatistiksel Hesaplama için R Foundation tarafından desteklenir ve istatistikçi yazılımlar geliştirmek ve veri analizi yapmak için istatistikçiler ve veri madencileri tarafından çokça kullanılır.

Bu makalede, Debian 9 sisteminde R’nin nasıl kurulacağı konusunda size yardımcı olacğaım.

Gereksinimlar

  • En az 1G RAM ile Debian 9 bilgisayar. Makinenizde 1GB’den az RAM varsa, bir Swap(takas alanı) oluşturabilirsiniz.

R yükleme

Bu yazı yazılırken, R’nin en son kararlı sürümü 3.5.1 sürümüdür. Debian depolarından gelen R paketleri genellikle eskidir, bu yüzden CRAN tarafından desteklenen depoyu ekleyerek R’yi kuracağız.

HTTPS üzerinden yeni bir depo eklemek için gereken bağımlılıkları yükleyin

sudo apt install dirmngr apt-transport-https ca-certificates software-properties-common gnupg2

Aşağıdaki komutları çalıştırarak CRAN deposunu etkinleştirin ve sisteminize CRAN GPG anahtarını ekleyin


sudo apt-key adv --keyserver keys.gnupg.net --recv-key 'E19F5F87128899B192B1A2C2AD5F960A256A04AF'
sudo add-apt-repository 'deb https://cloud.r-project.org/bin/linux/debian stretch-cran35/'

Depo eklendikten sonra paket listesini güncelleyin ve R paketini yükleyin

sudo apt update
sudo apt install r-base

R sürümünü gösterecek aşağıdaki komutu çalıştırarak yüklemeyi doğrulayın

R --version

Çıktısı aşağıdaki gibi olacaktır

R version 3.5.1 (2018-07-02) -- "Feather Spray"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under the terms of the
GNU General Public License versions 2 or 3.
For more information about these matters see
http://www.gnu.org/licenses/.

R’nin bu kadar popüler olmasının temel nedenlerinden biri de, Kapsamlı R Arşiv Ağı (CRAN) aracılığıyla sunulan çok çeşitli eklenti ve paketlerdir. root olarak başlatıldığında, paketler tüm sistem kullanıcıları için global olarak kurulacak ve kullanılabilir olacaktır. Eğer sudo olmadan R’yi başlatırsanız, kullanıcı için kişisel bir kütüphane kurulacak ve kullanılacaktır.

R konsolunu root olarak açmak için

sudo -i R

Aşağıdaki tüm komutlar bir R konsolunda çalıştırılması gerekmektedir.

Stringr paketini kurmak için

install.packages("stringr")

Kurulum biraz zaman alacak ve tamamlandıktan sonra kütüphaneyi ekliyoruz

library(stringr)

Kullanılabilir CRAN Paketleri oldukça fazladır bunlardan istediklerinizi kurabilir ve install.packages() ile yükleyebilirsiniz.

Debian 9 Üzerine DNS-Over-HTTPS Nasıl Kurulur

DNS sorgularının HTTPS protokolü üzerinden ulaştırılması için kullanılmaktadır. Normal DNS aksine daha güvenlidir.

Cloudflared kurulumu

Bu işlem için sunucumuza 3.parti bir yazılım olan cloudflared dahil ediyoruz.

wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
apt-get install ./cloudflared-stable-linux-amd64.deb
cloudflared -v

Sistemin başlangıcında açabilmek için buna uygun bir yapılandırma yapmamız gerekmektedir. Kullanıcı oluşturarak başlıyoruz.

useradd -s /usr/sbin/nologin -r -M cloudflared

cloudflared için gerekli olan /etc/default/cloudflared yapılandırma dosyasını düzenliyoruz.

# Commandline args for cloudflared
CLOUDFLARED_OPTS=--port 5053 --upstream 

Ayarladığımız yapılandırma dosyasına oluşturduğumuz kullanıcıdan izin veriyoruz.

chown cloudflared:cloudflared /etc/default/cloudflared
chown cloudflared:cloudflared /usr/local/bin/cloudflared

Ardından servisinin yapılandırılması için /lib/systemd/system/cloudflared.service hizmet dosyasını oluşturuyoruz.

[Unit]
Description=cloudflared DNS over HTTPS proxy
After=syslog.target network-online.target

[Service]
Type=simple
User=cloudflared
EnvironmentFile=/etc/default/cloudflared
ExecStart=/usr/local/bin/cloudflared proxy-dns $CLOUDFLARED_OPTS
Restart=on-failure
RestartSec=10
KillMode=process

[Install]
WantedBy=multi-user.target

Ardından systemd üzerinden gerekli işlemleri yapalım.

sudo systemctl enable cloudflared
sudo systemctl start cloudflared
sudo systemctl status cloudflared

Çalışıp çalışmadığını kontrol ediyoruz.

dig @127.0.0.1 -p 5053 google.com


; <<>> DiG 9.10.3-P4-Ubuntu <<>> @127.0.0.1 -p 5053 google.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 65181
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1536
;; QUESTION SECTION:
;google.com.            IN  A

;; ANSWER SECTION:
google.com.     299 IN  A   243.65.127.221

;; Query time: 3 msec
;; SERVER: 127.0.0.1#5053(127.0.0.1)
;; MSG SIZE  rcvd: 65