Cara Mengkonfigurasi Plugin Keamanan Wordfence untuk WordPress

Seberapa pentingnya menjaga blog kita dari serangan mailware? sebelum terjadi lebih baik melakukan pencegahan supaya suatu saat nantinya tidak menimbulkan masalah. Plugin firewall Wordfence merupakan salah satu dari sekian plugin yang direkomendasikan sebagai firewall terhadap serangan mailware pada WordPress.

Sedikit membahas pengaturan setelah install plugin firewall Wordfence pada VPS yang menggunakan web server Nginx, terutama untuk installasi server block, jika plugin tidak bekerja perlu modifikasi sedikit pada file php.ini, kalau pada CentOS 7 terletak pada /etc/php.ini, cari kode auto_prepend_file = dan pastikan seperti berikut:

auto_prepend_file = '/var/www/example.com/wordfence-waf.php'

example.com merupakan nama folder lokasi WorPress diinstall.
Sementara sampai disini untuk langkah pengaturan lanjutan mungkin lain kali akan saya bahas.

Menghapus Installasi Nginx

Terkadang kita bingung dengan beberapa pilihan untuk menggunakan Nginx standard atau custom, sudah semestinaya kalau hasil installasi dirasa kurang memuaskan maka diuninstall dan selanjutnya install lagi.

Berikut contoh uninstall Nginx menggunakan user non root dengan hak akses sudo dan dijalankan pada terminal ssh. Sebagai pembanding jika install Nginx standart pada Ubuntu dengan perintah: sudo apt-get install nginx nginx-common dan CentOS sudo yum install nginx nginx-common
Sedangkan unstall dengan cara:

# sudo apt-get remove nginx nginx-common # Menghapus semua file konfigurasi
# sudo apt-get purge nginx nginx-common # Menghapus total
# sudo apt-get autoremove # Setelah menggunakan salah satu perintah di atas, menggunakan perintah ini untuk menghapus dependensi nginx yang tidak diperlukan lagi.

Caranya cukup mudah, saran sebelum uninstall simpan dulu pengaturan konfigurasi yang telah dibuat sebelumnya, terutama bila sebelumnya install web pada server block.

Membuat kunci domain mengidentifikasikan email DKIM

Membuat DKIM atau kunci domain mengidentifikasikan email sesuai judulnya fungsinya sebagai identifikasi pada email untuk mencegah spoofing dan phishing email yang nantinya akan diimplementasikan pada DNS record domain.

Langkah pertama membuat Private Key menggunakan OpenSSL:

openssl genrsa -out domain.com-dkim-private.key 1024

Selanjutnya membuat Public Key

openssl rsa -in domain.com-dkim-private.key -out domain.com-dkim-public.key -pubout -outform PEM

nama domain.com diganti dengan domain yang digunakan, untuk melihat key yang sudah di generate dengan cara:
cat domain.com-dkim-public.key
langkah selanjutnya menambahkan pada DNS server management dan pilih TXT record, pada bagian Hostname diisi mail._domainkey.domain.com kalau sewa vps nya di Digital Ocean cukup ditulis mail._domainkey dan bagian Value v=DKIM1; k=rsa; p=kode-kunci-public-dkim kode kunci public diganti dengan kode hasil generate sebelumnya, tanda —–BEGIN PUBLIC KEY—– dan —–END PUBLIC KEY—– silahkan dihilangkan, contoh seperti berikut:

v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDGjmUuW+YcjQZbzTV/KP9XFuKA nv2DAwBMpPWglvFVsdhshgdhfjdWhbkBggtFDL8Sho8mGT7KCjbEf6QU/0HGuP2q3ONPj0R5aw Hdea00EGOikJqwoTe3zB8kmhQmgzA2CbaLRYnKdsnjHHYYGRSffnsdntrSCaJUp1AW7 l2ZcpVkesgHrkgOmLQIDAQAB

dan yang terakhir di cek pada mail tester untuk penambahan lainya bisa dilakukan pengaturan pada SPF.

[ERROR] InnoDB: Cannot allocate memory for the buffer pool

Kejadian tadi malam sebelum tidur saya biasa mengecek blog WordPress saya kok tiba tiba mati, dengan keterangan Error Establishing a Database Connection. Saya cek server melalui ssh aktif dan dilanjutkan cek MySQL ternyata mati dan tidak bisa dihidupkan.

Muncul keterangan seperti berikut:

