Buat HTML 5 RDP / SSH Frontend Menggunakan Guacamole di Ubuntu 16.04 LTS

pengantar

Tujuan dari tutorial ini adalah untuk menyingkirkan SSH publik dan koneksi RDP publik. Dengan menempatkan ini semua di belakang klien HTML5 yang sangat nyaman, kita dapat menambahkan lapisan keamanan untuk mengakses cloud kami.

Guacamole juga mencatat akses jarak jauh apa pun, sehingga akses tidak sah menjadi jauh lebih mudah dilacak.

Catatan: Untuk mengenkripsi Mari (opsi B) kita memerlukan nama domain. Jika Anda tidak memiliki satu, Anda dapat melewatkan langkah ini dan hanya menjalankan opsi A .

Langkah 1 - Mempersiapkan sistem

Mulailah dengan memutar VPS di zona Vultr yang Anda inginkan. Sebuah 1024 MBVPS akan cukup, karena Guacamole tidak terlalu menuntut.

Mengaktifkan IP pribadi

Mulailah dengan mengaktifkan jaringan pribadi di VPS. Ini didokumentasikan dengan baik di sini

Mempersiapkan firewall

Pertama mari kita mengeraskan gambar sedikit. Dan mari kita periksa apakah gambar yang telah disediakan telah ufwdiaktifkan.

root@vultr:~# ufw status
Status: inactive

Secara default itu dinonaktifkan, jadi kita perlu menambahkan beberapa aturan.

  • Aturan 1: ssh: TCP port 22
  • Aturan 2: http: TCP port 8080 (aturan pengujian sementara untuk Guacamole)

Mari kita mulai dengan mengkonfigurasi port-port ini.

ufw allow 22/tcp
ufw allow 8080/tcp

Selanjutnya aktifkan firewall.

ufw enable

Jangan khawatir jika Anda menerima peringatan. Jika Anda menambahkan port 22, Anda tidak akan menghadapi masalah apa pun.

root@vultr:~# ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

Setelah diaktifkan, minta status firewall dan kami akan melihat konfigurasi port kami.

ufw status

Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
8080/tcp                   ALLOW       Anywhere
22/tcp (v6)                ALLOW       Anywhere (v6)
8080/tcp (v6)              ALLOW       Anywhere (v6)

Langkah 2 - Memasang Guacamole

Menginstal semua dependensi

Sebelum kita mulai menginstal, kita perlu memperbarui dan meningkatkan repo. Dengan paket seperti Tomcat, yang berbasis Java, ada aliran konstan bug yang ditemukan dan perbaikan bug terkait. Biasanya merupakan ide yang baik untuk melakukan ini terlebih dahulu daripada langsung masuk ke instalasi kami.

apt-get update
apt-get -y upgrade 

Selanjutnya adalah semua dependensi. Guacamole memiliki beberapa di antaranya. (Daftar lengkap dependensi dan fungsinya dapat ditemukan di sini ). Mari kita lanjutkan dengan menginstal semuanya.

apt-get -y install build-essential tomcat8 freerdp libcairo2-dev libjpeg-turbo8-dev libpng12-dev libossp-uuid-dev libavcodec-dev libavutil-dev libfreerdp-dev libpango1.0-dev libssh2-1-dev libtelnet-dev libvorbis-dev libwebp-dev mysql-server mysql-client mysql-common mysql-utilities libswscale-dev libvncserver-dev libpulse-dev libssl-dev

Saat penginstal meminta kata sandi root MySQL, berikan kata sandi dan pastikan untuk mencatatnya. Kami akan menggunakan kata sandi ini nanti untuk membuat basis data Guacamole.

Mengunduh Guacamole

Sekarang kita memiliki semua dependensi, kita dapat melanjutkan dengan mengunduh Guacamole. Guacamole itu sendiri sebagian besar datang dalam bentuk sumber, dan bukan biner. Pertama kita akan pindah ke /tmpfolder untuk menghindari kekacauan bagian lain dari disk. Kemudian unduh semua kode sumber.

