Kategori arşivi: Sistem Yönetimi

Sunucu yapılandırma, devops araçları, netops araçları, chatops hakkında fikirler, uygulama yapılandırma ve sistemsel ipuçları, kontrol panel kurulumları

Pgbackrest ile PostgreSQL’de full ve incremental yedek nasıl alınır?

PostgreSQL veritabanlarında veri güvenliği ve sürekliliği kritik bir öneme sahiptir. Bu noktada pgBackRest, açık kaynaklı bir yedekleme ve kurtarma çözümü olarak öne çıkmaktadır. Geleneksel yedekleme araçlarının aksine, pgBackRest performans, güvenilirlik ve esneklik konularında PostgreSQL yöneticilerine benzersiz avantajlar sağlar.

pgBackRest, veritabanı yedeklemelerinde tam (full) ve artımlı (incremental) yedekleme seçenekleri sunarak veri yönetimini kolaylaştırır. Tam yedekleme tüm veritabanı içeriğini kapsarken, artımlı yedekleme yalnızca son yedeklemeden bu yana değişen verileri kaydeder. Bu yaklaşım, hem depolama alanından tasarruf sağlar hem de yedekleme süresini önemli ölçüde kısaltır.

pgBackRest’in kullanımı basit yapılandırma dosyaları ve net komutlarla oldukça pratiktir.

Ubuntu/debian sistemlere aşağıdaki gibi dahil edilebilir.

apt install pgbackrest
Bash

Ardından aşağıdaki /etc/pgbackrest.conf dosyasında gerekli yapılandırmalar yapılır.

[global]
# Performans ve İşlem Ayarları
process-max=2                 # Paralel işlem sayısı
start-fast=y                  # Hızlı başlangıç
stop-auto=y                   # Otomatik durdurma
log-path=/mnt/pgbackrest/log  # Log dosyası konumu
log-level-file=warn           # Dosya log seviyesi
log-level-console=detail      # Konsol log seviyesi
backup-standby=n              # Standby sunucudan yedekleme
resume=n                      # Yarım kalan yedeklemeleri devam ettirme
exclude=log/                  # Dışarıda bırakılacak dizinler
archive-async=y               # Asenkron arşivleme
archive-timeout=360           # Arşivleme zaman aşımı

# S3 Bulut Deposu Yapılandırması
repo1-type=s3
repo1-s3-bucket=<BUCKET_ADI>
repo1-path=<KLASÖR>
repo1-s3-endpoint=s3.amazonaws.com
repo1-s3-region=eu-west-1
repo1-s3-key=<ANAHTAR>
repo1-s3-key-secret=<GİZLİ_ANAHTAR>
repo1-retention-full=2        # Full yedek sayısı
repo1-retention-diff=1        # Diferansiyel yedek sayısı

# Yerel Yedek Deposu
repo2-path=/backup/pgbackrest/repo
repo2-retention-full=2
repo2-retention-diff=1

# Şifreleme Ayarları
repo1-cipher-type=aes-256-cbc
repo1-cipher-pass=<ŞİFRE>
repo2-cipher-type=aes-256-cbc
repo2-cipher-pass=<ŞİFRE>

# PostgreSQL Stanza Tanımı
[pg16_pg]
pg1-path=/mnt/data/16/main   # Veritabanı veri dizini
pg1-port=5432               # PostgreSQL portu
Plaintext

Yapılandırmayı kayıt ettikten hemen sonra tabii ki bu yapılandırmayı PostgreSQL için geçerli kılmalıyız ki WAL kayıtlarınıda alalım,

-- Arşivleme modunu etkinleştirin
ALTER SYSTEM SET archive_mode = on;
ALTER SYSTEM SET archive_command = 'pgbackrest --stanza=pg16_pg archive-push %p';

-- Yapılandırmayı yeniden yükleyin
SELECT pg_reload_conf();
SQL

Ardından WAL arşivlerini almaya pg başlayacak bu noktada hızlı olmak lazım çünkü çok WAL birikmemesi gerekiyor.

pgbackrest --stanza=pg16_pg stanza-create && pgbackrest --stanza=pg16_pg check  --log-level-console=info
Bash

İlk sefer full yedek alalım

pgbackrest --stanza=pg16_pg --log-level-console=info --type=full backup
Bash

Artımlı yedek almak için

pgbackrest --stanza=pg16_pg --log-level-console=info --type=incr backup
Bash

NVIDIA Sürücüsünü Kullanımınıza Göre Özelleştirin

NVIDIA’nın bildiğiniz gibi çok sistem kaynağı tüketen bir yazılımı var bunu kurmadan pek sürücüleri kullanmak için biraz tırmalamak gerekiyor, ama bu sorunu çözen çok güzel bir araç var NVCleanstall adındaki bu uygulama ile sadece işinize yarar bileşenleri kurup geçebilirsiniz.

İhtiyacınız olmayan (veya istemediğiniz) bileşenleri kaldırarak NVIDIA GeForce Driver paketini özelleştirmenizi sağlar. Bu sadece işleri düzenli tutmakla kalmaz, aynı zamanda disk kullanımını ve bellek kullanımını da azaltır.

NVIDIA’nın sürücüleri donanım için gerekli olduğunu düşündüğü bileşenlerden oluşur ve ürünün kendisinin bir uzantısını oluşturur. Bu nedenle, “özel yükleme” seçeneği bile bu paketlerin seçimlerini kaldırmanıza izin vermez.

Özellikleri

  • İhtiyacınız olmayan tüm özellikleri kaldırın, disk ve bellek kullanımını azaltın
  • Seçilmemiş sürücü bileşenlerinin indirilmesini atlayın, daha az bant genişliği kullanın
  • Özel olarak indirilen yükleyici paketleriyle de çevrimdışı çalışır
  • Özelleştirilmiş yükleyici taşınabilirdir ve daha sonra kullanılmak üzere kaydedilebilir veya hemen başlatılabilir
  • Her bileşenin ne yaptığını açıklayan ayrıntılı yardım metinleri
  • Otomatik bağımlılık kontrolü
  • Kurulum gerektirmez
  • Windows 7, Windows 8, Windows 10 üzerinde çalışır. Hem 32 bit hem de 64 bit işletim sistemleri desteklenir

NVCleanstall Nasıl Kurulur?

Önce indirdiğiniz uygulamayı çalıştırın karşınıza aşağıdaki gibi bir ekran gelecek, burada ne yapmanız gerektiği çok açık aslında sürücüyü otomatik bulacak size diyecek ki aha bu

Next diyerek devam ediyorsunuz, burada size neler lazım onları kurun fazla bir şeye gerek yok, Ben burada ön tanımlı olanları seçmiyorum “Minimum” seçeneğini seçiyorum ve en üstteki ikisini seçerek devam ediyoruz.

NVIDIA’nın bizden bilgi toplamasını kapatıyoruz, burada veri toplama işlemi yaparken bellek ve işlemciyi çok kullanıyor ayrıca makinenin zaman zaman uyku moduna geçmesinede engel olduğu durumlar oluyor. Aşağıdaki gibi işaretliyoruz.

Kendinize göre özelleştirdiğiniz sürücünüzü artık gönül rahatlığı ile kurabilirsiniz.

“Install” diyerek oluşturduğunuz paketi kurabilirsiniz, veya farklı bilgisayarlarda kullanmak için “Build Package” diyerek tek bir kurulum paketi oluşturabilir istediğiniz kadar makineye bu kurulumu yapabilirsiniz.

NVCleanstall Nasıl İndirilir?

https://www.techpowerup.com/nvcleanstall adresinden indirebilirsiniz, indirmede bir sorun yaşarsanız birebir aynı dosyayı kendi sunucumda’ da mirrorladım. https://downloads.mertcangokgoz.com/tools/NVCleanstall_1.16.0.exe adresini de kullanabilirsiniz.

Yüksek Performanslı NTP Sunucusu Nasıl Kurulur?