220417 02:26:13 mysqld_safe Number of processes running now: 0
220417 02:26:13 mysqld_safe mysqld restarted
220417 02:26:13 [Note] Plugin 'FEDERATED' is disabled.
220417 02:26:13 InnoDB: The InnoDB memory heap is disabled
220417 02:26:13 InnoDB: Mutexes and rw_locks use GCC atomic builtins
220417 02:26:13 InnoDB: Compressed tables use zlib 1.2.3
220417 02:26:13 InnoDB: Using Linux native AIO
220417 02:26:13 InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: mmap(137363456 bytes) failed; errno 12
220417 02:26:13 InnoDB: Completed initialization of buffer pool
220417 02:26:13 InnoDB: Fatal error: cannot allocate memory for the buffer pool
220417 02:26:13 [ERROR] Plugin 'InnoDB' init function returned error.
220417 02:26:13 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
220417 02:26:13 [ERROR] Unknown/unsupported storage engine: InnoDB
220417 02:26:13 [ERROR] Aborting

Selanjutnya mencoba untuk merestart MySQL nya dan keluar keterangan ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (111) Tidak dapat terhubung ke server MySQL lokal melalui soket.
Untuk mengatasi server tidak memiliki memori yang cukup dalam mengalokasikan proses MySQL saya menambahkan swap, dan saya baru sadar ketika install server belum saya buatkan swap. sudah 3 bulan saya menggunakan VPS Digital Ocean dengan spesifikasi rendah, caranya untuk menambahkan swap pada server, sebagai pengguna root seperti berikut:

# dd if=/dev/zero of=/swap.dat bs=1024 count=512M
# mkswap /swap.dat
# swapon /swap.dat

Selanjutnya edit file /etc/fstab nanti tampilan bagian bawah seperti berikut:

/swapfile none swap sw 0 0

langkah berikutnya edit file /etc/my.cnf dan tambahkan kode:

[mysqld]
innodb_buffer_pool_size=64M

kemudian coba restart MySQL server nya, setelah aktif kembali bisa di cek log nya secara berkala, siapa tahu masih ada masalah lainya.

Merubah URL WordPress menggunakan baris perintah pada MySQL

Tulisan ini solusi apabila kita menginstall WordPress dalam server tanpa disertai phpMyAdmin, pengalaman saya ketika mengganti url pada pengaturan alamat situs WordPress misalnya url http://example.com kita ganti jenjadi https://example.com setelah pengaturan disimpan blog tidak bisa diakses karena sebelumnya ada kesalahan terhadap pengalihan http ke https pada server tersebut. Untuk mengembalikan url kepengaturan semula dengan cara masuk ke MySQL di terminal tengan perintah:

user@server:~$ mysql -u root -p
Enter password:

selanjutnya ketik perintah:

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| yoursite_db        |
+--------------------+
4 rows in set (0.01 sec)

mysql> use yoursite_db;
mysql> show tables;
+-------------------------------------+
| Tables_in_yoursite-db               |
+-------------------------------------+
| wp_commentmeta                      |
| wp_comments                         |
| wp_customcontactforms_field_options |
| wp_customcontactforms_fields        |
| wp_customcontactforms_forms         |
| wp_customcontactforms_styles        |
| wp_customcontactforms_user_data     |
| wp_links                            |
| wp_options                          |
| wp_postmeta                         |
| wp_posts                            |
| wp_term_relationships               |
| wp_term_taxonomy                    |
| wp_terms                            |
| wp_usermeta                         |
| wp_users                            |
+-------------------------------------+
16 rows in set (0.00 sec)
mysql> select * from wp_options where option_value = 'https://example.com/';
+-----------+---------+-------------+---------------------------------+----------+
| option_id | blog_id | option_name | option_value                    | autoload |
+-----------+---------+-------------+---------------------------------+----------+
|         1 |       0 | siteurl     | https://example.com             | yes      |
+-----------+---------+-------------+---------------------------------+----------+
1 row in set (0.00 sec)

Selanjutnya kita merubah https://example.com ke http://example.com

mysql> update wp_options set option_value = 'http://example.com' where option_id = 1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

lalu kita cek:

mysql> select * from wp_options where option_value = 'http://example.com';
Empty set (0.00 sec)
mysql> select * from wp_options where option_value = 'http://example.com';
+-----------+---------+-------------+------------------------+----------+
| option_id | blog_id | option_name | option_value           | autoload |
+-----------+---------+-------------+------------------------+----------+
|         1 |       0 | siteurl     | http://example.com     | yes      |
+-----------+---------+-------------+------------------------+----------+
1 row in set (0.00 sec)

url sudah berubah, selanjutnya keluar dari MySQL

mysql>exit
Bye
user@server:~$