Ada empat file sumber / biner untuk diunduh:

  • guacamole-0.9.13-incubating.war: Ini adalah aplikasi web. Sebuah WARfile adalah paket web zip menyediakan satu situs Web host di situs Web Tomcat
  • guacamole-server-0.9.13-incubating.tar.gz: File ini akan menyediakan guacdaplikasi backend . Ini menciptakan aliran melalui RDP dan SSH.
  • guacamole-auth-jdbc-0.9.13-incubating.tar.gz: Kami akan menggunakan database MySQL lokal, jadi kami membutuhkan JDBCkonektor terkait .
  • mysql-connector-java-5.1.43.tar.gz: Tanpa driver basis data, konektor JDBC tidak melakukan apa-apa. File ini disediakan oleh tim MySQL sendiri.

Catatan: unduhan diselesaikan ke server terdekat .

cd /tmp
wget http://apache.belnet.be/incubator/guacamole/0.9.13-incubating/binary/guacamole-0.9.13-incubating.war
wget http://apache.cu.be/incubator/guacamole/0.9.13-incubating/source/guacamole-server-0.9.13-incubating.tar.gz
wget http://apache.cu.be/incubator/guacamole/0.9.13-incubating/binary/guacamole-auth-jdbc-0.9.13-incubating.tar.gz
wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.43.tar.gz

Setelah kami mengunduh semua file ini, ekstrak file tar.gz's.

tar -xzvf guacamole-server-0.9.13-incubating.tar.gz
tar -xzvf guacamole-auth-jdbc-0.9.13-incubating.tar.gz
tar -xzvf mysql-connector-java-5.1.43.tar.gz

Kompilasi Guacamole

Sekarang kita telah mengekstrak semua kode sumber, mari kita buat beberapa guacamolefolder, ini akan digunakan oleh aplikasi guacamole dan dependensinya.

mkdir -p /etc/guacamole/lib
mkdir -p /etc/guacamole/extensions

Semuanya siap untuk binari Guacamole baru kami. Kita sekarang dapat memulai proses kompilasi dan instalasi. Pindah ke folder Server Guacamole yang diekstraksi.

cd /tmp/guacamole-server-0.9.13-incubating

Konfigurasikan aplikasi untuk juga membuat init.dfile untuk menjalankannya sebagai layanan nanti.

./configure --with-init-dir=/etc/init.d

Perintah harus diakhiri dengan 'ya' di semua perpustakaan dan protokol. Jika tidak, kembali dan periksa perintah apt-get untuk memastikan Anda tidak melewatkan paket apa pun.

------------------------------------------------
guacamole-server version 0.9.13-incubating
------------------------------------------------

   Library status:

     freerdp ............. yes
     pango ............... yes
     libavcodec .......... yes
     libavutil ........... yes
     libssh2 ............. yes
     libssl .............. yes
     libswscale .......... yes
     libtelnet ........... yes
     libVNCServer ........ yes
     libvorbis ........... yes
     libpulse ............ yes
     libwebp ............. yes

   Protocol support:

      RDP ....... yes
      SSH ....... yes
      Telnet .... yes
      VNC ....... yes

   Services / tools:

      guacd ...... yes
      guacenc .... yes

   Init scripts: /etc/init.d

Type "make" to compile guacamole-server.

Selanjutnya kompilasi dan instal server Gucamole.

make && make install

Setelah semua ini selesai, jalankan ldconfiguntuk membangun kembali jalur pencarian untuk perpustakaan yang telah ditambahkan.

ldconfig

Lanjutkan dengan menggunakan systemctlpengaturan guacd(Guacamole Daemon) untuk memulai saat boot.

systemctl enable guacd

Binari Guacamole sekarang diinstal. Sekarang kita akan menyiapkan aplikasi web untuk Tomcat.

Mulailah dengan memindahkan warfile ke guacamolefolder yang baru saja kita buat, setelah ini selesai buat tautan logis di direktori kucing jantan untuk menunjuk ke warfile kita .

cd /tmp
mv guacamole-0.9.13-incubating.war /etc/guacamole/guacamole.war
ln -s /etc/guacamole/guacamole.war /var/lib/tomcat8/webapps/

Maka kita membutuhkan konektor mysql dan JDBC. Driver JDBC diperlukan di extensionsfolder, konektor di libfolder.

