Centos 7.7 (1908) de Python 2.7 ile MSSQL db ye baglanti saglanmasi.

1 – Aşağıdaki komutları çalıştrıyoruz. En alttaki satirda hata verirse “pip” paketini kuruyoruz (sitede nasıl kurulduğu vardır).

yum install unixODBC unixODBC-devel
yum install gcc-c++
yum install python-devel
pip install pyodbc

2 – Python ile mssql db ye baglantinin test edilmesi;

#!/usr/bin/env python
#-*- coding: utf-8 -*-

import pyodbc

################## TANIMLAR #####################
dsn = 'mssql_server'
user = 'db_username'
password = 'db_password'
database = 'MXXXXXXS'
################## TANIMLAR #####################

def kullanici_liste():
	con_string = 'DSN=%s;UID=%s;PWD=%s;DATABASE=%s;' % (dsn, user, password, database)
	con = pyodbc.connect(con_string)
	cur = con.cursor()
	cur.execute("SELECT e.firstname, e.lastname,e.posref FROM LOCATION_ACTIVITY_DB.dbo.EMPLOYEE e")
	
	while (1):
		row = cur.fetchone ()
		if row == None:
			break
		print "%s %s " %(row[1],row[2])

kullanici_liste()

Centos 7.7 (1908) de Python 2.7 ile Oracle db ye baglanti saglanmasi.

1 – Önce oracle client yüklenir. Sonra aşağıdaki komutlar çalıştırılır;

yum install libaio
echo "/usr/lib/oracle/11.2/client64/lib" >/etc/ld.so.conf.d/oracle.conf
ldconfig
yum install epel-release
yum install gcc python-pip.noarch python-devel
pip install cx_Oracle

2 – Eğer son satırdaki “pip” paketi yüklü değilse hata verecektir. Paketi aşağıdaki gibi yüklüyoruz;

yum install gcc openssl-devel bzip2-devel
curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py"
python2.7 get-pip.py
pip install cx_Oracle

Python ile oracle db ye bağlantının test edilmesi:

#!/usr/bin/env python
#-*- coding: utf-8 -*-

import cx_Oracle
conn_str = "PROXXX/PROXXX@192.168.1.XXX:1521/XX"
conn = cx_Oracle.connect(conn_str)
c = conn.cursor()
c.execute("SELECT * FROM PRO_XXX_RESERVATIONINFO WHERE ROWNUM <= 10")
for row in c:
    print row[0], "-", row[1], "-", row[2], "-", row[3], "-", row[4]
conn.close()

Kaynaklar:

1 – https://tecadmin.net/install-python-2-7-on-centos-rhel/

2 – https://www.mylinuxplace.com/install-cx_oracle-on-centos-7/

Centos 7.7 (1908) de MSSQL baglatisi icin FreeTDS, ODBC kurulumu ve Php 5.4 ile baglantinin saglanmasi.

1 – “yum -y update” ile güncelleme yapalım.

2 – ” yum -y install php-odbc php-pdo unixODBC unixODBC-devel” ile odbc paketlerini kuralım.

3 – Aşağıdaki komutlarla epel ve freetds kuralım;

yum install epel-release
yum check-update
yum install freetds freetds-devel

4 – “/etc/freetds.conf” dosyasını açıp en alta aşağıdaki kodu yapıştıralım;

# Mssql server
[mssql_server]
host = 192.168.1.XXX
port = 1433
tds version = 7.4

5 – Bağlanacağımız sql server ile bağlantımızın olup olmadığını telnet ile kontrol etmekte fayda var;

“telnet 192.168.1.XXX 1433” yazdığımızda servera bağlantı yapabiliyorsak devam ediyoruz. Sistemde telnet yüklü değilse, “yum install -y telnet” ile yüklüyoruz.

6 – ” /etc/odbcinst.ini” dosyasını açıp en alta aşağıdaki kodu yapıştıralım;

[ODBC]
Trace = No
TraceFile = /tmp/sql.log
ForceTrace = No
 
