Şub 23

Matlab’ımız yoksa ücretsiz/beleş Octave ile çalışmayalım mı? :/

Matlab’ımız yoksa ücretsiz/beleş Octave ile çalışmayalım mı? :/
MacOS’çularda https://lnkd.in/dJuFx9NX kullanabilir 😉
Screenshot oda beleş Shutter – Torned paper Plugin’i ile alınmıştır:/

Gereksinimler:
Ubuntu 24.04.1 LTS (noble) – GNU Octave, version 8.4.0’de,
pkg install -forge fuzzy-logic-toolkit (fcm için)
pkg load fuzzy-logic-toolkit

pkg install -forge statistics (kmeans için)
pkg load statistics

tansig içinde kendiniz fonksiyon yazıverin :),
function y = tansig(x)
y = 2 ./ (1 + exp(-2*x)) – 1;
end
https://lnkd.in/dZhgPmWu sayfasındaki veri seti üzerinde temel ELM’i karşılaştırmak için gerekli parametre ayarları ve koşturunca elde edilen sonuçlar:

C=0.001; %Regularization parameter
N=15; %Fuzzy Nodes
L=203; %Hidden Nodes
Act=5; %Activation Function 5 = tansig

%% Clustering Methods
cluster=[1,2,3]; % K-Means: clus=1, Fuzzy C-Means: clus=2, R-Means: clus=3
clus=2; % Fuzzy C-Means Cluster

Gerçi ELM üstün olsada bu karşılaştırma hoşuma gitmedi :/ Fuzzy_ELM yapısını kurgulamak lazım yada düz RVFL ile ELM ve FRIS destekli Constrained-Meta karşılaştırılsa daha iyi olabilir 😉

Birde paketleri kalıcı hale getirmek lazım :/
sudo nano ~/.octaverc
pkg load fuzzy-logic-toolkit
pkg load statistics

Şub 23

Sınıf ve lablarda RaspberryPi (Rpi) 4 üzerinde hw 477 li ds18b20 ile basit sıcaklık ölçer:

Sınıf ve lablarda RaspberryPi (Rpi) 4 üzerinde hw 477 li ds18b20 ile basit sıcaklık ölçer:
pinout ile Rpi pinleri check ediyoruz.
Beslemeler hariç sensör pin4 üzerinden haberleşiyor.

sudo modprobe w1-gpio
sudo pico /boot/firmware/config.txt
[all]
enable_uart=1
dtoverlay=w1-gpio,gpiopin=4

sudo pico sicaklik.py
#!/usr/bin/python3
import glob, os

def Read_DS18B20(SensorID):
try:
fichier = open( “/sys/bus/w1/devices/” + SensorID + “/w1_slave”)
texte = fichier.read()
fichier.close()
ligne1 = texte.split(“\n”)[0]
crc = ligne1.split(“crc=”)[1]
if crc.find(“YES”)<0:
return None
except:
return None
ligne2 = texte.split("\n")[1]
texte_temp = ligne2.split(" ")[9]
return (float(texte_temp[2:])/1000.0)

Her 0.5 sn'de tekrar okutma işlemi:
watch -n 0.5 python sicaklik.py

Şub 23

Herhangi bir saldırı, anomaly ve hardware’in fazla akım çektiği durumları kontrol etmek için Raspberry Pi ile PZEM-004T (100A) akım sensörü testi:

Herhangi bir saldırı, anomaly ve hardware’in fazla akım çektiği durumları kontrol etmek için Raspberry Pi ile PZEM-004T (100A) akım sensörü testi:
Windows’ta direk app var:
https://lnkd.in/dSWARySJ

Arm tabanlı Raspberry Pi 4’te ise:
sudo raspi-config ile interface seçeneklerinden serial portu aktif etmek lazım.
dmesg | grep tty ile hangi USB interface’ine sensörü taktık bakmak lazım.
sudo pip3 install modbus-tk Rpi ile sensör modbus haberleşeceği için paketin yüklenmesi gerekiyor.

Temel haberleşme python kodu:
import time
import json
import serial
import modbus_tk.defines as cst
from modbus_tk import modbus_rtu

if __name__ == “__main__”:
try:
# Connect to the slave
serial = serial.Serial(
port=’/dev/ttyUSB0′,
baudrate=9600,
bytesize=8,
parity=’N’,
stopbits=1,
xonxoff=0
)

