Güvenlik duvarınızı yenileyin – OPNSense ..!

OPNSense

BSD tarafından gelen Packet Filter (PF) yüksek performansı, güvenilirliği ve hızı sebebi ile firewall uygulamalarında çok güvenilmekte ve tercih edilmektedir. OPNSense’de çekirdeğinde PF kullanan, çok başarılı bir güvenlik duvarı yazılımıdır. Aynı şekilde PF kullanan PFSense güvenlik duvarından türemiş olan OPNSense geliştiricileri, bu şekilde bir ürün ortaya çıkarmalarının sebebini “Zaten çok başarılı olan PFSense güvenlik duvarının zaafları olan karmaşık kodları düzenleyerek kodlların, kolay yönetilebilir ve rahatlıkla genişletilebilir hale gelmesini sağlamak” olarak açıklıyorlar.

Kısaca özelliklerine gelecek olursak;

  • Stateful inspection firewall
  • Granular control over state table
  • Network Address Translation (NAT)
  • Traffic Shaper
  • Captive portal
  • 802.1Q VLAN support
  • Virtual Private Network
  • Dynamic Domain Name System
  • Forward Caching Proxy (transparent) with Blacklist support
  • Virtual Private Network (site to site & road warrior, IPsec, OpenVPN & legacy PPTP support)
  • High Availability & Hardware Failover ( with configuration synchronization & synchronized state tables)
  • Intrusion Detection and Prevention
  • Build-in reporting and monitoring tools including RRD Graphs
  • Support for plugins
  • DHCP Server and Relay
  • Real Time Information

Yukarıdaki özellikler, OPNSense tarafından belirtilmiş olan özellik listesi. Bence tek bir madde olarak belirtilebilecek bazı özelliklerin sanki birden fazla olarak belirtimiş olması bir  nevi “Pazarlama Stratejisi” olarak gözükse bile yine de gayet yetenekli bir güvenlik duvarı olduğu aşikar.

BSD ve PF tabanlı olması nedeni ile yeterli bir donanım üzerinde hız problemi yaşatmayan OPNSense’in, “High Availability” ve “Hardware Failover” özellikleri de gayet başarılı. CARP sayesinde “High Availability” ve “Hardware Failover” özelliklerini sağlayabilmek için OPNSense tarafında CARP kullanılıyor. Ayrıca “Configuration synchronization” ve “Synchronized State Table” özllikleri kullanılarak, kesintisiz bir şekilde çalışacak “Failover” senaryoları oluşturulabiliyor.

Yazının yazıldığı tarihteki güncel sürümü olan OPNSense’in 16.1 sürümü, FreeBSD 10.1 üzerine inşa edilmiş durumda. Kurulum için CD imaj dosyasının yanında SD kartlara kurulum için de imaj dosyası bulunuyor.

Sonraki bir yazıda bahsedeceğim kurulum prosedürü gayet kolay. Kurulum CD’sini sürücüye takıp sistemi başlattıktan sonra devreye giren kurulum arayüzü, gayet anlaşılır ve yeterli.

1 – 10 kullanıcılı bir ofis için 512MB RAM’a ve 500Mhz hızında tek  çekirdekli bir CPU’ya sahip basit bir gömülü sistem ya da atom tabanlı bir sistem rahatlıkla yeterli olabiliyor. Tabii ki kullanıcı sayısı arttıkça ve Güvenlik Duvarının ihtiyaç duyduğu donanımsal gereksinimler de hali ile artıyor…

İŞLEMCİ : 1.5 GHz çok çekirdekli işlemci
RAM : 4 GB
DİSK : 120 GB SSD

Yukarıdaki özelliklere sahip bir makina ile 50 – 150 kullanıcılı karmaşık bir networkte 350Mbps hızındaki Throughput değerlerine ualşılabileceği, OPNSense dökümanlarında belirtiliyor…

Güvenlik duvarınızı yenilemeyi, değiştirmeyi ya da ilk defa almayı düşünüyorsanız, ticari güvenlik duvarlarından hiç de aşağı kalmayan hatta bir çok özelliği ile onları geride bırakan OPNSense, açık kaynak kodlu mimarisi ile de rahatlıklar göz önüne alınması gereken bir alternatif…

“Managed Hosting” nedir ?