cp mysql-connector-java-5.1.43/mysql-connector-java-5.1.43-bin.jar /etc/guacamole/lib/
cp guacamole-auth-jdbc-0.9.13-incubating/mysql/guacamole-auth-jdbc-mysql-0.9.13-incubating.jar /etc/guacamole/extensions/

Mengkonfigurasi Guacamole dan Tomcat

Setelah konektor dan JDBC tersedia, kita perlu mengedit tocamt8file. File ini mengandung banyak tomcat8pengaturan, dan dalam kasus kami, kami perlu menambahkan GUACAMOLE_HOMEvariabel di akhir file.

nano /etc/default/tomcat8

Tambahkan dengan yang berikut ini.

GUACAMOLE_HOME=/etc/guacamole

Membuat database

Selanjutnya adalah membuat database. Guacamole menyimpan konfigurasi koneksi dalam database, bukan di dalam file.

Login dengan yang root passwordAnda gunakan selama instalasi.

mysql -u root -p

Langkah pertama adalah membuat database yang disebut 'guacamole_db'.

create database guacamole_db;

Kemudian jalankan create userperintah. Ini akan membuat pengguna dengan kata sandi mysupersecretpassword, pengguna ini hanya dapat terhubung dari localhost.

create user 'guacamole_user'@'localhost' identified by "mysupersecretpassword";

Berikan CRUDoperasi kepada pengguna ini untuk basis data guacamole_db.

GRANT SELECT,INSERT,UPDATE,DELETE ON guacamole_db.* TO 'guacamole_user'@'localhost';

Buang hak istimewa dan keluar dari shell.

flush privileges;
exit

Akhiri dengan menambahkan skema Guacamole ke basis data kami yang baru dibuat.