Burada sizlere pek çok NTP sunucusu kurulum şeklini anlattım, tabi bunlar tamamı yerelde kişisel amaçlar için kullanmaya yönelikti. Şimdi ise halka açık bir şekilde NTP nasıl yapılandırırız ve kullanıma açarız onu göstermek istiyorum.

Gerekenler

  • Ubuntu 22.04/24.04 işletim sistemli 2 core 2gb ram bir makine
  • chrony uygulaması

Makineyi güncelleyin NTP sunucusu olarak klasik ntp yapılandırmayacağız onun yerine daha performanslı olan chrony kullanıcaz. DDoS saldırıları dışında performans sorunu çekmeyeceksiniz.

apt install chrony
ShellScript

Bu sisteme iki adet uygulama ekleyecek

  • chronyd – Ağ Zaman Protokolü aracılığıyla senkronize edilecek ve hizmet verecek gerçek daemon
  • chronyc – chrony daemon için komut satırı arayüzü

Yüklediğiniz an kullanabilirsiniz onda sıkıntı yok. Ancak genele açık bir sunucu olarak yapılandırmak isterseniz /etc/chrony/chrony.conf dosyasını düzenlemeniz gerekiyor. Ben sizin için hazırladım aşağıdakini direk kullanabilirsiniz.

# Welcome to the chrony configuration file. See chrony.conf(5) for more
# information about usable directives.

# Include configuration files found in /etc/chrony/conf.d.
confdir /etc/chrony/conf.d

# Pools
pool ntp.ubuntu.com        iburst maxsources 4
pool 0.ubuntu.pool.ntp.org iburst maxsources 1
pool 1.ubuntu.pool.ntp.org iburst maxsources 1
pool 2.ubuntu.pool.ntp.org iburst maxsources 2

# Servers
server 0.pool.ntp.org iburst
server 1.pool.ntp.org iburst
server 2.pool.ntp.org iburst
server 3.pool.ntp.org iburst
server time.windows.com iburst
server time.apple.com iburst
server time.google.com iburst
server time.facebook.com iburst
server time.cloudflare.com iburst
server time.nist.gov iburst

# Dirs
sourcedir /run/chrony-dhcp
sourcedir /etc/chrony/sources.d
keyfile /etc/chrony/chrony.keys
driftfile /var/lib/chrony/chrony.drift
ntsdumpdir /var/lib/chrony
logdir /var/log/chrony

rtcsync
allow
clientloglimit 100000000
leapsectz right/UTC
maxupdateskew 100.0
makestep 1.0 3
fallbackdrift 16 19

# Rate limit
ratelimit interval 1 burst 16
ntsratelimit interval 3 burst 1
ShellScript

Kayıt edip çıkış yapın sonrasında deamon’u yeniden systemctl restart chrony komutu ile başlatın. Biraz bekledikten sonra kendisine gelir aşağıdaki gibi bir çıktı görürseniz çalışıyor demektir.

root@app:~# systemctl status chrony
chrony.service - chrony, an NTP client/server
     Loaded: loaded (/lib/systemd/system/chrony.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2024-06-07 21:59:02 UTC; 1 week 2 days ago
       Docs: man:chronyd(8)
             man:chronyc(1)
             man:chrony.conf(5)
    Process: 1060 ExecStart=/usr/lib/systemd/scripts/chronyd-starter.sh $DAEMON_OPTS (code=exited, status=0/SUCCESS)
   Main PID: 1069 (chronyd)
      Tasks: 2 (limit: 2218)
     Memory: 38.5M
        CPU: 3d 5h 36min 54.341s
     CGroup: /system.slice/chrony.service
             ├─1069 /usr/sbin/chronyd -F 1
             └─1070 /usr/sbin/chronyd -F 1

Jun 07 21:59:02 app systemd[1]: Starting chrony, an NTP client/server...
Jun 07 21:59:02 app chronyd[1069]: chronyd version 4.2 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +SIGND +ASYNCDNS +NTS +SECHASH +IPV6 -DEBUG)
Jun 07 21:59:02 app chronyd[1069]: Frequency -26.534 +/- 0.179 ppm read from /var/lib/chrony/chrony.drift
Jun 07 21:59:02 app chronyd[1069]: Using right/UTC timezone to obtain leap second data
Jun 07 21:59:02 app chronyd[1069]: Loaded seccomp filter (level 1)
Jun 07 21:59:02 app systemd[1]: Started chrony, an NTP client/server.
Jun 07 21:59:13 app chronyd[1069]: Selected source 2a03:2880:ff0c::123 (time.facebook.com)
Jun 07 21:59:13 app chronyd[1069]: System clock TAI offset set to 37 seconds
Jun 12 20:32:23 app chronyd[1069]: Source 2a0f:6580:110:171::66 replaced with 2a03:2100:0:2a::3c0:2 (2.pool.ntp.org)
ShellScript

Bakalım hakikaten sağlıklı çalışıyor mu

root@app:~# chronyc -n tracking
Reference ID    : 44A63DFF (2a03:2880:ff0c::123)
Stratum         : 2
Ref time (UTC)  : Mon Jun 17 15:34:28 2024
System time     : 0.000000002 seconds slow of NTP time
Last offset     : -0.000081798 seconds
RMS offset      : 0.000074264 seconds
Frequency       : 26.423 ppm slow
Residual freq   : -0.010 ppm
Skew            : 0.032 ppm
Root delay      : 0.014898589 seconds
Root dispersion : 0.001159322 seconds
Update interval : 1036.6 seconds
Leap status     : Normal
ShellScript

Gayet güzel gözüküyor, zamanı yavaşlatmış ve ilk güncellemesini de yapmış, ayrıca aradaki senkron süreside oldukça kısa peki hangi kaynakları kullanıyor buna da bir bakalım.

root@app:~# chronyc -N 'sources -a -v'

  .-- Source mode  '^' = server, '=' = peer, '#' = local clock.
 / .- Source state '*' = current best, '+' = combined, '-' = not combined,
| /             'x' = may be in error, '~' = too variable, '?' = unusable.
||                                                 .- xxxx [ yyyy ] +/- zzzz
||      Reachability register (octal) -.           |  xxxx = adjusted offset,
||      Log2(Polling interval) --.      |          |  yyyy = measured offset,
||                                \     |          |  zzzz = estimated error.
||                                 |    |           \
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^- 0.pool.ntp.org                2   8   377   449  -6379us[-6379us] +/-   61ms
^+ 1.pool.ntp.org                3   9   377   428  -2709ns[-2709ns] +/- 8952us
^? 2.pool.ntp.org                0  10   377     -     +0ns[   +0ns] +/-    0ns
^? 3.pool.ntp.org                0  10   377     -     +0ns[   +0ns] +/-    0ns
^- time.windows.com              3  10   377  1003    +73us[-8987ns] +/-   55ms
^- time.apple.com                1  10   377   543  +1268us[+1268us] +/-   24ms
^- time.google.com               1  10   377   488  +1266us[+1266us] +/-   28ms
^* time.facebook.com             1  10   177   987    +11us[  -70us] +/- 7602us
^- time.cloudflare.com           3  10   377   894  -2859us[-2859us] +/-   36ms
^- time.nist.gov                 1  10   377   472  +5300us[+5300us] +/-   74ms
^- ntp.ubuntu.com                2  10   377   402   +428us[ +428us] +/-   31ms
^- ntp.ubuntu.com                2  10   377     4  +1540us[+1540us] +/-   32ms
^- ntp.ubuntu.com                2  10   377   853   -197us[ -197us] +/-   31ms
^- ntp.ubuntu.com                2  10   377    86   +970us[ +970us] +/-   31ms
^- 0.ubuntu.pool.ntp.org         2  10   377   958   +976us[ +976us] +/-   39ms
^- 1.ubuntu.pool.ntp.org         3   8   377    69   -863us[ -863us] +/-  121ms
^- 2.ubuntu.pool.ntp.org         3   9   377   253    +97us[  +97us] +/-   30ms
^- 2.ubuntu.pool.ntp.org         3   8   377   170  +6883us[+6883us] +/-  236ms
ShellScript