master = modbus_rtu.RtuMaster(serial)
master.set_timeout(2.0)
master.set_verbose(True)
# Changing power alarm value to 100 W
# master.execute(1, cst.WRITE_SINGLE_REGISTER, 1, output_value=100)
dict_payload = dict()

while True:
data = master.execute(1, cst.READ_INPUT_REGISTERS, 0, 10)

dict_payload[“voltage”]= data[0] / 10.0
dict_payload[“current_A”] = (data[1] + (data[2] << 16)) / 1000.0 # [A]
dict_payload["power_W"] = (data[3] + (data[4] << 16)) / 10.0 # [W]
dict_payload["energy_Wh"] = data[5] + (data[6] << 16) # [Wh]
dict_payload["frequency_Hz"] = data[7] / 10.0 # [Hz]
dict_payload["power_factor"] = data[8] / 100.0
dict_payload["alarm"] = data[9] # 0 = no alarm
str_payload = json.dumps(dict_payload, indent=2)
print(str_payload)

time.sleep(1)

except KeyboardInterrupt:
print('exiting pzem script')
except Exception as e:
print(e)
finally:
master.close()

ESP 32 ile Rpi maliyetinden uyguna ayni çözüme ulasilabilir 😉

Şub 23

OpenSCAP ile bir sistemin güvenlik yapılandırma ayarlarını kontrol edebilir ve standartlara ve spesifikasyonlara dayalı kuralları kullanarak sistemi bir uzlaşma belirtisi açısından inceleyebiliriz.

Wazuh ölçeklenebilir, multi platformu, açık kaynaklı bir host-tabanlı intrusion detection (HIDS) sistemidir. Güçlü bir korelasyon ve analiz motoru olan OSSEC’in bir forku olarak doğmuştur. Wazuh Elastic Stack ve OpenSCAP ile entegre edilerek daha kapsamlı bir çözüm haline gelmiştir. Wazuh, log analizi, dosya bütünlüğü denetimi (file integrity checking), Windows kayıt defteri izleme (Windows registry monitoring), rootkit tespiti, gerçek zamanlı uyarı ve aktif response yapısına sahip olmakla birlikte Linux, OpenBSD, FreeBSD, dahil olmak üzere MacOSX, Solaris ve Windows gibi birçok işletim sisteminde çalışabilmektedir.

OpenSCAP, sistem yapılandırmalarını kontrol etmek ve güvenlik açığı olan uygulamaları tespit etmek için kullanılan bir OVAL (Open Vulnerability Assessment Language) ve XCCDF (Extensible Configuration Checklist Description Format) yorumlayıcısıdır.