cat /tmp/guacamole-auth-jdbc-0.9.13-incubating/mysql/schema/*.sql | mysql -u root -p guacamole_db

Setelah ini selesai, kita perlu mengedit guacamole.propertiesfile. File ini berisi konfigurasi server MySQL kami yang baru dibuat.

nano /etc/guacamole/guacamole.properties

Tambahkan detail dan kredensial koneksi MySQL.

mysql-hostname: localhost
mysql-port: 3306
mysql-database: guacamole_db
mysql-username: guacamole_user
mysql-password: mysupersecretpassword

Selesaikan dengan membuat tautan simbolis ke folder share kucing jantan, karena di sinilah WARfile akan mencari properti ini.

ln -s /etc/guacamole /usr/share/tomcat8/.guacamole

Menguji pengaturan

Akhiri dengan me-restart tomcat8server dan memulai guacddaemon server.

service tomcat8 restart
service guacd start

Anda dapat memverifikasi dengan menggunakan perintah status.

service tomcat8 status
service guacd status

Sekarang Anda dapat menjelajah ke VPS Anda di port 8080

http://<yourpublicip>:8080/guacamole/

Gunakan nama pengguna guacadmindan kata sandi yang sama guacadmin. Ini akan memberi Anda akses ke server Guacamole kosong.

Klik di sudut kanan atas nama pengguna Anda guacadmindan pilih Settings. Setelah Anda berada di halaman pengaturan pergi ke Userstab dan pilih pengguna guacadmin.

Sekarang ubah kata sandi Anda menjadi sesuatu yang lain atau buat pengguna admin baru dan hapus yang standar guacadmin.

Langkah 3 - Fine tuning dan pembersihan

Ini adalah langkah terakhir: membersihkan setelah Anda selesai.

Hapus kode sumber dan binari yang diunduh dari /tmpfolder.

rm -rf /tmp/guacamole-*
rm -rf /tmp/mysql-connector-java-*

Juga, jadikan aplikasi web Guacamole sebagai default. Dalam ekosistem kucing jantan, aplikasi yang mendapatkan ROOTfolder adalah aplikasi yang dijalankan secara default saat Anda mengakses situs web.

Hapus ROOTplaceholder lama .

rm -rf /var/lib/tomcat8/webapps/ROOT

Dan buat tautan simbolis untuk server guacamole menjadi ROOTsatu.

ln -s /var/lib/tomcat8/webapps/guacamole /var/lib/tomcat8/webapps/ROOT

Ini membutuhkan tomcat restart.

service tomcat8 restart

Langkah 4 (opsi A) - Berjalan hanya dengan HTTP

  • Jika Anda tidak akan menggunakan Mari Enkripsi sertifikat dan tidak menggunakan DNS, jalankan tindakan dalam langkah ini dan kemudian langsung menuju ke Langkah 6. - Opsi A
  • Jika Anda ingin membuat situs yang lebih aman dan Anda sudah memiliki DNS, Anda dapat melewati ini dan langsung ke opsi B (Langkah 5).

Edit tomcat8/server.xmlfile dan ubah port konektor.

nano /etc/tomcat8/server.xml

Pencarian untuk Connector port.

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           URIEncoding="UTF-8"
           redirectPort="8443" />

Dan ganti 8080dengan 80.

Secara default, tomcat tidak mengizinkan pengikatan port di bawah ini 1024. Untuk mengaktifkan ini, kita perlu memberi tahu tomcat8 untuk membuat binding yang diautentikasi.

Edit defaultfile tomcat8 dan batalkan komentar pada AUTHBINDbaris dan gunakan opsiyes

nano /etc/default/tomcat8

AUTHBIND=yes

Setelah ini selesai, intall authbind.

apt-get install authbind

Konfigurasikan agar port 80dapat diklaim oleh tomcat8.

touch /etc/authbind/byport/80
chmod 500 /etc/authbind/byport/80
chown tomcat8 /etc/authbind/byport/80

Izinkan port 80melalui firewall dan hapus aturan untuk 8080.

ufw allow 80/tcp
ufw delete allow 8080/tcp

Mulai kembali kucing jantan.

service tomcat8 restart

Itu saja, sekarang Guacamole harus berjalan di pelabuhan 80.

Langkah 5 (opsi B) - Menyiapkan Nginx

Instalasi dan konfigurasi Nginx

Tomcat sebenarnya bukan salah satu aplikasi terbaik dan paling kuat untuk digunakan certbot. Untungnya Nginx adalah. Kami hanya akan melakukan proxy tomcat ke Nginx. Ini menggunakan fungsionalitas out-of-the-box dari Certbot dengan mengorbankan sedikit RAM.

apt-get install nginx

Setelah diinstal, edit konfigurasi default.

nano /etc/nginx/sites-available/default

Hapus semua konfigurasi contoh dan tambahkan konfigurasi berikut.

server {      
  listen 0.0.0.0:80;

  proxy_request_buffering off;
  proxy_buffering off;

  location / {
     proxy_pass http://127.0.0.1:8080;
     proxy_redirect     off;
        proxy_set_header   Host $host;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Host $server_name;
  }
}

Ini akan membuat proxy untuk situs web yang berjalan di 8080. Mulai ulang Nginx, dan aktifkan saat boot.

systemctl restart nginx
systemctl enable nginx

Periksa apakah semuanya berfungsi.

systemctl status nginx

Nonaktifkan port pengujian 8080dan izinkan lalu lintas di port 80.

ufw allow 80/tcp
ufw delete allow 8080/tcp

Menginstal Let's Encrypt

Sebelum dapat digunakan certbot, kita perlu menambahkan yang benar ppake sistem yang berisi paket certbot kami.

add-apt-repository ppa:certbot/certbot

Tekan " ENTER" untuk menerima perubahan konfigurasi.

Perbarui aptuntuk mengumpulkan paket-paket baru.

apt-get update

Akhirnya, instal modul Nginx untuk menetapkan sertifikat.

apt-get -y install python-certbot-nginx

Konfigurasikan Nginx untuk menggunakan sertifikat

Konfigurasikan firewall untuk mengizinkan HTTPS.

ufw allow 443/tcp

Sebelum kami dapat meminta sertifikat baru, kami membutuhkan nama DNS.

nano /etc/nginx/sites-available/default

Tambahkan server_namepengaturan berikut .

server_name rdp.example.com;

Ubah konfigurasi untuk mencerminkan pengaturan baru ini.

server {
  server_name rdp.example.com;

  listen 0.0.0.0:80;

  proxy_request_buffering off;
  proxy_buffering off;

  location / {
     proxy_pass http://127.0.0.1:8080;
     proxy_redirect     off;
        proxy_set_header   Host $host;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Host $server_name;
  }
}

Periksa apakah semua berfungsi dan mulai ulang Nginx.

nginx -t
service nginx restart

Sekarang minta sertifikat dengan certbot.

certbot --nginx -d rdp.example.com

Berikan email Anda dan setujui pertanyaan yang diajukan oleh pemasang. (Anda dapat memilih " No" untuk membagikan email Anda dengan aman.) Certbot akan secara otomatis menanyakan apa yang harus dilakukan HTTPS. Kami akan menggunakan opsi 2: redirect to HTTPS.

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
-------------------------------------------------------------------------------
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2

Hal terakhir yang akan kita lakukan adalah memperbarui DHparameter. Secara default, ini sedikit lemah untuk standar 2017.

Buat yang baru.

openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Selanjutnya, tambahkan mereka ke situs default di Nginx.

nano /etc/nginx/sites-available/default

Tambahkan mereka ke konfigurasi server.

server {
  server_name rdp.example.com;

  listen 0.0.0.0:80;
  ssl_dhparam /etc/ssl/certs/dhparam.pem;

  proxy_request_buffering off;
  proxy_buffering off;

  location / {
     proxy_pass http://127.0.0.1:8080;
     proxy_redirect     off;
        proxy_set_header   Host $host;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Host $server_name;
  }
}

Periksa kesalahan.

nginx -t

Terapkan perubahan dengan memulai ulang server.

service nginx restart

Bersihkan 8080aturan lama

ufw delete allow 8080/tcp

Catatan: jika Anda harus menerima "502 Bad Gateway" Anda perlu me-restart tomcat8 .

service tomcat8 restart

Perpanjang otomatis sertifikat

Mari Enkripsi sertifikat memerlukan pembaruan. Kita dapat membuat pekerjaan cron untuk ini. Mulailah dengan mengedit crontab.

crontab -e

Tambahkan baris berikut.

00 2 * * * /usr/bin/certbot renew --quiet

Ini akan memeriksa pukul 02:00 jika ada sertifikat yang membutuhkan perpanjangan dan akan memperbaruinya jika benar.

Langkah 6 - Menguji semuanya

Buka server Guacamole Anda (salah satu http://<ip>/atau https://rdp.example.com)).

Untuk tes ini, Anda akan membutuhkan dua instance lagi: satu Linux VM dan Windows Server 2012 R2 lainnya dengan IP pribadi diaktifkan pada keduanya.

Menambahkan koneksi Windows RDP

Klik " username" di sudut kanan atas dan pergi ke " Settings". Lalu buka " Connections" dan pilih " New Connection".

Isi pengaturan berikut (Anda dapat membiarkan yang lain default).

Name: Windows Server 2012 R2
Location: ROOT
Protocol: RDP
Maximum number of connections: 1
Maximum number of connections per user: 1
Parameters > Hostname: 10.99.0.12
Parameters > Port: 3389
Username: Administrator
Password: <password> (provided by Vultr)
Security mode: Any
Ignore server certificate: <checked>

Tekan " save" dan kembali ke layar beranda. Sekarang Anda dapat mengklik " Windows Server 2012 R2" koneksi dan itu akan RDP ke mesin ini.

Menambahkan koneksi Linux SSH

Tekan " Ctrl+Shift+Alt". Ini akan memunculkan menu di samping. Di sini Anda dapat memutuskan koneksi atau melakukan tugas administratif lainnya untuk Guacamole.

Klik usernamedi bagian atas dalam menu dan pergi ke " Settings". Lalu buka Connectionstab " " dan pilih " New Connection".

Isi pengaturan berikut (Anda dapat membiarkan yang lain default).

Name: Linux
Location: ROOT
Protocol: SSH
Maximum number of connections: 5
Maximum number of connections per user: 2
Parameters > Hostname: 10.99.0.11
Parameters > Port: 22
Username: root
Password: <password> (provided by Vultr)

Tekan " save" dan kembali ke layar beranda. Sekarang Anda dapat mengklik koneksi yang baru dibuat ini dan terhubung ke server Linux Anda melalui SSH.

Kesimpulan

Anda sekarang memiliki gateway RDP / SSH HTML5 web. Sekarang Anda dapat firewall akses RDP dan SSH publik platform Anda dan mengakses lingkungan Anda dari browser modern apa pun. Untuk informasi lebih lanjut tentang apa yang bisa ditawarkan Guacamole, ada video bagus yang menunjukkan semua kemungkinan platform di sini .



Leave a Comment

Wawasan tentang 26 Teknik Analisis Data Besar: Bagian 1

Wawasan tentang 26 Teknik Analisis Data Besar: Bagian 1

Wawasan tentang 26 Teknik Analisis Data Besar: Bagian 1

6 Hal yang Sangat Menggila dari Nintendo Switch

6 Hal yang Sangat Menggila dari Nintendo Switch

Banyak dari Anda tahu Switch keluar pada Maret 2017 dan fitur-fitur barunya. Bagi yang belum tahu, kami sudah menyiapkan daftar fitur yang membuat 'Switch' menjadi 'gadget yang wajib dimiliki'.

Janji Teknologi Yang Masih Belum Ditepati

Janji Teknologi Yang Masih Belum Ditepati

Apakah Anda menunggu raksasa teknologi untuk memenuhi janji mereka? periksa apa yang belum terkirim.

Fungsionalitas Lapisan Arsitektur Referensi Big Data

Fungsionalitas Lapisan Arsitektur Referensi Big Data

Baca blog untuk mengetahui berbagai lapisan dalam Arsitektur Big Data dan fungsinya dengan cara yang paling sederhana.

Bagaimana AI Dapat Membawa Otomatisasi Proses ke Tingkat Selanjutnya?

Bagaimana AI Dapat Membawa Otomatisasi Proses ke Tingkat Selanjutnya?

Baca ini untuk mengetahui bagaimana Kecerdasan Buatan menjadi populer di antara perusahaan skala kecil dan bagaimana hal itu meningkatkan kemungkinan untuk membuat mereka tumbuh dan memberi keunggulan pada pesaing mereka.

CAPTCHA: Berapa Lama Itu Bisa Tetap Menjadi Teknik yang Layak Untuk Perbedaan Human-AI?

CAPTCHA: Berapa Lama Itu Bisa Tetap Menjadi Teknik yang Layak Untuk Perbedaan Human-AI?

CAPTCHA telah berkembang cukup sulit bagi pengguna untuk dipecahkan dalam beberapa tahun terakhir. Apakah itu akan tetap efektif dalam deteksi spam dan bot di masa mendatang?

Singularitas Teknologi: Masa Depan Peradaban Manusia yang Jauh?

Singularitas Teknologi: Masa Depan Peradaban Manusia yang Jauh?

Saat Sains Berkembang dengan kecepatan tinggi, mengambil alih banyak upaya kita, risiko menundukkan diri kita pada Singularitas yang tidak dapat dijelaskan juga meningkat. Baca, apa arti singularitas bagi kita.

Telemedicine Dan Perawatan Kesehatan Jarak Jauh: Masa Depan Ada Di Sini

Telemedicine Dan Perawatan Kesehatan Jarak Jauh: Masa Depan Ada Di Sini

Apa itu telemedicine, perawatan kesehatan jarak jauh dan dampaknya terhadap generasi mendatang? Apakah itu tempat yang bagus atau tidak dalam situasi pandemi? Baca blog untuk menemukan tampilan!

Pernahkah Anda Bertanya-tanya Bagaimana Hacker Menghasilkan Uang?

Pernahkah Anda Bertanya-tanya Bagaimana Hacker Menghasilkan Uang?

Anda mungkin pernah mendengar bahwa peretas menghasilkan banyak uang, tetapi pernahkah Anda bertanya-tanya bagaimana cara mereka mendapatkan uang sebanyak itu? mari berdiskusi.

Pembaruan Tambahan macOS Catalina 10.15.4 Menyebabkan Lebih Banyak Masalah Daripada Menyelesaikan

Pembaruan Tambahan macOS Catalina 10.15.4 Menyebabkan Lebih Banyak Masalah Daripada Menyelesaikan

Baru-baru ini Apple merilis macOS Catalina 10.15.4 pembaruan suplemen untuk memperbaiki masalah tetapi tampaknya pembaruan menyebabkan lebih banyak masalah yang mengarah ke bricking mesin mac. Baca artikel ini untuk mempelajari lebih lanjut