Artık halka açık bir şekilde kullanabileceğiniz NTP sunucunuz hazır, istediğiniz gibi kullanılmasını sağlayabilirsiniz. Burada DDoS harici sıkıntı yaşayacağınızda bir sıkıntı bulunmuyor.

Linux’te Software RAID Nasıl Yapılır?

RAID (açılımı Redundant Array of Inexpensive Disks), farklı disklerdeki birden fazla bölümü RAID dizisi olarak da bilinen büyük bir sanal aygıtta birleştirmek için kullanılan bir yöntemdir. Bunun çeşitli avantajları vardır:

  1. Her birini farklı bir bağlama noktası dizinine ayrı ayrı bağlamak yerine, mevcut tüm sabit diskleriniz kadar büyük tek bir dosya sistemi oluşturabilirsiniz.
  2. Çoğu durumda, bir RAID cihazından okuma ve yazma tek bir diske erişmekten daha hızlıdır, çünkü okunan veya yazılan veriler birden fazla sürücüye yayılmıştır.
  3. Doğru yapılandırmayla, bir RAID cihazındaki veriler sabit disklerden herhangi biri arızalansa bile hayatta kalabilir. Bu, yedek bilgilerin tüm sürücülere yayılmasıyla gerçekleştirilir ve bir miktar disk alanı pahasına yapılır.

Linux’ta, RAID dizileri için çeşitli seçenekler vardır. Bu bölümde, Linux’ta yazılım RAID’ı nasıl yapılandıracağınızı ve yöneteceğinizi göstereceğim.

Yazılım RAID’ı için Gereksinimler

Linux’ta yazılım RAID’ı oluşturmak için, Linux çekirdeğinin RAID desteğini etkinleştirmeniz gerekir. Bu, çoğu Linux işletim sisteminde desteklendiği anlamını taşır. Ayrıca, RAID dizilerini oluşturmak için kullanacağınız araçları da yüklemeniz gerekebilir. Bu araçlar, çoğu Linux dağıtımında mdadm paketi altında bulunur.

Debian tabanlı bir sistemde, mdadm paketini şu komutla yükleyebilirsiniz:

sudo apt install mdadm
ShellScript

RAID Array Oluşturma

Sistemimizde kaç tane disk olduğunu görmek için lsblk komutunu kullanabiliriz:

lsblk
ShellScript

elimizde raid yapabileceğimiz 3 adet 1TB boyutunda disk gözüküyor bunları raid yapmak için kullanacağız.

root@mail:/# lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT
NAME     SIZE FSTYPE            TYPE  MOUNTPOINT
loop1   73.9M                   loop  /snap/core22/864
loop2  152.1M                   loop  /snap/lxd/26200
loop3   49.8M                   loop  /snap/snapd/18596
loop4  152.1M                   loop  /snap/lxd/26093
loop5   40.9M                   loop  /snap/snapd/20290
loop6   74.1M                   loop  /snap/core22/1033
sda    931.5G                   disk
sdb    111.8G                   disk
├─sdb1     1M                   part
└─sdb2 111.8G ext4              part  /
sdc    931.5G                   disk
sdd    931.5G                   disk
ShellScript

Bir array oluşturmak için kullanılan aygıtları bulduktan sonra, RAID kurulumu için meta verileri tutan süper
bloklarını sıfırlamalıyız yoksa inode hataları ile karşılaşırız çünkü raid ile diski genişletmiş olacağız.

Bunu sıfırlamak RAID meta verilerini kaldırır ve normale sıfırlar:

sudo mdadm --zero-superblock /dev/sd{a,c,d}
ShellScript

Şimdi, RAID dizisini oluşturmak için mdadm komutunu kullanabiliriz.

sudo mdadm --create --verbose /dev/md0 --level=0 --raid-devices=3 /dev/sd{a,c,d}
ShellScript

Bu komut, RAID dizisini oluşturur ve /dev/md0 adlı bir aygıt dosyası oluşturur. Bu aygıt dosyası, RAID dizisine erişmek için kullanacağımız şeydir. Bu komut ayrıca, RAID dizisinin RAID 0 olarak yapılandırılacağını ve üç diskten oluşacağını belirtir.

root@mail:/# cat /proc/mdstat
Personalities : [raid0] [linear] [multipath] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid0 sda[2] sdd[1] sdc[0]
      2929890816 blocks super 1.2 512k chunks

unused devices: <none>
ShellScript

Ardından oluşturduğumuz RAID dizisini bir dosya sistemiyle biçimlendirmemiz gerekir. Bu, RAID dizisini kullanmaya başlamadan önce yapılması gereken bir adımdır.

sudo mkfs.ext4 -F /dev/md0
ShellScript

Dosya sistemi oluşturulduktan sonra, RAID dizisini bir dizine bağlayabiliriz. Bu dizin, RAID dizisine erişmek için kullanacağımız şeydir.

sudo mkdir -p /mnt/data
sudo mount /dev/md0 /mnt/data
ShellScript

RAID Düzenini Kayıt Altına Alma

RAID dizisini oluşturduktan sonra, RAID düzenini kayıt altına almak için mdadm komutunu kullanabiliriz.

sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
ShellScript

Bu, /etc/mdadm/mdadm.conf dosyasına bir satır ekler. Bu, RAID dizisini her zaman otomatik olarak oluşturacağı anlamına gelir.

Daha sonra, initramfs ya da başlangıç RAM dosya sistemini güncelleyebilirsiniz, böylece dizi erken önyükleme işlemi sırasında kullanılabilir olacaktır:

sudo update-initramfs -u
ShellScript

RAID Array’i fstab’a eklemek

RAID dizisini oluşturduktan sonra, onu /etc/fstab dosyasına ekleyebiliriz.

/dev/md0 /mnt/data ext4 defaults,nofail,discard 0 0
ShellScript

Bu, RAID dizisini her zaman otomatik olarak mount edecektir. nofail seçeneği, RAID dizisi başlatılamazsa, sistemin yine de başlamasını sağlar. discard seçeneği, RAID dizisindeki dosyaları silerken TRIM komutunu kullanacağını belirtir.

RAID Array’e Disk Eklemek

RAID dizisine disk eklemek için, mdadm komutunu kullanabiliriz.

mdadm /dev/md0 --add /dev/sdc1
ShellScript

Bu, RAID dizisine /dev/sdc1 adlı bir disk ekler. Bu, RAID dizisini genişletir ve RAID dizisine eklenen diskteki tüm verileri siler.

RAID Dizisinden Disk Kaldırmak

RAID dizisinden disk kaldırmak için, mdadm komutunu kullanabiliriz.

mdadm /dev/md0 --fail /dev/sda1 --remove /dev/sda1
ShellScript

Bu komut, /dev/sda1 adlı bir disk kaldırır. Bu, RAID dizisini küçültür ve RAID dizisinden kaldırılan diske erişilemez hale getirir. Diskteki veriler silinmez ancak veriler kullanılamaz hale gelir. Bu, RAID dizisinden bir disk kaldırmak için kullanılan en güvenli yöntemdir. Ayrıca hatalı diski kaldırmak için de kullanılır.

RAID Dizisini Tamamen Kaldırmak

RAID dizisini tamamen kaldırmak için, mdadm komutunu kullanabiliriz.

mdadm --stop /dev/md0
mdadm --remove /dev/md0
ShellScript

Bu, RAID dizisini kaldırır ve RAID dizisindeki tüm verileri siler.

UYARI

mdadm’in RAID 5 dizilerini oluşturma şekli nedeniyle, dizi hala oluşturulurken, dizideki yedeklerin sayısı yanlış gözükür.