[FreeTDS]
Driver = /usr/lib64/libtdsodbc.so.0
FileUsage = 1 

7 – “/etc/odbc.ini” dosyası varsa açalım, yoksa biz oluşturalım ve dosyanın içine aşağıdaki kodu ekleyelim;

 # Ms sql baglantisi
 [mssql_server]
 Description = mssql baglanti
 Driver = FreeTDS
 Trace = No
 Server = 192.168.1.XXX
 Database = MXXXXXXS (Databese adı)
 Port = 1433

8 – Centos’ta selinux aktif ise (default aktif), aşağıdaki komutlarla http üzerinden mssql bağlantısına izin verelim;

setsebool -P httpd_can_network_connect on
setsebool -P httpd_can_network_connect_db on

9 – Komut satırıyla bağlantının test edilmesi;

osql -S MyMSSQLServerName -U myusername -P mypassword

PHP ile baglantinin test edilmesi:

<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
	
$baglanti = odbc_connect("mssql_server","db_username","db_password"); 	
	
 if ($baglanti)
    	    echo "<span style='color:green'>Baglandi</span>"."</br>"; 	
	
$sorgu = odbc_exec($baglanti,"SELECT e.firstname, e.lastname,e.posref FROM LOCATION_ACTIVITY_DB.dbo.EMPLOYEE e");

while( $row = odbc_fetch_array($sorgu) ){
  echo $row["firstname"]." ".$row["lastname"]."<br>";
}

?>

Kaynaklar :

1 – https://fotografia.clerigo.pt/how-to-install-freetds-unixodbc-on-centos-7-with-php-5-6-to-access-sql-server-databases/

2 – http://www.stevepiercy.com/articles/how-to-install-and-configure-freetds-as-an-odbc-connector-to-microsoft-sql-server-on-centosrhel-for-lasso-9/

Centos 7.7 (1908) de Oracle client (11.2) kurulumu ve Php 5.4 ile baglanti saglanmasi.

Oracle client kurulumu:

1- Oncelikle https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html sayfasindan kurulacak versiyonun belirlenmesi.

11.2 versiyonunun basic, devel ve sqlplus paketlerini indirip centos’un /tmp klasorune kopyaliyoruz.

2- Putty ile Centos’a bağlanıp, tmp klasöründeki oracle client rpm dosyalarını kuruyoruz;

rpm -Uvh oracle-instantclient11.2-*

3- “export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib/” komutuyla link olusturuyoruz.

4- /usr/lib/oracle/11.2/client64/bin/sqlplus PROISV/PROISV@//192.168.1.XXX:1521/XX komutuyla oracle clientin çalışıp çalışmadığını test ediyoruz. Eğer aşağıdaki gibi bir ekran geldiyse oracle client kurulumu tamamdır;

oracle client test baglantisi.

Php oci8 kurulumu:

1- Şimdi sıra, php den oracle db ye bağlanabilmemiz için oci8 paketini kurmaya geldi. Bunun için https://pecl.php.net/package/oci8 adresinden oci8-1.4.7.tgz paketini indirip centos /tmp klasorune kopyalayin.

2- Aşağıdaki komutları uygulayarak paketi kuralım;

tar -xzf oci8-1.4.7.tgz
cd oci8-1.4.7
phpize (eğer burda hata verirse, “php-devel” paketi kurulması gerekir kurulum komutu : yum install -y php-devel)
./configure –with-oci8=instantclient,/usr/lib/oracle/11.2/client64/lib
make install

Not : Son satırda kurulumda hata alırsanız, muhtemelen sistemde “gcc” yüklü değildir, “yum install -y gcc” ile yükleyebilirsiniz.

3- /etc/php.ini dosyasi acilir ve extension kısmına “extension=oci8.so” satırı eklenir, kaydedilip kapatılır.

4- “systemctl restart httpd” ile apache restart edilir.