Sekarang bisa dicoba refresh halaman WordPress.

Cara lain untuk mengganti url WordPress bisa baca referensi wp codex

Membuat Simbolic Link Pada CentOS

Simbolic Link istilah simple adalah cara untuk menyambung folder atau file tertentu di dalam server, misalnya untuk memanggil module, dengan perintah:

ln -s /etc/nginx/module/ /usr/share/nginx/module/

Maka folder atau file yang tersedia pada /etc/nginx/module/ sama dengan pada folder /usr/share/nginx/module/

dan untuk memisah atau memutus hubungan dengan perintah:

ll /etc/nginx/module/ /usr/share/nginx/module/

Ada lagi perintah untuk masuk ke folder yang di tuju dengan perintah:

cd /etc/nginx/

Maka posisi akan berada pada folder nginx untuk melihat isi folder ketik perintah:

ls -l

maka akan ditampilkan isi foldernya.

Ya seperti itulah notes pendek Simbolic Link.

Solusi WordPress update minta akses FTP perlu pengaturan pada VPS

Solusi terhadap WordPress ketika melakukan update core atau upload theme dan plugin biasanya diminta akses FTP, untuk menghilangkan pop-up tersebut maka perlu ditambahkan pengaturan pada VPS dengan merubah permision pada folder Nginx lokasi WordPress diinstall.

Misalnya pada CentOS lokasinya di /usr/share/nginx/ maka kita ketik:

chown -R nginx:nginx /usr/share/nginx/

dan pada Ubuntu:

chown -R www-data:www-data /var/www/folder-domain.com/

Dengan seperti itu notifikasi akses FTP tidak akan muncul kembali.

Menyembunyikan X-Powered-By : PHP / header_remove

Setiap kali kita melakukan perubahan terhadap server ataupun edit theme WordPress hal selanjutnya adalah mengecek melalui inspect element / tool browser, nah pada bagian tab network lalu kita klik folder website disitu dapat kita lihat status header dengan keterangan X-Powered-By : PHP… dan keterangan tersebut bisa disembunyikan dengan cara  melakukan pengeditan pada file php.ini. Letaknya kalau pada server CentOS terletak pada /etc/php.ini, dan pada Ubuntu pada folder /etc/php/7.1/fpm/php.ini tapi tidak semua distro sama tergantung susunan stacknya saat installasi, edit file tersebut dan cari kode expose_php = On dirubah menjadi

expose_php = Off

.
Referensi belajar: http://php.net/manual/kr/function.header-remove.php

Menambah keamanan pada php.ini

Menambah keamanan pada php.ini merupakan bagian kecil dari sistem security untuk suatu website, berbagai upaya selalu dilakukan untuk memperkuat keamanan sistem guna mencegah setiap ancaman yang mungkin terjadi, dan selalu ada baiknya untuk mengunci setiap instalasi server baru sebanyak mungkin. Ada beberapa langkah sederhana yang bisa dilakukan pada file konfigurasi php.ini yang akan membantu mengamankan PHP. Dilakukan dengan editor teks, buka file /etc/php/7.2/fpm/php.ini. Ini merupakan file besar. Bisa menggunakan editor Vim atau lainya dengan yang memiliki fungsi pencarian akan lebih baik.

Beberapa yang akan dirubah:

disable_functions tambahkan phpinfo, system, mail, exec pada bagian akhir dari string fungsi yang sudah ada.
file_uploads dan set ke Off #ini mematikan fungsi upload tidak direkomendasikan untuk awam
sql.safe_mode dan aktifkan On.
allow_url_fopen dan set ke Off
Sebelum menutup file, tambahkan satu baris lagi bagian akhir.
register_globals = Off

Setelah selesai simpan lalu tutup dan jangan lupa restart

sudo systemctl restart php7.2-fpm && sudo systemctl restart nginx

Menghilangkan ujung URL ?v=b718adec73e0 pada WordPress

Saya pernah mengalami url blog WordPress dengan embel-embel pada bagian ujung ?v=b718adec73e0, setelah saya telusuri dengan meng-nonaktifkan beberapa plugin satu-persatu ternyata masalahnya terletak pada plugin WooCommerce, embel-embel ?v=b718adec73e0 muncul karena saya mengaktifkan fitur Geolocate (with page caching support), untuk meng-nonaktifkan pengaturanya terletak pada wp-admin/admin.php?page=wc-settings tepatnya pada pilihan Default Customer Location.

Simpan pengaturan dan coba refres halaman, embel-embel ?v=b718adec73e0 sudah tidak muncul lagi.