Category Archives: Sistem Yönetimi

Developing Realsense Application on UP Squared Board

Install Ubuntu 16.04:

Flash the image on a USB stick and install on Up2 Board.

Update the system:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade

At this point I received some errors like:

W: Possible missing firmware /lib/firmware/i915/kbl_guc_ver9_14.bin for module i915
W: Possible missing firmware /lib/firmware/i915/bxt_guc_ver8_7.bin for module i915

I installed the missing firmware files which I downloaded from https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/tree/i915.

sudo cp kbl_guc_ver9_14.bin /lib/firmware/i915 
sudo cp bxt_guc_ver8_7.bin /lib/firmware/i915

 

sudo update-grub && sudo reboot

# verify that you have a supported kernel version (4.4.0-.., 4.8.0-.., 4.10.0-.. , 4.13.0-..or 4.15.0-.. as of May 2018)
uname -r

 

Install CMake

Download the source code from https://cmake.org/download/.

./bootstrap
make
make install

 

Install OpenCV

# To build
sudo apt-get install build-essential 
sudo apt-get install git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev

# To process images:
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

# To process videos:
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get install libxvidcore-dev libx264-dev

# For GUI:
sudo apt-get install libgtk-3-dev

# For optimization
sudo apt-get install libatlas-base-dev gfortran pylint

# To build for Python2 and Python3
sudo apt-get install python2.7-dev python3.5-dev
wget https://github.com/opencv/opencv/archive/3.4.0.zip -O opencv-3.4.0.zip

wget https://github.com/opencv/opencv_contrib/archive/3.4.0.zip -O opencv_contrib-3.4.0.zip

sudo apt-get install unzip
unzip opencv-3.4.0.zip
unzip opencv_contrib-3.4.0.zip

cd  opencv-3.4.0
mkdir build
cd build

cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local -DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-3.4.0/modules -DOPENCV_ENABLE_NONFREE=True ..


# Build
# Up2 Board has 2 cores
make -j2

# Install in the location /usr/local using command
sudo make install

# Reinitialize static libs using the following command
sudo ldconfig

Build librealsense

sudo apt-get install git libssl-dev libusb-1.0-0-dev pkg-config libgtk-3-dev

git clone https://github.com/IntelRealSense/librealsense

cd librealsense
sudo cp config/99-realsense-libusb.rules /etc/udev/rules.d/ 
sudo udevadm control --reload-rules && udevadm trigger 

# patch the kernel
./scripts/patch-realsense-ubuntu-lts.sh

# Build
mkdir build && cd build
cmake ../ -DBUILD_EXAMPLES=true -DBUILD_CV_EXAMPLES=true

sudo make uninstall
make clean
make -j2
sudo make install

Install QtCreator:

wget http://download.qt.io/official_releases/qt/5.7/5.7.0/qt-opensource-linux-x64-5.7.0.run

chmod +x qt-opensource-linux-x64-5.7.0.run
./qt-opensource-linux-x64-5.7.0.run

sudo apt-get install libfontconfig1

Launch Qt Creator

 

Resources:

 

TODO:

  • Check why OpenCV was not built for Python3.
  • Configure QtCreator

Ubuntu 16.04’te OpenCV Derlemek

Anaconda’nın içindeki Python’ı kullanmak istediğimde hata aldım. Ubuntu ile gelen Python’ı kullandım.

cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local  \
    -D INSTALL_PYTHON_EXAMPLES=ON \
    -D INSTALL_C_EXAMPLES=OFF \
    -D BUILD_EXAMPLES=ON \
    -D PYTHON_INCLUDE_DIR=~/anaconda3/include/python3.6m \
    -D PYTHON_LIBRARY=~/anaconda3/lib/libpython3.6m.so \
    -D PYTHON2_EXECUTABLE=/usr/bin/python2.7 \
    -D PYTHON2_INCLUDE_PATH=/usr/lib/python2.7/dist-packages \
    -D PYTHON2_LIBRARIES=/usr/lib/x86_64-linux-gnu/libpython2.7.so \
    -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules ../

make -j4
sudo make install
sudo ldconfig

Kaynak: http://www.pyimagesearch.com/2016/10/24/ubuntu-16-04-how-to-install-opencv/

Bütün OpenWrt paketlerini tek komutta güncellemek

opkg list-upgradable | awk -F ' - ' '{print $1}' | xargs opkg upgrade

 

   _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M

Systemctl ile Systemd Servislerini Yönetmek

Bir ilklendirme sisteminin (init system) amacı Linux kerneli ayağa kalktıktan (boot ettikten) sonra başlatılması gereken bileşenleri ilklendirmektir. İlklendirme sistemi, sistem başladıktan sonra herhangi br zamanda servisleri ve arka planda çalışan programları (daemon) kontrol etmek için de kullanılır.