Firmaların bilişim ile ihtiyaçları, firmaların büyüklüklerine ve bulundukları sektöre göre çeşitlilik gösterebilmektedir. Takdir edersiniz ki, 20 – 30 kişinin çalıştığı bir tekstil firmasının bilişim konusundaki ihtiyaçları, benzer sayıda çalışanı olan bir turizm firmasından son derece farklıdır.

Fakat gene her firma, bir şekilde günlük kullandıkları yazılımlar için çeşitli ölçekte sunuculara ihtiyaç duymaktadırlar. Bazı firmalar sunucularını, kendi bünyelerinde tutmayı tercih ederken, bazıları da bir servis sağlayıcı ile anlaşıp, kiralama yoluna gitmeyi tercih etmektedirler.

“Managed Hosting” kavramı ise servis sağlayıcılardan sunucu kiralayan firmalar gözönüne alındığında ortaya çıkmaktadır. “Managed Hosting” hizmeti alındığı zaman, sadece boş bir sunucuyu kiralamış olmakla kalmaz, sunucunun yönetim hizmetini de servis sağlayıcıdan almaya başlamış olursunuz.

“Managed Hosting” hizmeti neden tercih edilmektedir ?

  1. “Managed Hosting” hizmeti, özellikle kendi IT personelini barındırma külfetine girmek istemeyen firmalar için çokça tercih edilen bir yöntemdir.
  2. Ofis içindeki ihtiyaçları karşılayacak IT personeline sahip olsa bile, sunucuları yönetecek kalifiye bir pesonelin maliyeti yerine, daha uygun maliyeti nedeni ile de firmalar “Managed Hosting” hizmetini tercih edebilmektedirler.
  3. Hatta kendi IT departmanına sahip firmalar bile, kendi IT personelinin yükünü azaltmak için bu hizmete yönelebilmektedirler.

“Managed Hosting” hizmetinin içeriği ile beraber fiyatı da değişiklik gösterebilmektedir. Hizmet antlaşmasına, yedeklerin alınması, sunucu üzerindeki servislerin ve programların düzgün çalışıp çalışmadığının kontrolü, yeni uygulamaların yüklenmesi ve bakımı, düzenli olarak güncellemelerin yüklenmesi v.b. maddeler eklendikçe, doğal olarak maliyet de yükselmektedir. Ama gene de özellikle ufak firmalar için bu maliyet, kalifiye bir IT personeli barındırmaktan daha ucuza gelmektedir.

JBOSS EAP üzerinde çoklu örnek(instance) kurulumu …

JBOSS EAP’ı çoklu örnek olarak çalıştırmanız gereken durumlar muhakkak olmuştur. Bu yazıda, Linux(CentOS 6) üzerinde kendi kullandığım yöntemi anlatıyor olacağım…

Çoklu kurulumda, aşağıdakileri sağlamayı amaçladım.

  1. Kolay yönetilebilir olmalı
  2. Bakımı kolay olmalı
  3. Gereksiz yer kaplamamalı… Aşağıda da göreceğiniz üzere, tüm JBOSS klasörünün değil sadece içindeki “standalone” isimli klasörün kopyasını kullanarak farklı örnekler oluşturdum.
  4. Farklı ihtiyaçlara(farklı JDK v.b) cevap verebilmeli…

Bunu sağlayabilmek için aşağıdaki yolu izledim.

/opt/java klasörü içerisine Oracle JAVA 6, JAVA 7 ve JAVA 8 JDK’larının hem 32 hem 64 bitlik versiyonlarını yükledim. Ayrıca CentOS 6 depolarından OpenJDK’nın 1.6, 1.7 ve 1.8 versiyonlarını indirdim ve /opt/java klasörü içerisine sembolik link olarak ekledim. OpenJDK ismine rağmen JDK olarak kullanılabilmek için hem düz hem de geliştirme(devel) paketine ihtiyaç duyuyor.

#yum install java-1.7.0-openjdk-devel java-1.8.0-openjdk-devel java-1.6.0-openjdk-devel java-1.7.0-openjdk java-1.8.0-openjdk java-1.6.0-openjdk

Oracle JDK’larını ise RPM olarak indirmedim, çünkü sistem ayarlarına gereksiz müdahalelerde bulunmalarını istemedim. JBOSS’un çalışması için gerekli olan JAVA_HOME değişkenini, çalıştırma betiklerinin içinde tanımladım. Böylesi, kodun farklı JAVA versiyonlarında nasıl davranacağını görmek açısından daha elverişli oldu.