Bu, /etc/mdadm/mdadm.conf dosyasını güncellemeden önce dizinin mount’unun bitmesini beklemeniz gerektiği anlamı taşır. Dizi oluşturulmaya devam ederken yapılandırma dosyasını güncellerseniz, sistem dizinin durumu hakkında yanlış bilgiye sahip olacağı ve önyükleme sırasında diziyi doğru adla otomatik birleştiremeyeceği anlamına gelir.

RAID dizisini oluşturduktan sonra, RAID dizisini oluşturan disklerden herhangi biri arızalanırsa, RAID dizisi bozulur. Bu, RAID dizisindeki tüm verilerin kaybedilmesine neden olur. Bu nedenle, her an bir planınız olmalıdır.

CVE-2024-3094 Kontrol Amaçlı Ansible Task

Toplu bütün makinelerde Zafiyet kontrolü yapmak isteyenler için CVE-2024-3094 xz sürüm kontrolü yapan ve çıktı basan ansible taskı

- hosts: all
  tasks:
  - name: Run CVE-2024-3094 vulnerability check script
    shell: |
      set -eu

      echo "Checking system for CVE-2024-3094 Vulnerability..."
      echo "https://nvd.nist.gov/vuln/detail/CVE-2024-3094"

      # find path to liblzma used by sshd
      # adapted from https://www.openwall.com/lists/oss-security/2024/03/29/4
      sshd_path=$(whereis -b sshd | awk '{print $2}')
      path=$(ldd "$sshd_path" 2>/dev/null | grep -o '/.*liblzma[^ ]*' | head -1)

      if [ -z "$path" ]; then
          echo
          echo "Probably not vulnerable (liblzma not found)"
          exit
      fi

      # check for function signature
      # adapted from https://www.openwall.com/lists/oss-security/2024/03/29/4
      echo
      echo "Checking for function signature in liblzma..."
      if hexdump -ve '1/1 "%.2x"' "$path" | grep -q 'f30f1efa554889f54c89ce5389fb81e7000000804883ec28488954241848894c2410'; then
          echo "Function signature in liblzma: VULNERABLE"
      else
          echo "Function signature in liblzma: OK"
      fi

      # check xz version
      echo
      echo "Checking xz version..."
      xz_version=$(xz --version | head -n1 | awk '{print $4}')
      if [[ "$xz_version" == "5.6.0" || "$xz_version" == "5.6.1" ]]; then
          echo "xz version $xz_version: VULNERABLE"
      else
          echo "xz version $xz_version: OK"
      fi
    register: script_output

  - debug:
      var: script_output.stdout_lines
ShellScript

perl: error while loading shared libraries libcrypt.so.1 cannot open shared object file No such file or directory

Özellikle Türkiye’de sanal sunucu satın aldığınızda imajlar oldukça eski olur, Debian 9.6 ve Debian 10 serisiyle karşılaşabilirsiniz. Zaten Debian 9.6 çöp olduğu için imkanınız varsa Debian 10 kurulumu yaparsınız. Daha sonra Debian 12 yükseltmek istediğinizde başarılı bir şekilde işlem devam ederken aşağıdaki gibi bir hata ile karşılaşabilirsiniz.

Setting up libc6:amd64 (2.36-9+deb12u3) ...
/usr/bin/perl: error while loading shared libraries: libcrypt.so.1: cannot open shared object file: No such file or directory
dpkg: error processing package libc6:amd64 (--configure):
 installed libc6:amd64 package post-installation script subprocess returned error exit status 127
Errors were encountered while processing:
 libc6:amd64
E: Sub-process /usr/bin/dpkg returned an error code (1)

Çözüm olarak ise aşağıdakini yapmanız yeterlidir.