systemd Linux dağıtımları arasında hızla yaygınlaşan bir ilklendirme sistemi ve sistem yöneticisidir. Ubuntu da 16.04 versiyonunda eskiden kullandığı Upstart’ı systemd ile değiştirdi. systemctl komutu ise systemd’yi kontrol etmeye yarayan temel komuttur.

Continue reading

Cloudflare API’ına Konsoldan Erişmek

Cloudflare neredeyse bütün fonksiyonlarını kontrol edebileceğiniz bir API sunuyor. Bunu PHP, Perl, Java, Python vs. çeşitli dillerde yazdığınız programlarda kullanabilirsiniz. Ayrıntılı döküman şurada: https://www.cloudflare.com/docs/client-api.html

Daha önce Apache loglarını inceleyip XMLRPC saldırısı yapan IP’leri belirleyen bir betik yazmıştım. Tespit ettiği IP’leri bana eposta ile bana gönderiyordu. Şimdi bunu güncelleyip, otomatik olarak Cloudflare Firewall’undan engelleyen bir hale çevirdim. Son hali şöyle oldu:

 

#!/bin/bash
if [ "$#" -ne 1 ];
then
  LIMIT=100
else
  LIMIT=$1
fi
 
MY_EMAIL=""
CLOUDFLARE_API_KEY=""
DATE=`date`
LIST="\nMore than $LIMIT:"
WARNING="\nMore than $LIMIT:\n"
IPTABLES="\niptables command:"
TOTAL=0
 
echo -e "### xmlrpc Attack Detection ###\n$DATE\n"
 
for IP in $(grep "POST /xmlrpc.php" /var/log/apache2/access*log | awk '{print $1}' | awk -F ':' '{print $2}' | sort | uniq)
do
  COUNT=`grep $IP /var/log/apache2/*.log | grep xmlrpc.php | wc -l`
 
  if [[ "$COUNT" -gt $LIMIT ]];
  then
    CLOUDFLARE=`curl -s https://www.cloudflare.com/api_json.html \
      -d 'a=ban' \
      -d 'key='$IP \
      -d 'tkn='$CLOUDFLARE_API_KEY \
      -d 'email='$MY_EMAIL`
 
    echo "IP: $IP count: $COUNT"
    LIST="$LIST\n$IP"
    WARNING="$WARNING\n$IP     => count: $COUNT\n$CLOUDFLARE\n"
    IPTABLES="$IPTABLES\niptables -I INPUT 1 -s $IP -j DROP"
    ((TOTAL=$TOTAL+1))
  fi
done
echo "Total: $TOTAL IP addresses"
 
echo -e $LIST
echo -e $IPTABLES
 
if [[ "$TOTAL" -gt 0 ]];
  then
  echo -e $WARNING |mail -s "xmlrpc attack warning" $MY_EMAIL
fi

iptables’da Belirli Bir Satırı Silmek

iptables kurallarını satır numaralarıyla görmek için:

iptables -vnL --line-numbers

 

Daha sonra 14 numaralı satırı silmek için:

iptables -D INPUT 14

 

Web Sunucusu İçin Basit Bir iptables Yapılandırması

Basit bir web sunucusunda güvenlik için Apache, MySQL, DNS, FTP ve SSH servislerinin kullandığı portlar dışında kalanları engellemek gerek.

Aşağıdaki betikte SSH için 22. portun kullanıldığı varsayılmıştır. MySQL varsayılan ayarlarıyla çalıştırıldığında 3306 portunu kullanır. Aşağıdaki betikte localhost’tan gelen tüm paketleri kabul etmek için loopback arayüzünden gelen tüm paketlere izin verilmiştir. Bu sayede MySQL dışında localhost’tan çalışan diğer uygulamalara da izin verilmiş oldu. FTP işi biraz daha çetrefilli. FTP aktif modla bağlandığında 21. portu kontrol için, 20. portu da veri iletimi için kullanır. Ama pasif modla bağlandığında ilk bağlantıdan sonra FTP istemcisi daha yüksek portları da kullanmak isteyebilir. Bunun için ip_conntrack çekirdek modülü kullanılarak kurulmuş bağlantılarla ilgili olan bağlantılara izin verilmiştir. ip_conntrack’in yüklenmesi aşağıda açıklanmıştır.

Bazı IP’lerin ve subnet’lerin yasaklanması için örnek satırlar da verilmiştir. Yanlışlıkla engellenmemesi için Cloudflare CDN hizmetinin kullandığı IP adresleri beyaz listeye alınmıştır.