Yukarıdaki işlemleri yaptıktan sonra, /opt/java klasörünün içeriği aşağıdaki gibi oldu.

[root@c6xm java]# ls -l
total 32
lrwxrwxrwx  1 root root   47 Sep 30 22:45 java-1.6.0-openjdk-1.6.0.36.x86_64 -> /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.36.x86_64
lrwxrwxrwx  1 root root   47 Sep 30 22:45 java-1.7.0-openjdk-1.7.0.85.x86_64 -> /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.85.x86_64
lrwxrwxrwx  1 root root   59 Sep 30 22:46 java-1.8.0-openjdk-1.8.0.51-3.b16.el6_7.x86_64 -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.51-3.b16.el6_7.x86_64
drwxr-xr-x  8 root root 4096 Mar 27  2013 jdk1.6.0_45.i586
drwxr-xr-x  8 root root 4096 Mar 27  2013 jdk1.6.0_45.x64
drwxr-xr-x  8 root root 4096 Apr 10 22:15 jdk1.7.0_79.i586
drwxr-xr-x  8 root root 4096 Apr 10 21:53 jdk1.7.0_79.x64
drwxr-xr-x  8 uucp  143 4096 Aug  4 21:01 jdk1.8.0_60.i586
drwxr-xr-x  8 uucp  143 4096 Aug  4 22:32 jdk1.8.0_60.x64

Daha sonra /opt/jboss klasörü içinde, JBOSS sunucusunu çalıştırmak için kullanacağım özel bir jboss kullanıcısı oluşturdum.

useradd -d /opt/jboss jboss

EAP 6.4’ü bu klasöün içine açıp, bu klasörü default isimli bir sembolik link olarak kopyaladım, bu sayede gerekirse, farklı JBOSS versiyonları ile de çalışmak daha kolay olacaktır. Bu hali ile /opt/jboss klasörünün içeriği aşağıdaki gibi oldu

[root@c6xm jboss]# ls -l
total 20
lrwxrwxrwx 1 jboss jboss 13 Sep 30 23:01 default -> jboss-eap-6.4
drwxrwxr-x 17 jboss jboss 4096 Oct 1 01:43 jboss-eap-6.4

JBOSS modeli olarak domain değil standalone modelini kullanmaya karar verdim. Bu sebeple, JBOSS örnekleri için standalone klasörünün 4 tane kopyasını oluşturdum.

[root@c6xm /]# cd /opt/jboss/default/
[root@c6xm default]# cp -r standalone standalone01
[root@c6xm default]# cp -r standalone standalone02
[root@c6xm default]# cp -r standalone standalone03
[root@c6xm default]# cp -r standalone standalone04
[root@c6xm default]# chown -R jboss.jboss /opt/jboss
[root@c6xm default]# ls -l
total 480
drwxrwxr-x 3 jboss jboss   4096 Mar 27  2015 appclient
drwxrwxr-x 4 jboss jboss   4096 Mar 27  2015 bin
drwxrwxr-x 3 jboss jboss   4096 Mar 27  2015 bundles
drwxrwxr-x 5 jboss jboss   4096 Mar 27  2015 docs
drwxrwxr-x 5 jboss jboss   4096 Mar 27  2015 domain
-rw-rw-r-- 1 jboss jboss    419 Mar 27  2015 JBossEULA.txt
-rw-rw-r-- 1 jboss jboss 363815 Mar 27  2015 jboss-modules.jar
-rw-rw-r-- 1 jboss jboss  26530 Mar 27  2015 LICENSE.txt
drwxrwxr-x 3 jboss jboss   4096 Mar 27  2015 modules
drwxrwxr-x 8 jboss jboss   4096 Oct  1 02:14 standalone
drwxrwxr-x 8 jboss jboss   4096 Oct  1 01:17 standalone01
drwxrwxr-x 8 jboss jboss   4096 Oct  1 01:19 standalone02
drwxr-xr-x 8 jboss jboss   4096 Oct  1 22:49 standalone03
drwxr-xr-x 8 jboss jboss   4096 Oct  1 22:49 standalone04
-rw-rw-r-- 1 jboss jboss     66 Mar 27  2015 version.txt
drwxrwxr-x 4 jboss jboss   4096 Mar 27  2015 welcome-content

Ve içeriği aşağıdaki gibi olan 4 tane shell betiği hazırladım.

#!/bin/bash