OpenSCAP (Kaynak – https://lnkd.in/dS3pAj25), NIST tarafından sürdürülen bir dizi spesifikasyon olan SCAP’ı kullanır. SCAP, sistem güvenliğini sağlamak için standartlaştırılmış bir yaklaşım sağlamak üzere oluşturulmuştur. OpenSCAP temel olarak bir kontrol listesi içeriğini ifade etmenin standart bir yolu olan XCCDF’yi işler ve güvenlik kontrol listelerini tanımlar. Ayrıca CPE, CCE ve OVAL gibi diğer spesifikasyonlarla birleşerek SCAP onaylı ürünler tarafından işlenebilen SCAP ile ifade edilmiş bir kontrol listesi oluşturur (Kaynak – https://lnkd.in/dx8ANe5i).

Kurulum:
apt install openscap-common
apt install openscap-scanner
apt install openscap-utils
apt install ssg-base ssg-debderived ssg-debian ssg-nondebian ssg-applications

1. Sistemin güvenlik yapılandırma profilini XCCDF ile denetlersiniz.
2. Sistemdeki açıkları ve zafiyetleri OVAL ile tararsınız.

Tarama:
1. oscap xccdf eval –profile xccdf_org.ssgproject.content_profile_standard –report xccdf_report.html /usr/share/xml/scap/ssg/content/ssg-debian11-ds.xml
2. oscap oval eval –report oval_report.html /usr/share/xml/scap/ssg/content/ssg-debian11-oval.xml

Oca 11

USOM’dan veri çekme betiği

totalCount=10582 11.01.2025 tarihinde alınmıştır.


#!/bin/bash

# Toplam kayıt sayısı ve sayfa başına kayıt sayısı
totalCount=10582
perPage=20
totalPages=$(( (totalCount + perPage - 1) / perPage ))

# Çıktı dosyası
outputFile="all_data.json"

# JSON array başlangıcı
echo "[" > "$outputFile"

# Her sayfayı çek ve JSON'a ekle
for ((page=1; page/dev/null; then
if [[ -n "$response" && "$response" != "[]" ]]; then
echo "$response" | jq -c '.[]' >> "$outputFile"
success=1
break
else
echo "Empty JSON response for page $page. Retrying ($((retryCount + 1))/$maxRetries)..."
retryCount=$((retryCount + 1))
sleep 3 # 3 saniye bekle ve tekrar dene
fi
else
echo "Invalid JSON response for page $page: $response. Retrying ($((retryCount + 1))/$maxRetries)..."
retryCount=$((retryCount + 1))
sleep 3 # 3 saniye bekle ve tekrar dene
fi
done

# Başarısız olursa, hata mesajı yaz ve devam et
if [ $success -eq 0 ]; then
echo "Failed to fetch page $page after $maxRetries attempts. Skipping..."
fi

# Son sayfa değilse, JSON array'e virgül ekle
if [ $page -ne $totalPages ]; then
echo "," >> "$outputFile"
fi

# Her 100 sayfada 1 ms bekle
if (( page % 100 == 0 )); then
sleep 0.001
fi
done

# JSON array sonu
echo "]" >> "$outputFile"

echo "All data has been saved to $outputFile"

Page-page veri çektiğim için bazı atıkları kaldırmak lazım Colab’ta işleme kolayıma geldi:/

# Dosyayı oku ve veriyi ayrıştır
def read_and_combine_json(file_path):
combined_data = []
with open(file_path, "r", encoding="utf-8") as file:
for line in file:
line = line.strip()
if line.startswith("[") and line.endswith("]"): # JSON formatındaki satırları bul
try:
data = json.loads(line) # JSON satırını ayrıştır
combined_data.extend(data) # Veriyi birleştir
except json.JSONDecodeError as e:
print(f"JSON ayrıştırma hatası: {e}")
return combined_data

# JSON verisini dosyaya kaydet
def save_json(data, output_file):
with open(output_file, "w", encoding="utf-8") as file:
json.dump(data, file, indent=4, ensure_ascii=False)
print(f"JSON verisi {output_file} dosyasına kaydedildi.")

# Dosya yolu
input_file = "USOM_110125.json"
output_file = "combined_USOM_110125.json"

# JSON verisini oku ve birleştir
combined_data = read_and_combine_json(input_file)

# Birleştirilmiş JSON verisini kaydet
save_json(combined_data, output_file)

Eyl 12

Korumalı: Earthquake Prediction through Advanced Feature Engineering and Machine Learning Regression Techniques

Bu içerik parola ile korunmaktadır. Görmek için lütfen aşağı parolanızı girin:

Eyl 12

Ubuntu 22.04’ten 24.04’e güncelleme sonrası Timezone problemi

timedatectl list-timezones | grep -o 'Europe/Ist.*' ile timezones içinde Istanbul kontrolü yaptım.

Europe/Istanbul çıktısını görünce sevindim.

sudo timedatectl set-timezone Europe/Istanbul komutuyla set ettim.
Böyle bir hata ile karşılaştım : Failed to set time zone: Invalid or not installed time zone 'Europe/Istanbul'

sudo ln -sf /usr/share/zoneinfo/Europe/Istanbul /etc/localtime bu komutu verip tekrar Istanbul’u set etmeye çalıştım yine olmadı.

Çözüm olarak sudo apt install --reinstall tzdata ile tzdatayi yeniden yükleyince oldu, reinstall etmeden önce yüklü olduğunu check ettim vardı ama güncellemede bazı şeyler gittiğini düşünerek tekrar yükleyip problem giderilmiş oldu 🙂

Nis 17

Remote Raspbian OS’deki Mariadb’nin yedeğini Windows Lokaline yedekleyen C# desktop uygulaması

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.IO.Compression;
using System.Security.Cryptography;
using System.Text;
using System.Linq;
using System.Security.Policy;
using System.Threading.Tasks;
using System.Windows.Forms;

private void btnReports_Click(object sender1, EventArgs e1)
{

StreamReader sRead = File.OpenText(@”config.txt”);
string metin;
while ((metin = sRead.ReadLine()) != null)
{
// Okunan veriler textbox içerisine atılıyor.
string phrase = metin;
string[] words = phrase.Split(‘,’);

if (words[0] != null && words[1] != null && words[2] != null && words[3] != null)
{
server = words[0];
veritabaniAdi = words[1];
kullaniciAdi = words[2];
sifre = Descrpyt(words[3]);
}

}

// İşlem nesnesini oluşturun
string dateTimeString = DateTime.Now.ToString(“yyyy.MM.dd__HH.mm”);
Process process = new Process();

// Hedef dizini oluştur
string targetDirectory = @”C:\DB_YEDEK”;
if (!Directory.Exists(targetDirectory))
{
Directory.CreateDirectory(targetDirectory);
}

// Başlangıç bilgilerini ayarlayın
process.StartInfo.FileName = @”C:\Program Files\MySQL\MySQL Workbench 8.0 CE\mysqldump.exe”;
// –skip-triggers –no-create-info : parametrelerini kullanarak yalnızca verileri içeren ve tablo yapısını içermeyen bir SQL dosyası oluşturur.
process.StartInfo.Arguments = $” –result-file=\”C:\\DB_YEDEK\\{dateTimeString}.sql\” –user={kullaniciAdi} -p{sifre} –host={server} –port=3306 –default-character-set=utf8 –protocol=tcp –skip-triggers –no-create-info \”h4ck3r_charge\””;
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.CreateNoWindow = true;

// Olayları tanımlayın
process.OutputDataReceived += (sender, e) =>
{
if (!String.IsNullOrEmpty(e.Data))
{
Console.WriteLine(e.Data);
}
};
process.ErrorDataReceived += (sender, e) =>
{
if (!String.IsNullOrEmpty(e.Data))
{
Console.WriteLine(“Error: ” + e.Data);
}
};

// Komutu çalıştırın
process.Start();

// Çıktı ve hata akışlarını başlatın
Console.WriteLine(“VERİTABANI YEDEKLEME İŞLEMİ DEVAM EDİYOR…”);
//MessageBox.Show(“VERİTABANI YEDEKLEME İŞLEMİ DEVAM EDİYOR…”, “Bilgi”, MessageBoxButtons.OK, MessageBoxIcon.Information);
process.BeginOutputReadLine();

process.BeginErrorReadLine();

// İşlem tamamlanana kadar bekle
process.WaitForExit();

// Yedek dosyasını sıkıştırın
string backupFilePath = $”{targetDirectory}\\{dateTimeString}.sql”;
string compressedFilePath = $”{targetDirectory}\\{dateTimeString}.gz”;
using (FileStream fileToCompress = File.OpenRead(backupFilePath))
{
using (FileStream compressedFileStream = File.Create(compressedFilePath))
{
using (GZipStream compressionStream = new GZipStream(compressedFileStream, CompressionMode.Compress))
{
fileToCompress.CopyTo(compressionStream);
}
}
}

string inputFile = $”{targetDirectory}\\{dateTimeString}.sql”;
string compressedFile = $”{targetDirectory}\\{dateTimeString}.gz”;
string encryptedFile = $”{targetDirectory}\\{dateTimeString}.zip”;
string decryptedFile = $”{targetDirectory}\\{dateTimeString}.sql2″;
string password = “AnahtarSecret24April”;

// Dosyayı sıkıştır
CompressFile(inputFile, compressedFile);

// Dosyayı şifrele
EncryptFile(compressedFile, encryptedFile, password);

// Dosyayı çöz
//DecryptFile(encryptedFile, decryptedFile, password);

// Orijinal dosyayı sil
DeleteFile(inputFile);

Console.WriteLine(“Dosya sıkıştırma, şifreleme ve çözme işlemi tamamlandı.”);

Console.WriteLine(“Yedekleme tamamlandı.”);
MessageBox.Show($”VERİTABANI YEDEKLEME İŞLEMİ TAMAMLANDI…\n\n DOSYA KONUMU: {targetDirectory}\\{dateTimeString}.zip”, “Bilgi”, MessageBoxButtons.OK, MessageBoxIcon.Information);
}

static void CompressFile(string inputFile, string compressedFile)
{
using (FileStream inputStream = File.OpenRead(inputFile))
{
using (FileStream compressedStream = File.Create(compressedFile))
{
using (GZipStream gzipStream = new GZipStream(compressedStream, CompressionMode.Compress))
{
inputStream.CopyTo(gzipStream);
}
}
}
}

static void EncryptFile(string inputFile, string encryptedFile, string password)
{
byte[] salt = GenerateSalt(); // Tuz oluştur

using (Aes aesAlg = Aes.Create())
{
aesAlg.KeySize = 256; // 256-bit AES kullan
aesAlg.BlockSize = 128; // 128-bit blok boyutu
aesAlg.Padding = PaddingMode.PKCS7; // Dolgu modu
aesAlg.Mode = CipherMode.CBC; // CBC modu

// Anahtar ve IV oluştur
var keyDerivationFunction = new Rfc2898DeriveBytes(password, salt, 10000);
aesAlg.Key = keyDerivationFunction.GetBytes(aesAlg.KeySize / 8);
aesAlg.IV = keyDerivationFunction.GetBytes(aesAlg.BlockSize / 8);

using (FileStream inputFileStream = File.OpenRead(inputFile))
{
using (FileStream encryptedFileStream = File.Create(encryptedFile))
{
using (CryptoStream cryptoStream = new CryptoStream(encryptedFileStream, aesAlg.CreateEncryptor(), CryptoStreamMode.Write))
{
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = inputFileStream.Read(buffer, 0, buffer.Length)) > 0)
{
cryptoStream.Write(buffer, 0, bytesRead);
}
}
}
}
}
}

static void DecryptFile(string encryptedFile, string decryptedFile, string password)
{
byte[] salt = GenerateSalt(); //

using (Aes aesAlg = Aes.Create())
{
aesAlg.KeySize = 256; // 256-bit AES kullan
aesAlg.BlockSize = 128; // 128-bit blok boyutu
aesAlg.Padding = PaddingMode.PKCS7; // Dolgu modu
aesAlg.Mode = CipherMode.CBC; // CBC modu

// Anahtar ve IV oluştur
var keyDerivationFunction = new Rfc2898DeriveBytes(password, salt, 10000);
aesAlg.Key = keyDerivationFunction.GetBytes(aesAlg.KeySize / 8);
aesAlg.IV = keyDerivationFunction.GetBytes(aesAlg.BlockSize / 8);

try
{
using (FileStream encryptedFileStream = File.OpenRead(encryptedFile))
{
using (FileStream decryptedFileStream = File.Create(decryptedFile))
{
using (CryptoStream cryptoStream = new CryptoStream(encryptedFileStream, aesAlg.CreateDecryptor(), CryptoStreamMode.Read))
{
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = cryptoStream.Read(buffer, 0, buffer.Length)) > 0)
{
decryptedFileStream.Write(buffer, 0, bytesRead);
}
}
}
}
}
catch (CryptographicException ex)
{
Console.WriteLine(“Hata: ” + ex.Message);
}
}
}

