Uninstall GlobalProtect Vpn on MacOS Without İnstall File

You can uninstall GlobalProtect application with bash code. Firstly you should create uninstall_gp.sh in the home or another directory like this.

$ touch uninstall_gp.sh

Then open with vi editor and paste below code to the uninstall_gp.sh file.

#!/bin/sh

USER_ID=`id -u`

if [ "$USER_ID" -ne 0 ]; then
    echo "You must be root to run the script. Use sudo $0"
    exit
fi

install_dir=/Applications/GlobalProtect.app/Contents/Resources
app_log_dir=/Library/Logs/PaloAltoNetworks/GlobalProtect

mkdir -p "$app_log_dir"

((

    checkAndWaitProcess()
    {
        if [[ "$2" ]]; then
            T="$2"
        else
            T=5
        fi
        
        C=0
        while [[ C -lt $T ]] && 
              ( killall -s "$1" >/dev/null 2>/dev/null )
        do
            let C=C+1
            sleep 1
        done

        killall -s $1 >/dev/null 2>/dev/null
        return $?
    }

    pan_info()
    {
        curtime=`date`
        echo $curtime ' ' $1 >> ${app_log_dir}/PanGPInstall.log
    }

    curver=`defaults read ${install_dir}/../Info CFBundleShortVersionString`

    if [[ "$HOME" ]]; then
        USER=`stat -f "%Su" "$HOME"`
        pan_info "Uninstalling GlobalProtect version ${curver}, user ${USER}"    
        pan_info "unload user gps, gpa"
        sudo -u"$USER" launchctl remove com.paloaltonetworks.gp.pangps
        sudo -u"$USER" launchctl remove com.paloaltonetworks.gp.pangpa
    else
        pan_info "Uninstalling GlobalProtect version ${curver}"    
    fi

    pan_info "unload gps, gpsd and gpa"
    launchctl remove com.paloaltonetworks.gp.pangpa
    launchctl remove com.paloaltonetworks.gp.pangps
    launchctl remove com.paloaltonetworks.gp.pangpsd
    
    #wait for 15 sec. while PanGPS quits
    if checkAndWaitProcess "PanGPS" 5; then
        pan_info "PanGPS didn't quit within 5 sec. Killing"
        killall -15 PanGPS
        if checkAndWaitProcess "PanGPS" 5; then
            pan_info "PanGPS didn't quit after kill within 5 sec."
        fi
    fi
    
    #wait for 5 sec. while GlobalProtect quits
    if checkAndWaitProcess "GlobalProtect" 5; then
        pan_info "GlobalProtect didn't quit within 5 sec. Killing"
        killall -15 GlobalProtect
        if checkAndWaitProcess "GlobalProtect" 5; then
            pan_info "GlobalProtect didn't quit after kill within 5 sec."
        fi
    fi

    pan_info "Cleanup Dynamic Store"    
    echo "remove State:/Network/Service/gpd.pan/IPv4" | scutil 
    echo "remove State:/Network/Service/gpd.pan/DNS"  | scutil 

    pan_info "rm all"
    rm -f "/Library/LaunchAgents/com.paloaltonetworks.gp.pangps.plist"
    rm -f "/Library/LaunchAgents/com.paloaltonetworks.gp.pangpa.plist"
    rm -f "/Library/LaunchDaemons/com.paloaltonetworks.gp.pangpsd.plist"

    rm -rf "/Library/Application Support/PaloAltoNetworks/GlobalProtect"
    rm -rf "/Applications/GlobalProtect.app"
    rm -rf "/Applications/GlobalProtect.app.bak"
    rm -rf "/System/Library/Extensions/gplock"*.kext
    rm -rf "/Library/Extensions/gplock"*.kext

    #Mercy kill if processes are stuck
    killall -9 GlobalProtect
    killall -9 PanGPS

    rm -rf /Library/Preferences/com.paloaltonetworks.GlobalProtect*
    rm -rf /Library/Preferences/PanGPS*
    if [[ "$HOME" ]]; then
        rm -rf "$HOME/Library/Application Support/PaloAltoNetworks/GlobalProtect"
        rm -rf "$HOME"/Library/Preferences/com.paloaltonetworks.GlobalProtect*
        rm -rf "$HOME"/Library/Preferences/PanGPS*
        #remove password entry from keychain
        security delete-generic-password -l GlobalProtect -s GlobalProtect
    fi

    pan_info "Unload driver"
    ifconfig gpd0 down
    kextunload -b com.paloaltonetworks.kext.pangpd
    
    pan_info "Unload gplock"
    kextunload -b com.paloaltonetworks.GlobalProtect.gplock

    #10.9 addition to clear system preferences cache
    killall -SIGTERM cfprefsd
        
    pan_info "uninstall packages from globalprotect"
    for pkg in `pkgutil --pkgs |grep com.paloaltonetworks.globalprotect`
    do 
        pkgutil --forget "$pkg"
    done
    rm -rf /Library/Logs/PaloAltoNetworks/GlobalProtect/*

    echo "Uninstallation finished."

)  2>&1) >> ${app_log_dir}/PanGPInstall.log

Then you can run uninstall_gp.sh file via bash terminal like this:

$ sudo sh uninstall_gp.sh

Great! GlobalProtect application has removed.

Linux İptables Kullanımı ve Yapılandırılması

İptables linux işletim sistemlerine entegre bir şekilde gelen güvenlik duvarı yazılımıdır. İptables ile sunucuya gelen trafikleri kontrol edebilir veya başka bir adrese yönlendirebilirsiniz.

Bu yazıda sizinle ayrıca sunucunuza yapılan brute force atackları engelleyebilmeniz için küçük bir bash komutu paylaşacağım.

iptables yazılımı linuxt işletim sisteminize kurulu değil ise aşağıdaki şekilde kurabilir başlangıçta otomatik başlaması için ayarlama yapabilirsiniz.

# yum install iptables

veya 

# apt install iptables

Başlangıçta otomatik başlaması veya başlamaması için aşağıdaki komutu çalıştırabilirsiniz.

Sunucu yeniden başladığında iptables otomatik başlar
# chkconfig iptables on

Sunucu yeniden başladığında iptables başlamaz
# chkconfig iptables off

İptables yazılımında gelen veya giden trafik ile ilgili tanımlara aşağıdaki şekilde bakabilirsiniz.

 # iptables -L
 Chain INPUT (policy ACCEPT)
 target     prot opt source        destination
 

 Chain FORWARD (policy ACCEPT)
 target     prot opt source        destination
 

 Chain OUTPUT (policy ACCEPT)
 target     prot opt source         destination

Bu listede INPUT gelen, OUTPUT giden ve FORWARD yönlendirilmiş tanımları ifade eder ve eğer bir kural varsa buradan görebilirsiniz.

Yeni bir kural eklendiğinde target ile ilgili aşağıdaki tanımlamaları yapabilirsiniz.

ACCEPT: Paketlerin geçisine izin verilir.
REJECT: Paketlerin erişimi reddedilir.
DROP: Paketlerin geçişine izin verilmez.
RETURN: Zincirin sonuna gönderilir.
QUEUE: Paketler kullanıcı alanına gönderilir.

Örnek olarak belirli bir ip den gelen paketlerin erişimini kısıtladığımızda liste aşağıdaki şekilde olacaktır.

# iptables -A INPUT -p tcp -s x.x.x.x -j DROP 
# iptables-save  

Belirli bir ip nin sunucuya erişimini kısıtladığımızda bu kural aşağıdaki şekilde görünecektir. x.x.x.x ip’sinin sunucuya gönderdiği tüm TCP paketler sunucu tarafından kabul edilmeyecektir.

# iptables -L

 Chain INPUT (policy ACCEPT)
 target     prot opt source     destination
 DROP       tcp  --  x.x.x.x    anywhere
 

 Chain FORWARD (policy ACCEPT)
 target     prot opt source     destination
 

 Chain OUTPUT (policy ACCEPT)
 target     prot opt source     destination

Burada gönderilen paketler port farketmeksizin engellenecektir. Belirli bir port veya başka bir protokol belirterek gelen paketleri engellemekte mümkün. tcp, udp, udplite, icmp, icmpv6, esp, ah, sctp, mh protokolleri için tanımlama yapabilirsiniz. Örneğin belirli bir portu engellemek için aşağıdaki komutu kullanabilirsiniz.

# iptables -A INPUT -p tcp --dport 22 -s x.x.x.x -j DROP 
# iptables-save 

Bu işlemin ardından x.x.x.x ip’si sunucuya 22 portundan erişemeyecektir.

Belirli bir subnet’i engellemek için aşağıdaki gibi ip adresin sonuna /subnet ekleyerek tanımlama yapabilirsiniz.

# iptables -A INPUT -p tcp --dport 22 -s x.x.0.0/16 -j DROP 

# iptables -A INPUT -p tcp --dport 22 -s x.x.x.0/24 -j DROP 

# iptables-save 

Örneğin belirli bir ip grubunu engelleyip engellenen ip grubu içerisinden tek bir ip’ye erişim vermek istersek bunu aşağıdaki şekilde yapabiliriz.

# iptables -A INPUT -p tcp --dport 22 -s x.x.0.0/16 -j DROP 

# iptables -A INPUT -p tcp --dport 22 -s x.x.x.x -j ACCEPT 

# iptables-save 

Bir kural tanımladıktan sonra mutlaka iptables-save komutunun çalıştırılması gerekmektedir. Varolan tüm kuralları temizlemek için iptables -F komutu kullanılabilir. Bu işlem sonrası tanımlanmış olan tüm kurallar silinecektir.

# iptables -F

İptables ile ilgili diğer parametreleri görmek kullanıcı kılavuzu sayfasını inceleyebilirsiniz.

# man iptables

Depends: apache2-bin (= 2.4.25-3+deb9u7) but 2.4.10-10+deb8u14 is to be installed

Debian sistemde dist-upgrade yapıldığı sırada mevcut sistem üzerinde kurulu olan paketlerin remove edilme ihtimali bulunmaktadır. (Genel olarak tüm linux sistemlerde bu vardır)

apt dist-upgrade komutunu çalıştırıldığında remove edilecek paketlerin listesi size sunulacaktır. Remove edilecek paketlerin çalışan sisteminizi etkilemeyeceğinden emin olun aksi halde geri dönmek zor olur ve veri kaybı yaşayabilirsiniz.

dist-upgrade işlemini bilinçsizce yapması sonucu bu tür durumlara düşmemek için felaket senaryoları hazırlamak şart.

# apt dist-upgrade

 Reading package lists… Done
 Building dependency tree       
 Reading state information… Done
 Calculating upgrade… The following packages were automatically installed and are no longer required:
   ...
 Use 'apt-get autoremove' to remove them.
 Done
 The following packages will be REMOVED:
   apache2 mariadb-client-10.0 mariadb-server-10.0

İşlem sonrası mysql’e erişim sırasında karşılaşılan hata:

# mysql -u root -p
 Enter password: 
 ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2 "No such file or directory")
 r

# service mysqld start
 Failed to start mysqld.service: Unit mysqld.service failed to load: No such file or directory.

# systemctl
UNIT             LOAD   ACTIVE SUB     DESCRIPTION
apache2.service  loaded failed failed  LSB: Apache2 web server
mysql.service    loaded failed failed  LSB: Start and stop the mysql database server daemon

# systemctl start mysql.service
 Job for mysql.service failed. See 'systemctl status mysql.service' and 'journalctl -xn' for details

Aslında sistem üzerinden apache ve mysql servisi var gibi görünüyor. Başlatmaya çalıştığınızda aşağıdaki hatalarla karşılaşıyorsunuz.

# systemctl status mysql.service
 ● mysql.service - LSB: Start and stop the mysql database server daemon
    Loaded: loaded (/etc/init.d/mysql)
    Active: failed (Result: exit-code) since Sat 2019-06-01 22:28:49 +03; 6s ago
   Process: 1777 ExecStart=/etc/init.d/mysql start (code=exited, status=1/FAILURE)
Jun 01 22:28:19 /etc/init.d/mysql[1802]: /etc/init.d/mysql: line 110: /usr/bin/mysqld_safe: No such file or directory
 Jun 01 22:28:49 /etc/init.d/mysql[2085]: 0 processes alive and '/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf ping' resulted in
 Jun 01 22:28:49 /etc/init.d/mysql[2085]: /etc/init.d/mysql: line 75: /usr/bin/mysqladmin: No such file or directory
 Jun 01 22:28:49 /etc/init.d/mysql[2085]: 
 Jun 01 22:28:49 mysql[1777]: Starting MariaDB database server: mysqld . . . . . . . failed!

Apache ve Mysql gibi uygulamaları apt gibi paket yöneticisi ile silmeniz durumda datalarınızın olduğu dizinler genelde sistemden silinmez. Tekrar apache ve mysql yüklenmesi durumunda muhtelemen aşağıdaki hatayı alacaksınız.

# apt install mariadb-server

Reading package lists… Done
 Building dependency tree       
 Reading state information… Done
 Some packages could not be installed. This may mean that you have
 requested an impossible situation or if you are using the unstable
 distribution that some required packages have not yet been created
 or been moved out of Incoming.
 The following information may help to resolve the situation:
 The following packages have unmet dependencies:
  mariadb-server : Depends: mariadb-server-10.1 (>= 10.1.37-0+deb9u1) but it is not going to be installed
 E: Unable to correct problems, you have held broken packages.

# apt install apache2
 Reading package lists… Done
 Building dependency tree       
 Reading state information… Done
 Some packages could not be installed. This may mean that you have
 requested an impossible situation or if you are using the unstable
 distribution that some required packages have not yet been created
 or been moved out of Incoming.
 The following information may help to resolve the situation:
 The following packages have unmet dependencies:
  apache2 : Depends: apache2-bin (= 2.4.25-3+deb9u7) but 2.4.10-10+deb8u14 is to be installed
E: Unable to correct problems, you have held broken packages.

# apt install mariadb-server-10.0
 Reading package lists… Done
 Building dependency tree       
 Reading state information… Done
 Some packages could not be installed. This may mean that you have
 requested an impossible situation or if you are using the unstable
 distribution that some required packages have not yet been created
 or been moved out of Incoming.
 The following information may help to resolve the situation:
 The following packages have unmet dependencies:
  mariadb-server-10.0 : Depends: libdbi-perl but it is not going to be installed
                        Depends: mariadb-client-10.0 (>= 10.0.38-0+deb8u1) but it is not going to be installed
                        Depends: mariadb-server-core-10.0 (>= 10.0.38-0+deb8u1) but it is not going to be installed
                        PreDepends: mariadb-common but it is not going to be installed
 E: Unable to correct problems, you have held broken packages.

Bu hatayı almanızın nedeni mevcut repositorinizde bulunan uygulama sürümünün sisteminiz tarafından desteklenmediğinden kaynaklanmaktadır. Öncelikle Ağache için /etc/apache2 dizinini yedeklemelisiniz. Aynı şekilde Mysql ve diğer uygulamalarınız data dizinleri için de geçerli. Yedeklerin sağlam olduğundan emin olduktan sonra distribütörünüzün web sitesinden güncel repository’i sisteminize tanıtmalısınız. Bu linkten debian için uygun repository’i bulabilirsiniz. Repository’i sisteme tanıttıktan sonra Apache ve Mysql’i yükleyebilirsiniz.

Çözüm için aşağıdaki repo adreslerini /etc/apt/sources.list dosyası içerisine yazdım

# vi /etc/apt/sources.list

deb http://security.debian.org/debian-security stretch/updates main contrib non-free
deb http://ftp.de.debian.org/debian stretch main
   
# mv /etc/apache2 /etc/apache2.bck
# mv /etc/php /etc/php.bck
# cp -r /var/lib/mysql /var/lib/mysql.bck

# apt-get clean
# apt-get --purge remove apache2-bin 
Reading package lists… Done
 Building dependency tree       
 Reading state information… Done
 The following packages will be REMOVED:
   apache2-bin*
 0 upgraded, 0 newly installed, 1 to remove and 27 not upgraded.
 After this operation, 0 B of additional disk space will be used.
 Do you want to continue? [Y/n] y

# apt install apache2 mariadb-server-10.0
# systemctl status mysql
 ● mysql.service - LSB: Start and stop the mysql database server daemon
    Loaded: loaded (/etc/init.d/mysql)
    Active: active (running) since Sat 2019-06-01 23:28:14 +03; 2s ago
   Process: 7806 ExecStop=/etc/init.d/mysql stop (code=exited, status=0/SUCCESS)
   Process: 7841 ExecStart=/etc/init.d/mysql start (code=exited, status=0/SUCCESS)
    CGroup: /system.slice/mysql.service
            ├─7865 /bin/bash /usr/bin/mysqld_safe
            ├─7932 /usr/sbin/mysqld --basedir=/usr --datadir=... --plugin-dir=/usr/lib/mysql/plugin --user=mysql --skip-log-error --pid-file=
            └─7933 logger -t mysqld -p daemon error
 Jun 01 23:28:13 mysqld[7933]: 190601 23:28:13 [Note] InnoDB: Waiting for purge to start
 Jun 01 23:28:13 mysqld[7933]: 190601 23:28:13 [Note] InnoDB:  Percona XtraDB (http://www.percona.com) 5.6.42-84.2 started; log sequ…310291801
 Jun 01 23:28:13  mysqld[7933]: 190601 23:28:13 [Note] Plugin 'FEEDBACK' is disabled.
 Jun 01 23:28:13 mysqld[7933]: 190601 23:28:13 [Note] Server socket created on IP: '::'.
 Jun 01 23:28:13  mysqld[7933]: 190601 23:28:13 [Note] /usr/sbin/mysqld: ready for connections.
 Jun 01 23:28:13 mysqld[7933]: Version: '10.0.38-MariaDB-0+deb8u1'  socket: '/var/run/mysqld/mysqld.sock'  (Debian)

Apache’i yükledikten sonra php modülünün aktif edilmesi gerekebilir. Bunun için aşağıdaki adımları izlemalisiniz. Bu işlemi yaptığımda php modülünü aktif edemedim ve mevcut sistemde bulunan dosları kopyalayarak çözdüm.

# a2enmod php7.3

Bu işe yaramayınca aşağıdaki şekilde çözdüm.

# cp /etc/apache2.bck/mod-available/php* /etc/apache2.bck/mod-available/
# a2enmod php7

Yeni yüklenen apache.conf ve php.ini dosyaları arasında herhangi bir fark var mı diye aşağıdaki şekilde kontrol edebilirsiniz.

# diff /etc/apache2.old/apache2.conf /etc/apache2/apache2.conf 

# diff /etc/php.old/7.3/cli/php.ini /etc/php/7.3/cli/php.ini 

Apache nin tekrar yklenmesinden kaynaklı mevcut siteleriniz de silinmiş lacaktır. Sistemde bulunan siteler aşağıdaki şekilde aktif edilebilir.

# cp /etc/apache2.bck/sites-available/*.conf /etc/apache2/sites-available/

# a2ensite hostname.conf
# a2ensite hostname2.conf
# a2ensite hostname3.conf

# service apache2 reload

SSH Key Authentication

Uzak sunucuya parolasız ssh bağlantısı yapmak için ssh key authentication kullanılmaktadır. Bu doğrulama, bash scriptler içerisinden uzak sunucuya bağlanıp işlemler yapmak için kolaylık sağlamaktadır.

ssh authentication bağlantı adımları

Bağlantı aşamaları yukarıdaki gibidir.

SSH key çifti daha önceden oluşturulmadıysa aşağıdaki gibi oluşturulabilir.

$ ssh-keygen

~/.ssh/ dizini altında oluşan id_rsa ve id_rsa.pub dosyaları bu adımda önemlidir. id_rsa dosyası içerisinde private key bulunup kimseyle paylaşılmamalıdır. id_rsa.pub dosyası içerisinde bulunan key uzak sunucunun authorized_keys dosyası içine kopyalanmalıdır. Public key’i uzak sunucuya aşağıdaki gibi kopyalanabilir.

$ ssh-copy-id -i ~/.ssh/id_rsa.pub username@remoteip

Bu işlemler tamamlandıktan sonra uzak sunucu bağlantısı gerçekleştirilebilir.

Brute force ataklarına karşı parola ile girişi kapatmak için /etc/ssh/sshd_config dosyası içerisindeki PasswordAuthentication parametresi aşağıdaki şekilde ayarlanmalıdır.

### /etc/ssh/sshd_config 

PasswordAuthentication no

Linux’ta Disk Bölümleme İşlemleri (Partitioning)

Linux işletim sisteminde disk, cdrom, cpu, ram gibi fiziksel aygıtlar birer dosya olarak bulunur. Makineye takılı diskler /dev dizini altındadır. Bu yazıda makineye yeni takılan diski partition’lara ayırmayı, partitionlara ayırılmış diskleri formatlamayı ve mount etmeyi göstereceğim.

Makineye takılı diskleri görmek için aşağıdaki komutları kullanabilirsiniz.  Continue reading Linux’ta Disk Bölümleme İşlemleri (Partitioning)

VNC Server Kurulum ve Konfigürasyonu

Sunucularda genelde GUI (Grafiksel Kullanıcı Arayüzü) bulunmaz. İşlemler konsol ekranında yapılır. Bu yazıda VNC Server uygulaması ile sunucuda görsel işlemlerin nasıl yapıldığını anlatacağım.

Oracle veritabanını yüklerken görsel bir arayüze ihtiyacımız vardır. Bu yazıyı yazmamın amacı GUI’si olmayan bir sunucuya oracle veritabanını kurmaktır. Oracle veritabanını kurmak için GUI arayüzünün RGB256 color’u desteklemesi gerekir. İlk adım olarak sunucuda “tigervnc-server” uygulamasını kuruyoruz. Ben oralce linux-7 işletim sisteminde aşağıdaki gibi kurdum.  Continue reading VNC Server Kurulum ve Konfigürasyonu