export JAVA_HOME="/opt/java/jdk1.7.0_79.x64"
export PATH=$PATH:$JAVA_HOME/bin

export JBOSS_HOME=/opt/jboss/default
export PATH=$PATH:$JBOSS_HOME/bin

$JBOSS_HOME/bin/standalone.sh -Djboss.server.base.dir=$JBOSS_HOME/standalone01 -Djboss.bind.address=0.0.0.0 -Djboss.socket.binding.port-offset=10000

Betiklerin birbirinden tek farkları “-Djboss.server.base.dir=$JBOSS_HOME/standalone01” yerine standalone02, standalone03 ve standalone04 klasörlerini işaret etmeleri ve “-Djboss.socket.binding.port-offset=10000” ile 10000 olarak belirtilen port ofset değeri yerine 20000, 30000 ve 40000 değerlerini kullanmaları oldu. Port ofset değerlerini unutmamak gerekiyor yoksa port çakışması nedeni ile JBOSS örnekleri ayağa kalkmayacaktır.

Betiklerde tam yol belirttiğim için betiklerin nerede bulunduğunun bir önemi olmayacaktır ama anlaşılırlık ve konfor açısından, standalone01.sh, standalone02.sh, standalone03.sh ve standalone04.sh isimlerini kullanarak /opt/jboss klasörü içinde oluşturmak gayet mantıklı olacaktır.

jboss kullanıcısı olarak “screen” uygulaması içinde çalıştırılacak bu betikler devamlı açık kalabilir ve “screen” oturumlarına düzgün mantıklı isimler vererek bu oturumlara daha sonra kolayca erişebilirsiniz de …

[jboss@c6xm ~]$ screen -S standalone01

Aşağıda OpenJDK 8 kullanılarak çalıştırılmış olan JBOSS örneğinin ekranı gözükmektedir, port ofset değeri 10000 verildiği için 18080 portundan çalışmaktadır.

[jboss@c6xm ~]$ bash /opt/jboss/standalone01.sh
=========================================================================

JBoss Bootstrap Environment

JBOSS_HOME: /opt/jboss/default

JAVA: /opt/java/java-1.8.0-openjdk-1.8.0.51-3.b16.el6_7.x86_64/bin/java

JAVA_OPTS: -server -XX:+UseCompressedOops -verbose:gc -Xloggc:"/opt/jboss/jboss-eap-6.4/standalone01/log/gc.log" -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=3M -XX:-TraceClassUnloading -Xms1303m -Xmx1303m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true -Djboss.modules.policy-permissions=true

=========================================================================