static byte[] GenerateSalt()
{
byte[] salt = new byte[16];
using (var rng = new RNGCryptoServiceProvider())
{
rng.GetBytes(salt);
}
return salt;
}

static void DeleteFile(string filePath)
{
if (File.Exists(filePath))
{
File.Delete(filePath);
}
}

}

Şub 15

TFTP ile anahtarlara Firmware yükleme ve Config dosyalarını yedekleme

TFTP (Trivial File Transfer Protocol) kurulum faydalanılan link:

sudo apt install tftpd-hpa

sudo systemctl status tftpd-hpa

sudo nano /etc/default/tftpd-hpa

TFTP_USERNAME =”ftp”.

TFTP_DIRECTORY =”/tftp”

TFTP_ADDRESS =”:69″

TFTP_OPTIONS =” –secure –create”

sudo mkdir /tftp

sudo chown tftp:tftp /tftp

sudo systemctl restart tftpd-hpa

sudo systemctl status tftpd-hpa

 

 

Bazı test edilen anahtarlara ait güncel firmwareler:

ProCurve J9085A Switch 2610-24 R.11.123 Released on Mar 1, 2021
HP J9565A Switch 2615-8-PoE Released on Dec 6, 2022  A.15.16.0025 günceli A.15.16.0026
HP J9623A 2620-24 Switch Released on Nov 2, 2022 RA.16.04.0026 günceli  RA.16.04.0027
Aruba JL558A 2930F-48G-740W-PoE+-4SFP+ Switch WC.16.11.0011 Released on Apr 11, 2023 günceli WC.16.11.0015
HP J9773A 2530-24G-PoEP Switch YA.16.11.0011 Released on Apr 11, 2023 günceli  YA.16.11.0015
Aruba JL677A 6100 24G CL4 4SFP+ Swch ArubaOS-CX_6100-6000_10.11.1021 Released on May 15, 2023 günceli PL.10.12.1000
Dell EMC Networking N1524P/N1548P 6.7.1.20  günceli 6.7.1.21 18.03.2023
juniper / EX2200-48T-4G 12.3R8.7 ve 12.3R6.6  modelleri var güncel firmware araştırılıyor.

 