iptables kuralları yukarıdan aşağıya doğru işletilir, gelen paketin uyduğu ilk satır işlendikten sonra diğerleri atlanır. Kuralların sonuna kadar gelindiğinde, bir paket için hala uygun bir kural bulunamamışsa, prensip (Policy) işletilir. Aşağıdaki örnekte prensip DROP olarak belirlenmiştir.

### IP v4 ###

# SSH
iptables -I INPUT -p tcp --dport 22 -j ACCEPT

# Web
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

# MySQL (ve localhost'tan gelen diğer istekler) 
iptables -I INPUT -i lo -j ACCEPT

# FTP
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 20 -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# DNS
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j ACCEPT

# Yasaklı IPler
iptables -I INPUT 3 -s YASAKLI_IP/24 -j DROP
iptables -I INPUT 3 -s YASAKLI_IP -j DROP

# Cloudflare
iptables -I INPUT 3 -s 103.21.244.0/22 -j ACCEPT
iptables -I INPUT 3 -s 103.22.200.0/22 -j ACCEPT
iptables -I INPUT 3 -s 103.31.4.0/22 -j ACCEPT
iptables -I INPUT 3 -s 104.16.0.0/12 -j ACCEPT
iptables -I INPUT 3 -s 108.162.192.0/18 -j ACCEPT
iptables -I INPUT 3 -s 141.101.64.0/18 -j ACCEPT
iptables -I INPUT 3 -s 162.158.0.0/15 -j ACCEPT
iptables -I INPUT 3 -s 172.64.0.0/13 -j ACCEPT
iptables -I INPUT 3 -s 173.245.48.0/20 -j ACCEPT
iptables -I INPUT 3 -s 188.114.96.0/20 -j ACCEPT
iptables -I INPUT 3 -s 190.93.240.0/20 -j ACCEPT
iptables -I INPUT 3 -s 197.234.240.0/22 -j ACCEPT
iptables -I INPUT 3 -s 198.41.128.0/17 -j ACCEPT
iptables -I INPUT 3 -s 199.27.128.0/21 -j ACCEPT

# Policy
iptables -P INPUT DROP

### IP v6 ###

# Web
ip6tables -A INPUT -p tcp --dport 80 -j ACCEPT

# MySQL
ip6tables -I INPUT -i lo -j ACCEPT

# DNS
ip6tables -A INPUT -p tcp --dport 53 -j ACCEPT
ip6tables -A INPUT -p udp --dport 53 -j ACCEPT

# Yasaklı IPler

# Cloudflare
ip6tables -I INPUT 3 -s 2400:cb00::/32 -j ACCEPT
ip6tables -I INPUT 3 -s 2405:8100::/32 -j ACCEPT
ip6tables -I INPUT 3 -s 2405:b500::/32 -j ACCEPT
ip6tables -I INPUT 3 -s 2606:4700::/32 -j ACCEPT
ip6tables -I INPUT 3 -s 2803:f800::/32 -j ACCEPT

# Policy
ip6tables -P INPUT DROP

ip_conntrack modülünü yüklemek için şu komutu kullanabilirsiniz:

modprobe ip_conntrack_ftp

iptables kuralları bilgisayar yeniden başlatıldığında silinir. Kurallarınızı kaydetmek için iptables-persistent programını yükleyebilirsiniz:

apt-get install iptables-persistent

Bu program kurallarınızı /etc/iptables/rules.v4 ve /etc/iptables/rules.v6 dosyalarına kaydeder ve sistem tekrar başlatıldığında tekrar bu dosyalardan yükler.

ip_conntrack modülünün bilgisayar yeniden başlatıldığında tekrar yüklenmesi için ise /etc/init.d/iptables-persistent dosyasında load_rules() fonksiyonunun en üstüne aşağıdaki satırı ekleyebilirsiniz:

 /sbin/modprobe -q ip_conntrack_ftp

 

Kaynak:
http://bencane.com/2012/09/iptables-linux-firewall-rules-for-a-basic-web-server/
https://www.cloudflare.com/ips

Sitenize dadanmış sömürgenleri bulun

Apache loglarını incelerken bazı IP’lerden arka arkaya çok fazla istek geldiğini farkettim. Ama gözle bunları tespit etmek neredeyse imkansız olduğu için C++ ile şöyle bir programcık yazdım.

sivri

/*
* copyLeft by Mustafa Aldemir
* 18.05.2015
* find the IPs that make too many requests 
*/
#include <stdlib.h>
#include <string>
#include <iostream>
#include <map>
 
using namespace std;
 