cd /tmp
apt download libcrypt1
dpkg-deb -x libcrypt1_1*.deb  .
cp -av lib/x86_64-linux-gnu/* /lib/x86_64-linux-gnu/
apt --fix-broken install

Ardından yükseltme sürecinize kaldığınız yerden devam edebilirsiniz. İsterseniz’de Debian 10 Buster’ı Debian 11 Bullseye’a Nasıl Yükseltiriz? makalemden faydalanabilirsiniz.

sm-msp-queue stat=Deferred: Connection refused by 127.0.0.1

Sunucunuz üzerinden e-posta atmıyorsunuz ama bir paket yüzünden sendmail ve buna bağlı servisler kurulduysa, aşağıdaki hata ile karşılaşıyorsanız.

Oct  6 13:41:21 localhost sm-msp-queue[3756745]: 3969cQlj3748691: to=root, ctladdr=root (0/0), delay=01:02:55, xdelay=00:00:01, mailer=relay, pri=390300, relay=[127.0.0.1] [127.0.0.1], dsn=4.0.0, stat=Deferred: Connection refused by [127.0.0.1]
Oct  6 13:41:23 localhost sm-msp-queue[3756745]: 3969Tipd3748180: to=root, ctladdr=root (0/0), delay=01:11:39, xdelay=00:00:02, mailer=relay, pri=390300, relay=[127.0.0.1] [127.0.0.1], dsn=4.0.0, stat=Deferred: Connection refused by [127.0.0.1]
Oct  6 13:41:24 localhost sm-msp-queue[3756745]: 3969dO3j3749010: to=root, ctladdr=root (0/0), delay=01:02:00, xdelay=00:00:01, mailer=relay, pri=390345, relay=[127.0.0.1] [127.0.0.1], dsn=4.0.0, stat=Deferred: Connection refused by [127.0.0.1]
Oct  6 13:41:25 localhost sm-msp-queue[3756745]: 3969dOrk3749008: to=root, ctladdr=root (0/0), delay=01:02:01, xdelay=00:00:01, mailer=relay, pri=390345, relay=[127.0.0.1] [127.0.0.1], dsn=4.0.0, stat=Deferred: Connection refused by [127.0.0.1]
Oct  6 13:41:26 localhost sm-msp-queue[3756745]: 3969dOTg3749006: to=root, ctladdr=root (0/0), delay=01:02:02, xdelay=00:00:01, mailer=relay, pri=390345, relay=[127.0.0.1] [127.0.0.1], dsn=4.0.0, stat=Deferred: Connection refused by [127.0.0.1]
Oct  6 13:41:27 localhost sm-msp-queue[3756745]: 3969dOtm3749007: to=root, ctladdr=root (0/0), delay=01:02:03, xdelay=00:00:01, mailer=relay, pri=390345, relay=[127.0.0.1] [127.0.0.1], dsn=4.0.0, stat=Deferred: Connection refused by [127.0.0.1]
Oct  6 13:41:28 localhost sm-msp-queue[3756745]: 3969dOiW3749009: to=root, ctladdr=root (0/0), delay=01:02:04, xdelay=00:00:01, mailer=relay, pri=390372, relay=[127.0.0.1] [127.0.0.1], dsn=4.0.0, stat=Deferred: Connection refused by [127.0.0.1]
Oct  6 13:41:29 localhost sm-msp-queue[3756745]: 3969TMPe3748149: to=root, ctladdr=root (0/0), delay=01:12:07, xdelay=00:00:01, mailer=relay, pri=390393, relay=[127.0.0.1] [127.0.0.1], dsn=4.0.0, stat=Deferred: Connection refused by [127.0.0.1]
Oct  6 13:41:30 localhost sm-msp-queue[3756745]: 3969bNxq3748611: to=root, ctladdr=root (0/0), delay=01:04:07, xdelay=00:00:01, mailer=relay, pri=390393, relay=[127.0.0.1] [127.0.0.1], dsn=4.0.0, stat=Deferred: Connection refused by [127.0.0.1]

Özellikle bu hata sebepli diskiniz doluyor olabilir, bunu kalıcı olarak durdurmak için önce mail kuyruğunu temizliyoruz.

rm /var/spool/mqueue/*
rm /var/spool/mqueue-client/*

Daha sonra buna bağlı cronları kaldırmanız lazım bunun içinde /etc/cron.d/ içerisinde sendmail ile alakalı ne kadar conf dosyası varsa kaldırın servisi yeniden başlatın.

systemctl restart cron

Daha sonra şişen logları da sıfırlamak için aşağıdaki adımı izleyin, işiniz bitti hadi h.o

echo > mail.err
echo > mail.info
echo > mail.log
echo > mail.warn

Gizli Olan PPPoE Modemden Nasıl Öğrenilir?

Yıl olmuş 2023 hala bazı ISP’ler bu PPPoE giriş bilgilerini saklıyor, hangi mantıkla bunu yapıyorlar ben açıkçası pek anlamadım, müşteriye başka cihaz kullandırmak istemiyorlar ama neden? Bu sorunun cevabı bende yok. Biliyorsanız yorum yaparsanız sevinirim.

Neyse ki bu bilgileri alabileceğimiz bir yöntem var, biraz linux bilmeniz yeterli öyle çok zor bir işlemde değil.

Gerekenler

  1. Raspberry Pi/Linux Makine/Sanal Linux Makine artık hangisini kullanırsanız.
  2. Bir metre CAT6 kablo
  3. PPPoE bilgisini alacağımız modem
  4. Bir bardak çay

Gerekli olan paketi Debian sistemimize dahil edelim ve sistemi hazırlamaya başlayalım.

PPPoE Sunucusu Nasıl Kuracaz?

Bu paket, PPPoE hizmet sağlayıcılarına bağlanmanızı sağlar ama biz bağlanmayacağız sunucu olacağız.

apt install pppoe

/etc/ppp/options içerisine aşağıdakileri kayıt edin. show-password demezseniz düzgün loglanmaz ona göre aksiyon alın, ön tanımlı bu config içerisinde hide-password satırı da bulunuyor şaşırıp onu kullanmayın.

# /etc/ppp/options
# 
# Originally created by Jim Knoble <jmknoble@mercury.interpath.net>
# Modified for Debian by alvar Bray <alvar@meiko.co.uk>
# Modified for PPP Server setup by Christoph Lameter <clameter@debian.org>
#
# To quickly see what options are active in this file, use this command:
#   egrep -v '#|^ *$' /etc/ppp/options

require-pap
login

# LCP settings
lcp-echo-interval 10
lcp-echo-failure 2

# Always Show Password
show-password

# Debug enable
debug

# PPPoE compliant settings
noaccomp
default-asyncmap
mtu 1492

# Log All
logfile /var/log/pppoe-server.log

# ---<End of File>---

Kayıt edip çıkın, ifconfig komutu ile ethernetimizi öğrenelim bendeki ens3 bunu not ettim köşeye. Raspberry Pi kullandığım için işim biraz daha rahat bu noktada.

ens3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 89.xxx.xxx.xxx  netmask 255.255.255.0  broadcast 89.xxx.xxx.xxx
        ether 52:54:00:5b:e5:bd  txqueuelen 1000  (Ethernet)
        RX packets 31935318  bytes 4272939405 (3.9 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2361679  bytes 1130613927 (1.0 GiB)
        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
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 80  bytes 6480 (6.3 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 80  bytes 6480 (6.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Şimdi makinede süreci çalıştırıp arkaya atmamız lazım normalde modem gibi yapılandırsak işimiz basitti ama biraz kulağımızı farklı tutuyoruz.

pppoe-server -F -I ens3 -O /etc/ppp/options

Alt satıra geçecek ve öyle bekleyecek panik yok çalışıyor demek bu, sadece süreci arkaya atmamız gerekiyor CTRL + C yapın süreci durdurun screen veya tmux ile çalıştırın size kalmış.

PPPoE Öğrenme Vakti

Şimdi geldik en aksiyonlu kısma ethernet kablosunu çıkartın, size ISP’nin verdiği cihazın fişini çekin WAN portundan Raspberry Pi’nin Ethernet portuna takın çalışır durumda olsun sakın fişini çekeyim demeyin.

Şimdi modemin fişini takın bırakın boot olsun, porttan PPPoE’ye istek atsın, bazı cihazlar geç istek atabiliyor o yüzden biraz bırakın takılsın cihazlar kendi kendisine.

Artık logumuzu kontrol edelim.

cat /var/log/pppoe-server.log

Evet düşündüğüm gibi bilgilerimiz gelmiş bile Superonline’da yapıyorsanız @fiber, TTnet’de yapıyorsanız @ttnet, Turksat’da yapıyorsanız @tsat olarak göreceksiniz.

using channel 1
Using interface ppp0
Connect: ppp0
sent [LCP ConfReq id=0x1 <mru 1492> <auth pap> <magic 0x0000c0c0>]
rcvd [LCP ConfAck id=0x1 <mru 1492> <auth pap> <magic 0x0000c0c0>]
rcvd [LCP ConfReq id=0x4 <mru 1492> <magic 0xa1a58299>]
sent [LCP ConfAck id=0x4 <mru 1492> <magic 0xa1a58299>]
sent [LCP EchoReq id=0x0 magic=0x61bc6dcc]
rcvd [LCP EchoReq id=0x0 magic=0xa1a58399]
sent [LCP EchoRep id=0x0 magic=0x61bc6dcc]
rcvd [PAP AuthReq id=0x1 user="101292028422@tsat" password="5065966"]
no PAP secret found for 101292028422@tsat
sent [PAP AuthNak id=0x1 "Login incorrect"]
PAP peer authentication failed for 101292028422@tsat
sent [LCP TermReq id=0x2 "Authentication failed"]
rcvd [LCP EchoRep id=0x0 magic=0xa1a58399]
rcvd [LCP TermReq id=0x5 "Failed to authenticate ourselves to peer"]
sent [LCP TermAck id=0x5]
rcvd [LCP TermAck id=0x2]
Connection terminated.

Evet bilgilerimiz geldi, şimdi gidip bunu istediğiniz bir router’da kullanabilirsiniz. ISP bu duruma ayılır diye isterseniz size verilen cihazın MAC adresini de ayrıca alıp kullandığınız router’a verebilirsiniz. Kullandığınız ISP desteklemiyorsa 802.1q kapatmayı unutmayın.

Log dosyasını göremiyorsanız veya oluşmamışsa aşağıdaki işlemi yapın, yukarıdaki tüm işlemi tekrarlayın.

touch /var/log/pppoe-server.log
chmod 0774 /var/log/pppoe-server.log

Yukarıdaki tüm işlemleri sanal makine ile de yapabilirsiniz, o durumda port mirror etmeyi ihmal etmeyin.


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.

En Basit SOCKS5 Proxy Nasıl Kurulur?

Her amaç için kullanabileceğiniz proxyleri basit bir şekilde kurabilir, istediğiniz gibi kullanabilirsiniz. Saniyeler içerisinde elinizin altında proxy olabilir, ister web scraping işlemlerinde isterseniz erişim engellerini aşmakta kullanabilirsiniz.

  1. Kuracağınız proxy için asla ön tanımlı port kullanmayın.
  2. Mutlaka parola ve kullanıcı adı koyun, yoksa kurduğunuz proxyi herkes kullanabilir.

SOCKS5 Proxy Nasıl Kurulur?

Ubuntu/Debian işletim sistemimize bağımlılıklarımızı kuralım.

apt install -y git build-essential
ShellScript
basit proxy kurulumu 1734f27fcf59

Kullanacağımız uygulamayı repodan direk olarak sistemimize dahil edelim ve kuralım.

git clone --recursive https://github.com/heiher/hev-socks5-server
cd hev-socks5-server
make
ShellScript

Kurulum işlemi tamamlandığında bin klasörü içerisinde binary dosyayı göreceksiniz. Bunu /usr/bin içerisine taşıyıp yetki verelim.

cp /bin/hev-socks5-server /usr/bin/hev-socks5-server
chmod +x /usr/bin/hev-socks5-server
ShellScript

Yapılandırma dosyamıza geldi sıra, port ve ip bilgilerini düzenleyebilirsiniz. Proxy’i çok fazla kişi kullanacaksa işlemci limitlerini de buradan ayarlayabilirsiniz. nano main.yml deyin ve aşağıdakileri içerisine ekleyin.

# Main configuration for hev-socks5-server

main:
  # Worker threads
  workers: 4
  # Listen port
  port: 1080
  # Listen address (ipv4|ipv6)
  listen-address: '::'
  # Listen ipv6 only
  listen-ipv6-only: false
  # Bind source address (ipv4|ipv6)
  bind-address: '::'
  # Bind source network interface
  bind-interface: ''

auth:
  username: mertcan
  password: gokgoz
ShellScript

Eliniz ile çalıştırıp kullanmaya başlayabilirsiniz, veya servis dosyası oluşturabilirsiniz. nano hav-socks5-proxy.service deyip aşağıdakileri içerisine ekleyin ve kayıt edin.

[Unit]
Description=Hev Socks5 Proxy Server
After=network.target
Wants=network-online.target

[Service]
Restart=always
Type=simple
ExecStart=/usr/bin/hev-socks5-server main.yml
Environment='TEST=test'

[Install]
WantedBy=multi-user.target
ShellScript

Daha sonra bu servis dosyasını kullanmak için aşağıdaki komutları sırasıyla çalıştırın.

sudo cp -v hav-socks5-proxy.service /etc/systemd/system
sudo systemctl daemon-reload
sudo systemctl start hav-socks5-proxy.service
sudo systemctl enable hav-socks5-proxy.service
ShellScript

Docker ile SOCKS5 Proxy Nasıl Kurulur?

Bunların hiçbiri ile uğraşmak istemeyenler direk olarak docker kullanarak ayağa kaldırabilirler.

cd hev-socks5-server
docker build -t hev-socks5-server -f docker/Dockerfile .
docker run -d \
  --name hev-socks5-server \
  --restart always \
  --net host \
  -e PORT=1080 \
  -e AUTH="user:pass" \
  hev-socks5-server
ShellScript

Bu aşamadan sonra SOCKS5 proxy kullanmanıza izin veren bütün clientler ile kurmuş olduğunuz bu proxy’i kullanabilirsiniz.

Smartctl Kullanarak Sabit Disk Analizi Nasıl Yapılır?

Disk üreticileri hem mevcut sürücü parametrelerini ve durumunu rapor etmek(sabit disk analizi) için standart yollar sağlamak hem de sorunları, özellikle de sürücü arızasını öngören sorunları belirtmek için disklere SMART özelliği eklediler.

Linux işletim sistemlerimizde, smartctl kullanarak sabit disklerden SMART (Self-Monitoring, Analysis and Reporting Technology) bilgilerini okuyabilirsiniz ve böylece veri kaybını önlemek için önleyici eylemler gerçekleştirilebilir arızalı sürücüyü değiştirilebilir, veri bütünlüğünü sağlayabilirsiniz.

hard disk görseli, hdd disk

Daha öncesinden yaklaşık 1 yıl kadar Storage cihazları ile ilgilendiğim için bu terimlerle içli dışlı oldum. Hal böyle olunca da SMART bilgilerini öğrenme fırsatı buldum. (Normalde bütün işi yönetim paneli ile yaparsın bu bilgilere gerek olmaz sana söyler bu disk öldü git değiştir der ve kırmızı ışıklarını yakar. Benim öğrenme olayım tamamen merak aslında)

Önce test için aracımızı sistemimize kuralım. Çoğu işletim sisteminin reposunda yer alıyor ve önceden yüklenmiş olarak geliyor, kurulu değilse aşağıdaki gibi dahil edebilirsiniz.

apt install -y smartmontools

Kullanabileceğiniz en temel komutlardan bir tanesi smartctl -a /dev/ada1 disk hakkında tüm bilgiyi ekrana basmaktadır.

smartctl 7.2 2020-12-30 r5155 [FreeBSD 12.2-RELEASE-p6 amd64] (local build) Copyright (C) 2002-20, Bruce Allen, Christian Franke, www.smartmontools.org === START OF INFORMATION SECTION === Model Family: Seagate BarraCuda 3.5 Device Model: ST4000DM004-2CV104 Serial Number: ZTT0422A LU WWN Device Id: 5 000c50 0c7a0b8a1 Firmware Version: 0001 User Capacity: 4,000,787,030,016 bytes [4.00 TB] Sector Sizes: 512 bytes logical, 4096 bytes physical Rotation Rate: 5425 rpm Form Factor: 3.5 inches Device is: In smartctl database [for details use: -P show] ATA Version is: ACS-3 T13/2161-D revision 5 SATA Version is: SATA 3.1, 6.0 Gb/s (current: 6.0 Gb/s) Local Time is: Thu May 20 00:22:07 2021 +03 SMART support is: Available - device has SMART capability. SMART support is: Enabled === START OF READ SMART DATA SECTION === SMART overall-health self-assessment test result: PASSED General SMART Values: Offline data collection status: (0x00) Offline data collection activity was never started. Auto Offline Data Collection: Disabled. Self-test execution status: ( 0) The previous self-test routine completed without error or no self-test has ever been run. Total time to complete Offline data collection: ( 0) seconds. Offline data collection capabilities: (0x73) SMART execute Offline immediate. Auto Offline data collection on/off support. Suspend Offline collection upon new command. No Offline surface scan supported. Self-test supported. Conveyance Self-test supported. Selective Self-test supported. SMART capabilities: (0x0003) Saves SMART data before entering power-saving mode. Supports SMART auto save timer. Error logging capability: (0x01) Error logging supported. General Purpose Logging supported. Short self-test routine recommended polling time: ( 1) minutes. Extended self-test routine recommended polling time: ( 483) minutes. Conveyance self-test routine recommended polling time: ( 2) minutes. SCT capabilities: (0x30a5) SCT Status supported. SCT Data Table supported. SMART Attributes Data Structure revision number: 10 Vendor Specific SMART Attributes with Thresholds: ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE 1 Raw_Read_Error_Rate 0x000f 079 069 006 Pre-fail Always - 84144576 3 Spin_Up_Time 0x0003 099 099 000 Pre-fail Always - 0 4 Start_Stop_Count 0x0032 100 100 020 Old_age Always - 2 5 Reallocated_Sector_Ct 0x0033 100 100 010 Pre-fail Always - 0 7 Seek_Error_Rate 0x000f 064 060 045 Pre-fail Always - 2721117 9 Power_On_Hours 0x0032 100 100 000 Old_age Always - 12 (221 247 0) 10 Spin_Retry_Count 0x0013 100 100 097 Pre-fail Always - 0 12 Power_Cycle_Count 0x0032 100 100 020 Old_age Always - 2 183 Runtime_Bad_Block 0x0032 100 100 000 Old_age Always - 0 184 End-to-End_Error 0x0032 100 100 099 Old_age Always - 0 187 Reported_Uncorrect 0x0032 100 100 000 Old_age Always - 0 188 Command_Timeout 0x0032 100 100 000 Old_age Always - 0 0 0 189 High_Fly_Writes 0x003a 100 100 000 Old_age Always - 0 190 Airflow_Temperature_Cel 0x0022 053 051 040 Old_age Always - 47 (Min/Max 44/48) 191 G-Sense_Error_Rate 0x0032 100 100 000 Old_age Always - 0 192 Power-Off_Retract_Count 0x0032 100 100 000 Old_age Always - 1 193 Load_Cycle_Count 0x0032 100 100 000 Old_age Always - 2 194 Temperature_Celsius 0x0022 047 049 000 Old_age Always - 47 (0 27 0 0 0) 195 Hardware_ECC_Recovered 0x001a 079 069 000 Old_age Always - 84144576 197 Current_Pending_Sector 0x0012 100 100 000 Old_age Always - 0 198 Offline_Uncorrectable 0x0010 100 100 000 Old_age Offline - 0 199 UDMA_CRC_Error_Count 0x003e 200 200 000 Old_age Always - 0 240 Head_Flying_Hours 0x0000 100 253 000 Old_age Offline - 12h+01m+50.717s 241 Total_LBAs_Written 0x0000 100 253 000 Old_age Offline - 830108619 242 Total_LBAs_Read 0x0000 100 253 000 Old_age Offline - 321197 SMART Error Log Version: 1 No Errors Logged SMART Self-test log structure revision number 1 Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error # 1 Short offline Completed without error 00% 10 - # 2 Extended offline Interrupted (host reset) 00% 10 - SMART Selective self-test log data structure revision number 1 SPAN MIN_LBA MAX_LBA CURRENT_TEST_STATUS 1 0 0 Not_testing 2 0 0 Not_testing 3 0 0 Not_testing 4 0 0 Not_testing 5 0 0 Not_testing Selective self-test flags (0x0): After scanning selected spans, do NOT read-scan remainder of disk. If Selective self-test is pending on power-up, resume after 0 minute delay.

Sabit Disk Analizi Nasıl Yapılır?

Gelelim bu çıktıda analizimizi yapmaya, aslında çıktının anlamlandırılması çok basit. Üretici sonuç itibariyle SMART yazılımı içerisine kendi ön tanımlı değerlerini koyuyor, sonrada bize diyor ki geçerli aralıklar bunlar. Sorgulama sırasında farklı bir değer görürsen dikkat et.

Peki referans değer aralıkları ile birlikte bakılması gereken kısım bu çıktıda nerede? Tabii ki de Vendor Specific SMART Attributes with Thresholds: çıktıları içerisinde yer alan aşağıdaki değerlerde (Merak etmeyin hepsini açıklayacağız, ve evet bunların çoğunu bilmeniz gerekiyor.)

ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE 1 Raw_Read_Error_Rate 0x000f 080 064 006 Pre-fail Always - 99752496 3 Spin_Up_Time 0x0003 096 096 000 Pre-fail Always - 0 4 Start_Stop_Count 0x0032 095 095 020 Old_age Always - 5251 5 Reallocated_Sector_Ct 0x0033 100 100 010 Pre-fail Always - 0 7 Seek_Error_Rate 0x000f 082 060 045 Pre-fail Always - 148030325 9 Power_On_Hours 0x0032 090 090 000 Old_age Always - 9016 (99 255 0) 10 Spin_Retry_Count 0x0013 100 100 097 Pre-fail Always - 0 12 Power_Cycle_Count 0x0032 100 100 020 Old_age Always - 695 183 Runtime_Bad_Block 0x0032 100 100 000 Old_age Always - 0 184 End-to-End_Error 0x0032 100 100 099 Old_age Always - 0 187 Reported_Uncorrect 0x0032 100 100 000 Old_age Always - 0 188 Command_Timeout 0x0032 100 100 000 Old_age Always - 0 0 0 189 High_Fly_Writes 0x003a 100 100 000 Old_age Always - 0 190 Airflow_Temperature_Cel 0x0022 057 054 040 Old_age Always - 43 (Min/Max 39/44) 191 G-Sense_Error_Rate 0x0032 100 100 000 Old_age Always - 0 192 Power-Off_Retract_Count 0x0032 100 100 000 Old_age Always - 26 193 Load_Cycle_Count 0x0032 090 090 000 Old_age Always - 21116 194 Temperature_Celsius 0x0022 043 046 000 Old_age Always - 43 (0 20 0 0 0) 195 Hardware_ECC_Recovered 0x001a 080 064 000 Old_age Always - 99752496 197 Current_Pending_Sector 0x0012 100 100 000 Old_age Always - 0 198 Offline_Uncorrectable 0x0010 100 100 000 Old_age Offline - 0 199 UDMA_CRC_Error_Count 0x003e 200 200 000 Old_age Always - 0 240 Head_Flying_Hours 0x0000 100 253 000 Old_age Offline - 5429h+35m+07.433s 241 Total_LBAs_Written 0x0000 100 253 000 Old_age Offline - 74728011634 242 Total_LBAs_Read 0x0000 100 253 000 Old_age Offline - 46623011573

Oldukça korkutucu görünüyor, değil mi? Bu sayfadan edindiğiniz bilgiyle diyeceksiniz ki “Tamam bu sürücüde sıkıntı yok devamkee” bunu diyebilecek kıvama geleceksiniz. ID’leri takip etmeyi unutmayın disk üreticileri değerleri farklı şekillerde verebiliyor.

SMART ayrıca bizim kullanabileceğimiz bir kaç testide desteklemektedir. Kısa süreli bir test başlatmak isterseniz aşağıdaki komutu kullanabilirsiniz. Aynı zamanda dilerseniz uzun süreli okuma ve yazma testleri gerçekleştirebilirsiniz bunun için short parametresi yerine long yazmanız yeterlidir. İşlem sistem özellikleriniz ve diskinizin okuma yazma kapasitesine bağlı olarak 1 gün kadar sürebilir. Lütfen sabırlı bir şekilde işlemin tamamlanmasını bekleyiniz.

smartctl -t short /dev/ada2

Bunun sonucunda aşağıdaki çıktıyı göreceksiniz, paniklemeye gerek yok 1 dakika süresince diskte işlem yapılacağını söyleyecek size.

smartctl 7.2 2020-12-30 r5155 [FreeBSD 12.2-RELEASE-p6 amd64] (local build) Copyright (C) 2002-20, Bruce Allen, Christian Franke, www.smartmontools.org === START OF OFFLINE IMMEDIATE AND SELF-TEST SECTION === Sending command: "Execute SMART Short self-test routine immediately in off-line mode". Drive command "Execute SMART Short self-test routine immediately in off-line mode" successful. Testing has begun. Please wait 1 minutes for test to complete. Test will complete after Thu May 20 00:59:49 2021 +03 Use smartctl -X to abort test.

Başlattığımız bu testin sonucunu ise smartctl -l selftest /dev/ada2 komutunu kullanabilirsiniz.

smartctl 7.2 2020-12-30 r5155 [FreeBSD 12.2-RELEASE-p6 amd64] (local build) Copyright (C) 2002-20, Bruce Allen, Christian Franke, www.smartmontools.org === START OF READ SMART DATA SECTION === SMART Self-test log structure revision number 1 Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error # 1 Short offline Completed without error 00% 9016 - # 2 Short offline Completed without error 00% 9016 - # 3 Short offline Completed without error 00% 9014 - # 4 Extended offline Interrupted (host reset) 00% 9004 - # 5 Extended offline Interrupted (host reset) 00% 8978 - # 6 Extended offline Interrupted (host reset) 00% 8965 - # 7 Extended offline Interrupted (host reset) 00% 8949 - # 8 Short offline Completed without error 00% 8943 -

Diskimiz sorunsuz, on numara beş yıldız bir şekilde görevini gerektiği gibi yapıyor olduğunu görüyoruz, peki hatalı bir çıktı nasıl gözüküyor?

smartctl 7.2 2020-12-30 r5155 [FreeBSD 12.2-RELEASE-p6 amd64] (local build) Copyright (C) 2002-20, Bruce Allen, Christian Franke, www.smartmontools.org === START OF READ SMART DATA SECTION === SMART Self-test log structure revision number 1 Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error # 1 Short offline Completed: read failure 20% 717 555027784 # 2 Short offline Completed: read failure 20% 717 555027747

LBA_of_first_error(LBA=Logical Block Address) bir sabit diskte oluşan bir hata veya arıza durumunda, hata kaydının ilk olarak hangi mantıksal blok adresinde (LBA) oluştuğunu belirten bir değerdir. Bu değer, sabit diskteki belirli bir alanın bozulduğunu ve veri kaybı veya diğer sorunlar yaşanabileceğini gösterir. Eğer LBA_of_first_error değeri çok yüksekse, diskin performansında düşüş veya daha ciddi arızalar yaşanabileceği anlamına gelir ve disk değiştirilmelidir.

ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE 5 Reallocated_Sector_Ct 0x0033 100 100 005 Pre-fail Always - 0 196 Reallocated_Event_Count 0x0032 100 100 000 Old_age Always - 0 197 Current_Pending_Sector 0x0022 100 100 000 Old_age Always - 2 198 Offline_Uncorrectable 0x0008 100 100 000 Old_age Offline - 2

Burada önemli olan şimdilik Current_Pending_Sector sabit diskteki mevcut kusurlu sektör sayısını gösteren bir SMART (Self-Monitoring, Analysis and Reporting Technology) parametresidir. Bu sayı ne kadar yüksekse, o kadar fazla bozuk sektör olduğunu gösterir.

sabit disk görseli, hdd görsel, sabit disk analizi

Bozuk sektörler, veri kaybına veya disk arızalarına neden olabilir ve bu nedenle diskin değiştirilmesi gerekebilir.

Yeni Aldığım Sabit Disk Sağlıklı Mı Nasıl Anlarım?

Yeni bir sabit disk aldıysanız ve sağlıklı olup olmadığını kontrol etmek istiyorsanız, aşağıdaki adımları izleyebilirsiniz:

  1. Sabit disklerin sağlığını kontrol etmek için birçok ücretsiz yazılım bulunmaktadır. CrystalDiskInfo veya HD Tune gibi araçlar, sabit disklerin sağlık durumunu kontrol etmek için kullanılabilir.
  2. S.M.A.R.T., sabit disklerin kendini izleme ve analiz etme özelliğidir. Yukarıdaki anlattığım yöntemi kullanabilirsiniz, burada önemli olan noktalar Current Pending Sector Count, Reallocated Sector Count, Spin Retry Count ve Raw Read Error Rate değerleridir.
  3. Sabit disk performans testi yaparak, diskteki hız ve veri transferi kapasitesi gibi faktörleri kontrol edebilirsiniz. Bunun için yukarıda verdiğim ücretsiz uygulamalardan faydalanabilirsiniz.
  4. Yüzey taraması, sabit diskteki olası kötü sektörleri tespit etmek için kullanılabilir. Yeni alınan disklerde bu testi uzun süreli yapmak olası hataları tespit etme ihtimalinizi arttırır.

Yukarıdaki adımları takip ederek, yeni aldığınız sabit diskin sağlıklı olup olmadığını kontrol edebilirsiniz. Ancak unutmayın ki, sabit diskler zamanla doğal olarak yıpranır ve hiçbir zaman %100 sağlıklı kalmaz.

Bu nedenle, düzenli olarak yedekleme yapmanızı ve disklerinizi S.M.A.R.T. testlerine tabii tutmanızı öneririm, ayrıca belirli süreler geçtikçe diskleri değiştirmeniz şiddetle önerilir.

Sabit Diskim Sağlıklı Gözüküyor Ama Okuma Hızı Çok Yavaş Neden?

Sabit diskinizin sağlıklı gözükmesine rağmen yavaş okuma hızlarına sahip olmasının birkaç nedeni olabilir. Bu sebeplerin biri veya bir kaçı mevcutsa ortalık karışır.

  1. Sabit diskinizde bozuk sektörler olabilir ve okuma hızınızı düşürebilir.
  2. Sabit diskinizde çok fazla veri olabilir okuma hızınızı düşürebilir. Sabit diskte daha fazla boş alan açarak veya gereksiz dosyaları silerek bu sorunu çözebilirsiniz.
  3. Sabit disk sürücü yazılımınız güncel olmayabilir güncel olmayan bir sürücü yazılımıda, sabit disk performansınızı etkileyebilir. Eğer güncellemeler varsa yapmanız sorununuzu çoğu zaman çözecektir.
  4. Sabit disk fiziksel olarak zarar görmüş olabilir bu durumda okuma hızınız düşebilir.

Firezone ile VPN Sunucusu Nasıl Kurulur?

Firezone, kendi sunucu alt yapınızda dakikalar içinde devreye alınabilen, açık kaynak kodlu ve güvenli bir yönetim platformudur. Kullanımı basit bir web arayüzü ile özel ağlarınıza ve dahili uygulamalarınıza basit, hızlı ve güvenli bir şekilde erişim sağlayabilirsiniz.

Firezone Nasıl Kurulur?

Öncelikli olarak sisteminize docker’ı Debian Tabanlı Sistemler’e Docker Kurulumu makalesi üzerinden kurun. Sonrasında otomatik kurulum betiğini çalıştırın, bu betik sisteminizde yer alan docker sayesinde Firezone uygulamasını hızlı bir şekilde kuracak ve yapılandırmasını gerçekleştirecek.

bash <(curl -fsSL https://github.com/firezone/firezone/raw/master/scripts/install.sh)

Uygulamamızın çalışma mantığına kısaca bir göz atalım, aşağıdaki görsel ile çok rahat bir şekilde anlayabileceğinizi düşünüyorum.

firezone vpn nasıl kurulur?, how to install firezone vpn server

Kurulum tamamlandığında aşağıdaki WebUI karşınıza çıkacak bütün yönetimi buradan yapacağız.

firezone login ekranı, firezone vpn giriş ekranı

SSH konsolu üzerinde size verdiği bilgiler ile buraya giriş yapacaksınız. Aşağıdaki gibi kurulum tamamlandığında bu bilgileri görebilirsiniz.

firezone ilk giriş, firezone admin bilgileri

Giriş yaptıktan sonra herhangi bir yapılandırma yapmanıza gerek yok, sadece hesap ekleyip kullanmaya başlayacaksınız. Size verdiği parolayı değiştirmek isterseniz firezone-ctl create-or-reset-admin komutunu kullanabilirsiniz.

Firezone Kullanıcı Nasıl Eklenir?

“Users” > “Add User” seçeneğini seçerek çok basit bir şekilde yeni kullanıcı ekleyebilirsiniz. Oluşturduğunuz bu yeni kullanıcıya cihaz eklemeyi unutmayınız.

firezone vpn kullanıcı ekleme, wireguard kullanıcı ekleme

Eklenen her bir kullanıcıya ayrıca cihaz eklemesi yapmanız gerekmektedir, bu aşamayı yaptığınızda size kullanabileceğiniz yapılandırma dosyası verilir ve VPN bağlantısı sağlayabilirsiniz.

“Users” > Cihaz eklemek istediğiniz kullanıcı > “Add Device” bu seçenek ile özel yapılandırma oluşturabilirsiniz.

firezone cihaz nasıl eklenir, wireguard vpn config ekleme

Ayrıca “Configuration” sekmesi altında yer alan “Egress” kuralları sayesinde cihazların bir birleri ile iletişimlerini kesebilirsiniz, isterseniz de belirli rotalara kural yazabilirsiniz.

firezone egress kuralları, vpn egress rules, wireguard egress

Bunlar dışında uygulamayı kurumsal olarak kullanmak isteyenler için SAML2.0 ve SSO entegrasyonları bulunmakta ve aşağıdaki sağlayıcıları desteklemektedir.

  • Azure Active Directory
  • Okta
  • OneLogin
  • Keycloak
  • Auth0
  • Google Workspace
  • Zitadel
  • Authentik
  • JumpCloud

Ayrıca kullanıcı hesaplarına girişte TOTP desteği bulunmaktadır ve bu sayede kullanıcılar hesaplarına ek güvenlik katmanı ekleyebilirler, bu özellik sadece e-mail ve parola ile girişlerde desteklenmektedir. SSO ile girişlerde sağlayıcının sunduğu özelliklerden faydalanmak mümkündür.

Diğer bütün özellikler için resmi belgelerden faydalanmayı ihmal etmeyiniz.