tftp_server_adresi_örnek: 10.1.1.1 olsun.  Secondary için güncel firmwareler yüklendikten sonra active imaj o seçilerek reboot edildikten sonra sorun olmazsa primary içinde yüklenebilir.

 

hp 2615 serisi için firmware güncelleme ve config yedeği alma:

copy tftp flash 10.1.1.1 A_15_16_0021.swi secondary allow-no-signature

copy running-config tftp://10.1.1.1/config-backups/hp2615-192.168.1.11/config.cfg

hp 2610 serisi için:

copy tftp flash 10.1.1.1 R_11_123.swi secondary

copy running-config tftp://10.1.1.1/config-backups/hp2610-192.168.1.51/config.cfg

hp 2620 serisi için:

copy tftp flash 10.1.1.1 RA_16_04_0025.swi secondary

copy running-config tftp://10.1.1.1/config-backups/hp2620-192.168.1.91/config.cfg

dell 1524 ve 1548 serisi için:

copy tftp://10.1.1.1/N1500v6.7.1.21.stk active

write file tftp://10.1.1.1/config-backups/dell1500-192.168.1.111/config.cfg

 

Gerekli güncellemeleri yaptıktan sonra https://metacpan.org/pod/App::Netdisco adresinden açık kaynaklı web destekli snmp ile cihazların her türlü bilgilerini toplayan güzel bir yazılım Netdisco‘yuda kurarsanız tadından yenmez.

 