int main(int argc, char* argv[])
{
  map<string, int> mymap;
  string s;
  int limit;
  int size;
 
  if(argc==2){
    limit = atoi(argv[1]);
  } else {
    cout << "Usage:" << endl << "tail -f /var/log/apache2/access.log | awk -Winteractive '{print $1}' | findleechers 10" << endl;
    return 0;
  }
 
  cout << "limit: " << limit <<endl;
 
  while (cin >> s)
  {
    if ( mymap.count(s)>0 ){
      mymap[s]++;
      if ( (limit <= mymap[s]) && (0 == (mymap[s]%limit)) ){
        cout << s << " " << mymap[s] << endl;                                                                                            
      }                                                                                                                                  
    } else {
      mymap.insert( pair<string,int>(s,1) );
    }
 
    size = mymap.size();
    if(10000 < size){
      cout << "Exiting: size has grown too big" << endl;
      return 0;
    }
    /*
    if(0 == (size % 100)){
      cout << "map size: " << size << endl;
    }
    */
  }
 
 return 0;
}
 

 

Derlemek için:

g++ findleechers.cpp  -o findleechers 

 

Derledikten sonra diğer kendi yazdığım programların yanına /usr/local/bin klasörüne taşıdım.

Çalıştırmak için şu komutu kullanıyorum:

tail -f /var/log/apache2/access.log | awk -Winteractive '{print $1}' | findleechers 10

 

Bu programı çalıştırmaya çalışırken yeni bir şey öğrendim. awk komutu veriyi tamponluyormuş (buffer) [1]. Yani, awk’ın çalışması bitene kadar findleechers borudan (pipe) bir şey alamıyordu. tail komutunu da -f ile çalıştırdığım için awk’ın çalışması hiç bitmiyordu. -W interactive parametresi ile kendisine gelen veriyi buffer’lamadan çalışmasını sağladım.

Kaynak:
[1] http://www.perkin.org.uk/posts/how-to-fix-stdio-buffering.html

iptables Çalışması Yaparken Kendinizi Engellemeyin

Birkaç kez başıma geldiği için iptables kurallarında değişiklik yaparken kendi kendimi sunucuya erişemez hale getirmemek için mümkün olduğunca dikkatli davranıyorum. Kendimi de engelleyecek bir kural yaz ihtimaline karşı bir önlem olarak aşağıdaki script’i crontab’a koyup 5 dakikada bir çalıştırıyorum. Bu sayede en kötü ihtimalle 5 dk sonra iptables kuralları temizleniyor ve sunucuya erişebiliyorum.

Not: Ben bu script’i Ubuntu sunucuda kullanıyorum. iptables’ı Redhat, Centos vb. işletim sistemlerinde /etc/init.d/iptables stop ile durdurmak yeterliymiş.

#!/bin/bash
# reset.fw – Reset firewall
# Written by Vivek Gite [email protected]
# You can copy / paste / redistribute this script under GPL version 2.0 or above
# =============================================================

IPT=/sbin/iptables
IPT6=/sbin/ip6tables

### reset ipv4 iptales ###
$IPT -F
$IPT -X
$IPT -Z
for table in $(chmod +x /usr/local/bin/reset_fw.sh

Sonra da cron’a 5 dakikada bir çalıştırılmak üzere kaydettim.

crontab -e
*/5 * * * * /usr/local/bin/resetfw.sh >/dev/null 2>&1

Ubuntu Güncelleme Problemi

Ubuntu’da güncelleme yapmak istediğimde şöyle bir hata mesajı aldım:

# sudo apt-get update
Failed to fetch http://de.archive.ubuntu.com/ubuntu/dists/trusty-updates/universe/source/Sources Hash Sum mismatch

Güncelleme için indirilen paketlerde bir sıkıntı olduğunu düşünüp şunu yaptım:

# sudo apt-get clean
rm -rf /var/lib/apt/lists/*
rm -rf /var/lib/apt/lists/partial/*
apt-get clean
apt-get update

ama bu sefer de şöyle bir hata aldım:

W: GPG error: http://de.archive.ubuntu.com trusty-updates Release: The following signatures were invalid: BADSIG 40976EAF437D05B5 Ubuntu Archive Automatic Signing Key

ben de önce bir kernel güncellemesi yaptım, sonra da autoremove’la eski kernel paketlerini kaldırdım:

# sudo apt-get dist-upgrade
# sudo apt-get upgrade
# sudo apt-get autoremove

şu uyarı bir an için tedirgin etti, sonuçta uzaktaki bir makine, boot esnasında oluşan bir probleme müdahale etmek zahmetli.

The link /vmlinuz.old is a damaged link
Removing symbolic link vmlinuz.old
you may need to re-run your boot loader[grub]

ama sadece GRUB’ı güncellemek yeterliymiş:

#sudo update-grub
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.13.0-46-generic
Found initrd image: /boot/initrd.img-3.13.0-46-generic
Found linux image: /boot/vmlinuz-3.13.0-35-generic
Found initrd image: /boot/initrd.img-3.13.0-35-generic
done

şimdi herşey yolunda