5- Extensionun kurulup kurulmadığı “phpinfo.php” çalıştırılarak kontrol edilir. phpinfo.php içeriği;

<?php
phpinfo();
?>

Çıkan listede “oci8” varsa, extension kurulmuştur.

Son aşama olarak php den oracle db ye bağlanma ve test edilmesi;

<?php

	ini_set('display_errors', 1);
	ini_set('display_startup_errors', 1);
	error_reporting(E_ALL);

	$db = "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.XXX)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=XX)))";
	if($conn = OCILogon("PROISV", "PROISV", $db))
	{
		echo "Bağlandı.<br>";
	}
	else
	{
		$err = OCIError();
		echo "Bağlanamadı. " . $err[text];
	}
	
$stid = oci_parse($conn, 'SELECT * FROM XXX_XXX_RESERVATIONINFO WHERE ROWNUM <= 10');
oci_execute($stid);

while (($row = oci_fetch_array($stid, OCI_BOTH)) != false) {
	echo "$row[2] $row[3] $row[5] $row[6] $row[7] $row[8] $row[9] $row[10]<br>";
  
}
oci_free_statement($stid);
oci_close($conn);
?>

Kod çalıştırıldığında ekrana 10 adet kayıt geliyorsa, Centos 7 ye kurduğumuz oracle client 11.2 ve php 5.4 ile bağlantımız tamamlanmıştır :))

Not1 : Centosta Selinux aktif ise, oracle bağlantıda hata verebilir. Eğer hata verirse aşağıdaki komutla bağlantı sağlanabilir;

setsebool -P httpd_can_network_connect on

veya; “sestatus” ile selinux durumuna bakılır. Current mode enforcing ise, “setenforce 0” ile selinux disable edilebilir. Tekrar enable etmek : “setenforce 1”

Kaynak : https://developer.oracle.com/dsl/technote-php-instant.html

PfSense 5651 loglarının Python ile maille gonderimi.

Bu script ile günlük alınan 5651 logların maile gönderilmesini sağlayacağız.

Sisteme python3 yüklüyoruz. Not : Burada anlatılanlar 2.4.4-RELEASE (amd64) sürümü için geçerlidir. Anlatılanlar diğer sürümlerde farklılık gösterebilir.

Komut satırından “pkg update && pkg install -y python3 ” ile python3 yüklenir.

“/var/TIB5651Tr/PFSenseTIB5651.pl” altındaki dosya açılır ve 62.satırdaki “$call_MAIL = “/usr/local/bin/perl /var/TIB5651Tr/PFSenseMAIL.pl”;” satırı silinir veya başına “#” işareti konur.

Ve alt satıra “$call_MAIL = “/usr/local/bin/python3 /var/TIB5651Tr/mail5651.py”;” satırı eklenir. Burada Python3 ün sistemdeki yerini uzun yol ile yazdır. Sizin python3 ün sistemdeki yeri neresi ise onu yazınız (Not : Sistemdeki yerini “find / -name python3 yazarak bulabilirsiniz).

Burada “mail5651.py” adında bir dosya çalıştırılacağa benziyor. Bu dosya logları maille gönderecek dosyadır. mail5651.py içeriği ise aşağıdaki gibidir;

#!/usr/bin/env python
# encoding: latin5
“””

Python3 ile 5651 loglarinin maille gonderilmesi.

Bu script Python 3.x ile calisir.

“””

import os
import smtplib
from email import encoders
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart

COMMASPACE = ‘, ‘

def mail_gonder():
sender = ‘mail_adresi@xxx.com’
gmail_password = ‘mail_sifresi’
recipients = [‘alici_adresi@yyy.com’]

# Create the enclosing (outer) message
outer = MIMEMultipart()
outer[‘Subject’] = ‘TIB5651-Günlük analiz raporu’
outer[‘To’] = COMMASPACE.join(recipients)
outer[‘From’] = sender
outer.preamble = ‘You will not see this in a MIME-aware mail reader.\n’