OpenJDK 64-Bit Server VM warning: ignoring option MaxPermSize=256m; support was removed in 8.0
23:13:13,626 INFO [org.jboss.modules] (main) JBoss Modules version 1.3.6.Final-redhat-1
23:13:14,017 INFO [org.jboss.msc] (main) JBoss MSC version 1.1.5.Final-redhat-1
23:13:14,246 INFO [org.jboss.as] (MSC service thread 1-3) JBAS015899: JBoss EAP 6.4.0.GA (AS 7.5.0.Final-redhat-21) starting
23:13:16,584 INFO [org.xnio] (MSC service thread 1-3) XNIO Version 3.0.13.GA-redhat-1
23:13:16,599 INFO [org.xnio.nio] (MSC service thread 1-3) XNIO NIO Implementation Version 3.0.13.GA-redhat-1
23:13:16,603 INFO [org.jboss.as.server] (Controller Boot Thread) JBAS015888: Creating http management service using socket-binding (management-http)
23:13:16,647 INFO [org.jboss.remoting] (MSC service thread 1-3) JBoss Remoting version 3.3.4.Final-redhat-1
23:13:16,708 INFO [org.jboss.as.clustering.infinispan] (ServerService Thread Pool -- 31) JBAS010280: Activating Infinispan subsystem.
23:13:16,783 INFO [org.jboss.as.jsf] (ServerService Thread Pool -- 37) JBAS012615: Activated the following JSF Implementations: [main, 1.2]
23:13:16,829 INFO [org.jboss.as.naming] (ServerService Thread Pool -- 39) JBAS011800: Activating Naming Subsystem
23:13:16,837 INFO [org.jboss.as.security] (ServerService Thread Pool -- 44) JBAS013371: Activating Security Subsystem
23:13:16,857 INFO [org.jboss.as.connector.logging] (MSC service thread 1-4) JBAS010408: Starting JCA Subsystem (IronJacamar 1.0.31.Final-redhat-1)
23:13:16,876 INFO [org.jboss.as.connector.subsystems.datasources] (ServerService Thread Pool -- 27) JBAS010403: Deploying JDBC-compliant driver class org.h2.Driver (version 1.3)
23:13:16,892 WARN [org.jboss.as.txn] (ServerService Thread Pool -- 46) JBAS010153: Node identifier property is set to the default value. Please make sure it is unique.
23:13:16,903 INFO [org.jboss.as.webservices] (ServerService Thread Pool -- 48) JBAS015537: Activating WebServices Extension
23:13:16,940 INFO [org.jboss.as.security] (MSC service thread 1-3) JBAS013370: Current PicketBox version=4.1.1.Final-redhat-1
23:13:17,030 INFO [org.jboss.as.mail.extension] (MSC service thread 1-2) JBAS015400: Bound mail session [java:jboss/mail/Default]
23:13:17,038 INFO [org.jboss.as.naming] (MSC service thread 1-1) JBAS011802: Starting Naming Service
23:13:17,869 INFO [org.apache.coyote.http11.Http11Protocol] (MSC service thread 1-3) JBWEB003001: Coyote HTTP/1.1 initializing on : http-/0.0.0.0:18080
23:13:17,915 INFO [org.apache.coyote.http11.Http11Protocol] (MSC service thread 1-3) JBWEB003000: Coyote HTTP/1.1 starting on: http-/0.0.0.0:18080
23:13:18,033 INFO [org.jboss.as.remoting] (MSC service thread 1-2) JBAS017100: Listening on 127.0.0.1:19999
23:13:18,091 INFO [org.jboss.as.server.deployment.scanner] (MSC service thread 1-2) JBAS015012: Started FileSystemDeploymentService for directory /opt/jboss/default/standalone01/deployments
23:13:18,092 INFO [org.jboss.as.remoting] (MSC service thread 1-2) JBAS017100: Listening on 0.0.0.0:14447
23:13:18,150 INFO [org.jboss.ws.common.management] (MSC service thread 1-4) JBWS022052: Starting JBoss Web Services - Stack CXF Server 4.3.4.Final-redhat-1
23:13:18,270 INFO [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-3) JBAS010400: Bound data source [java:jboss/datasources/ExampleDS]
23:13:18,349 INFO [org.jboss.as] (Controller Boot Thread) JBAS015961: Http management interface listening on http://127.0.0.1:19990/management
23:13:18,350 INFO [org.jboss.as] (Controller Boot Thread) JBAS015951: Admin console listening on http://127.0.0.1:19990
23:13:18,350 INFO [org.jboss.as] (Controller Boot Thread) JBAS015874: JBoss EAP 6.4.0.GA (AS 7.5.0.Final-redhat-21) started in 5489ms - Started 154 of 192 services (58 services are lazy, passive or on-demand)

jboss kullanıcı ile toplamda 4 farklı screen oturumu kullanarak ve de tabii ki farklı port ofset değerleri vererek 4 örneği ya da RAM durumunuz yeterli ise çok daha fazla örneği aynı anda çalıştırabilirsiniz. Hatta JBOSS klasörünün içinde bulunan bin/init.d klasöründeki jboss-as.conf ve jboss-as-standalone.sh dosyalarını uygun bir şekilde düzenleyerek, aynı anda birçok JBOSS örneğini servis olarak da çalıştırabilirsiniz…

Arduino … !

Arduino… Henüz bulaşmadıysanız ya da duymadıysanız çok ilginç fırsatlar tanıyan bir dünya ile tanışmamışsınız demektir. Arduino nedir ? Aslında arduino bir platformdur. Kalbinde Atmel mikroişlemci barındıran bir elektronik kart ve çok kolay bir programlama dilinin birleşiminden oluşur. Bu platformun görevi, sıfırdan tasarlamaktan çok daha kolay bir şekilde elektronik devreler tasarlıyabilmektir. Ve bu tasarladığınız devreleri, PC, Cep telefonu ve tabletler ile çok kolay bir şekilde iletişime geçirebilmek de mümkün… Bu durum da hem hobi meraklılarına hem de profesyonel kullanıcılara çok fazla imkan sağlıyır ve bir çok olanağın kapısını açıyor…

Yakında çeşitli örnek projelerimiz burada olacak.