Cisco anahtarlarda konfig yedeğini tftp sunucusuna yollama:

Periyodik yedeklemede Cisco IOS güzel/kullanışlı archive komutunu sunuyor.

archive

path tftp://10.1.1.1/config-backups/cisco-192.168.1.2/

maximum 14

time-period 60

write-memory

 

burada time-period 60 dk yani 1 saati ifade eder. Yedekleme sıklığını uzatmak istersek mesela 24 saatte bir için time-period 1440 set edilir.

 

Umarım faydalı olur 🙂

 

 

Şub 13

iRedMail (Open Source Mail Server Solution) IMAP’te silinen postaların kaydı

 

  • İredmail açık kaynaklı mail çözümlerinden, zimbra ve Zextras‘ta var piyasada incelendiğinde hatta bunların bileşenlerini kendimizde entegre ederek kurulum yapabiliriz.
  • Postfix, dovecot, amavis, clamav ve spamassasian İredmail’in saz arkadaşları.
  • Bunlara ilave proxmox mail gw, rsamd ve roundcubemail sistemin iyileştirmelerinde ve kullanım kolaylıklarında öncülük ediyor, Mail kotanız kısıtlı ise thunderbird son kullanıcı için kullanılabilir.

Burada amacımız son kullanıcının sildiği maillerin kaydının loglanması:

pico /etc/dovecot/dovecot.conf dosyasının  mail_plugins kısmına  notify mail_log eklenerek bu iş kolayca hallediliyor. Detaylar için mail_log_plugin kısmını okumakta fayda var.

İlgili dosyanın içeriği:

# Listen addresses.
#   – ‘*’ means all available IPv4 addresses.
#   – ‘[::]’ means all available IPv6 addresses.
# Listen on all available addresses by default
listen = * [::]

#base_dir = /var/run/dovecot
mail_plugins = quota mailbox_alias acl notify mail_log

Dovecot servisini restart etmeden öncesinde config kontrol etme:

Dovecot_config_check adresten detaylı bilgi alınabilir.

doveconf 1>/dev/null
echo $?

çıktı 0 ise sorun yok 0’dan farklı değer ise config’te sorun var.

grep “delete” /var/log/mail/dovecot.log | grep -E “parmaksiz|huseyin” ile loglar süzülebilir.

Feb 31 01:54:37 imap(hxx.parmaksiz@xxx.edu.tr): Info: delete: box=Trash, uid=37000, msgid=<5c6b6f9435cfbde6cd44d@xxx.edu.tr>, size=3210
Feb 31 02:00:17 imap(mxx.parmaksiz@xxx.edu.tr): Info: delete: box=INBOX, uid=131000, msgid=<34b506d546554354e78@web.xxx.edu.tr>, size=1234

Eski yazılar «