# List of attachments
attachments = [‘/var/TIB5651Tr/Tib5651_Admin/FormTIB5651_Admin.txt’,’/var/TIB5651Tr/Tib5651_Yasal/FormTIB5651.txt’]

# Add the attachments to the message
for file in attachments:
try:
with open(file, ‘rb’) as fp:
msg = MIMEBase(‘application’, “octet-stream”)
msg.set_payload(fp.read())
encoders.encode_base64(msg)
msg.add_header(‘Content-Disposition’, ‘attachment’, filename=os.path.basename(file))
outer.attach(msg)
except:
print(“Hata: “, sys.exc_info()[0])
raise

composed = outer.as_string()

# Send the email
try:
with smtplib.SMTP(‘mail.sunucu.com’, 587) as s:
s.ehlo()
s.starttls()
s.ehlo()
s.login(sender, gmail_password)
s.sendmail(sender, recipients, composed)
s.close()
print(“Email gonderildi!”)
except:
print(“Email gonderilemedi. Hata : “, sys.exc_info()[0])
raise

################## ANA BLOK ################

mail_gonder()

Scriptteki mail gönderimi için gerekli yerleri doldurarak (sunucu adres, mail adres ve şifre) logları maille gönderebilirsiniz. Bu scriptte  2 tane dosya gönderiliyor (/var/TIB5651Tr/Tib5651_Admin/FormTIB5651_Admin.txt’,’/var/TIB5651Tr/Tib5651_Yasal/FormTIB5651.txt’)

Bu arada 5651 perl scriptlerini açarak perl’in sistemdeki yolunu yazalım (Benim sistemde perlin uzun yolu : “/usr/local/bin/perl”).

Örnek “PFSenseTIB5651.pl” dosyasını açın ve 58.satırı şöyle yapın : “$call_dailyREFRESH = “/usr/local/bin/perl /var/TIB5651Tr/PFSenseDAILY.pl”;” gibi..

Bunu neden yapıyoruz; çünkü farklı sürümlerde perl’in sistemdeki yeri değişiyor bu nedenle de scriptler çalışmıyor.

Scriptler çalışmazsa python veya perlin sistemdeki yerlerini kontrol ederek adım adım hataları gideriyoruz. Son olarak, pythonun kullandığı scriptin başındaki “import” ve “from” kütüphaneleri, sisteminizde yüklü değilse yükleyiniz.

Logları python ile göndermemizin sebebi ise, sisteme python kurulduktan sonra mail gönderme yanında birçok islemi python yardımıyla kolayca yapabilirsiniz. Çünkü python, perl’e göre anlaşılması, program yazılması daha kolay ve popüler bir dildir.

pfsense 5651 cron scripti çalışmazsa yapılacaklar.

Problem tanımı : Pfsense de 5651 log alma scriptini kurdunuz ancak 5 dk.da bir alınan arp listesi ve gece 23:59 da alınan loglar alınamıyorsa scriptte tanımlı perl ve sh yolları hatalıdır.

Komut satırında “find / -name perl” ile perlin yüklü olduğu dizin bulunur. Muhtemelen o dizin “/usr/local/bin/perl” dir.

Komut satırında “find / -name arp” ile arp nin yüklü olduğu dizin bulunur. Muhtemelen o dizin “/usr/sbin/arp” dir.

________________________________________________________________________________________________________________________

“TIB5651ARPrun.sh” içeriği şöyle olmalı;

/usr/sbin/arp -a > /var/TIB5651Tr/TibDailyControl/Arp.lst
/usr/local/bin/perl /var/TIB5651Tr/PFSenseDAILY.pl

ardından “/var/TIB5651Tr/PFSenseDAILY.pl” dosyası açılır ve 12.satırdaki kod aşağıdaki gibi yapılır;

$callparseLEASES = “/usr/local/bin/perl /var/TIB5651Tr/SB_PSDailyLeases.pl”;

Sonrasında arp listesinin ve gece logların alındığı görülür.