Menyiapkan Lingkungan Pementasan Magento dengan Akses Terbatas

18

Saya mencoba mencari cara terbaik untuk mengatur lingkungan pementasan dengan beberapa batasan akses.

Solusi sederhananya adalah dengan memunculkan Otentikasi Dasar, tetapi kemudian saya tidak akan dapat mengarahkan Google Page Speed ​​Insight padanya sambil menguji optimasi kinerja, serta layanan eksternal serupa lainnya yang ingin saya akses.

Dapat menjadikannya sepenuhnya publik dengan robots.txt untuk mencegahnya muncul di mesin pencari. Tapi kekhawatiran saya ada risiko kesalahan pada robots.txt cukup tinggi, dan saya lebih suka tidak perlu khawatir tentang itu.

Jika Anda tidak memblokir mesin pencari (atau jika beberapa mengabaikannya), maka Anda akan mendapatkan pelanggan langsung melakukan pemesanan ke situs pementasan Anda, yang tidak akan membuat mereka bahagia.

Atau bahkan lebih buruk, jika Anda secara tidak sengaja menggunakan robots.txt untuk produksi, Anda akan kehilangan semua jus Google Anda dan sebagian besar penjualan.

Jadi opsi yang saya sukai adalah pembatasan alamat IP sederhana. Tetapi saya ingin dapat menambah / menghapus pembatasan tanpa harus memulai ulang Nginx, hanya untuk meminimalkan risiko saat membuat perubahan.

Jadi saya mulai condong ke modul cepat yang, ketika diaktifkan, akan melihat alamat IP pengembang dan hanya mengizinkan akses ke situs (depan dan belakang) jika alamat IP pengguna (atau X_FORWARDED_FOR) cocok dengan itu.

Ingin tahu apakah ini terdengar seperti solusi yang masuk akal atau jika ada sesuatu yang lebih sederhana yang saya lewatkan.

UPDATE: Mengingat bahwa robots.txt dapat dikontrol melalui saklar backend asli dan pemberitahuan toko demo akan mencegah pesanan pelanggan yang sah, dan karena saya benar-benar tidak peduli tentang akses publik ke situs pementasan, saya suka solusi Phil.

Tetapi bagi siapa pun yang ingin membatasi akses ke situs pementasan mereka, saya pikir solusi Kris adalah cara untuk pergi.

UPDATE 2: Tidak 100% yakin apa yang seharusnya dilakukan opsi robots.txt di System Config> Design> HTML Head, tetapi dalam kasus saya - dan dari pencarian singkat ini tampaknya umum - saya hanya punya robots.txt datar file teks di tempat yang sedang digunakan, sehingga opsi konfigurasi tidak dihormati.

Jadi saya akan menggunakan modul perawatan untuk saat ini: https://github.com/aleron75/Webgriffe_Maintenance

kalenjordan
sumber

Jawaban:

6

Beberapa saran - ada yang built-in!

- Pembatasan IP Pengembang sudah ada di System Config> Developer:

Ini tidak membatasi akses IP. Berjalan terus.

  • Pembatasan IP sangat sulit dan saya lebih suka menangani ini di firewall, secara pribadi. Tabel IP juga merupakan kandidat, seperti halnya pembatasan htaccess atau via $_SERVER['REMOTE_ADDR']di index.php.

  • Perbarui meta robot per-halaman default di CMS ke NOINDEX / NOFOLLOW saat dalam pementasan dalam System Config> Design> HTML Head:

masukkan deskripsi gambar di sini

  • Di area konfigurasi yang sama, adalah kemampuan untuk menampilkan pemberitahuan toko demo :

masukkan deskripsi gambar di sini

Philwinkle
sumber
1
Terima kasih, Phil. Saya agak lupa bahwa robot adalah opsi backend default, saya kira itu membuatnya sedikit lebih berisiko untuk hanya menggunakan itu daripada sibuk secara manual dengan file robots.txt. Saya sebenarnya mengetahui batasan IP pengembang, tetapi sebenarnya tidak membantu Anda membatasi akses ke situs, bukan? Hanya untuk fitur pengembang? Dan pemberitahuan demo - ya itu pasti harus menghindari pelanggan melakukan pemesanan karena kesalahan, panggilan yang baik.
kalenjordan
1
Astaga, kamu benar. Saya tidak tahu bagaimana saya tidak tahu itu.
philwinkle
11

Sarana utama kami untuk mengunci (sebagian besar) lingkungan pementasan adalah otentikasi BASIC. Tetapi kami juga memiliki langkah-langkah pencegahan untuk mencegah mereka ditemukan oleh mesin, menghalangi tautan yang muncul di situs web publik (ini tidak pernah terjadi), dan juga untuk mencegah mereka diindeks oleh Google.

Saya telah menyiapkan aturan /etc/httpd/conf.d/robots.confdengan alias berikut:

Alias /robots.txt /<path_to_public_html>/robots.txt
<Location /robots.txt>
  Satisfy any
</Location>

Alias ​​merutekan semua permintaan ke lokasi robots.txt ke file yang dikunci. Ini berarti tidak masalah apa yang ada di file robots.txt di root staging Magento, server akan selalu menyajikan aturan berikut:

User-agent: *
Disallow: /

Lokasi dan memenuhi semua memungkinkan file robots.txt untuk dilayani oleh siapa pun terlepas dari otentikasi karena kami tidak memiliki disallow from anyaturan global .

Untuk otentikasi kata sandi, saya telah menyiapkan aturan sehingga saya dapat membuka otentikasi pada satu situs sementara dengan menambahkan Satisfy anyke .htaccessfile. Ini karena kami menjalankan beberapa situs panggung pada server pementasan internal khusus yang sama. Ini juga akan memungkinkan pengaturan allow fromaturan bersama dengan Satisfy anyuntuk menghapus otentikasi kata sandi ke alamat IP tertentu sambil mempertahankannya untuk orang lain (jika saya benar-benar perlu).

Alasan saya tidak suka daftar putih berbasis IP di seluruh papan (yaitu tanpa otentikasi berbasis kata sandi) adalah karena alamat IP klien tidak selalu statis. Yang berarti kita kemudian harus memperbarui IP mereka untuk mendapatkan mereka mengakses (berpotensi) setiap hari atau setiap minggu tergantung pada berapa lama ISP mereka DHCP memegang sewa.

Untuk DNS, kami menggunakan wildcard DNS sehingga perayap DNS tidak akan mengambil semua nama host situs panggung yang perlu memiliki DNS publik. Google sebenarnya akan mengambil situs dari catatan DNS. Ini mencegah hal itu, artinya satu-satunya cara bagi mereka untuk menemukannya adalah jika seseorang meninggalkan tautan di suatu tempat. Tetapi dengan memaksa file robot untuk melayani aturan larangan akan menghentikan mereka mengindeksnya jika mereka menemukan tautan.

Jika saya di tempat pedagang menjalankan situs panggung untuk situs web perusahaan, saya akan melakukan hal-hal sedikit berbeda dan hanya akan langsung memblokir semua lalu lintas yang datang ke kotak panggung kecuali itu diketahui alamat IP. Siapa pun yang bekerja di situs ini dari jarak jauh (in-house) akan diminta untuk terhubung ke VPN perusahaan untuk mengakses jika mereka tidak memiliki IP statis yang dapat saya daftar putih.

Memiliki DNS publik adalah suatu keharusan jika Anda perlu menguji hal-hal seperti integrasi prosesor pembayaran, yang, tidak seperti kebanyakan gateway, harus membuat panggilan balik ke server untuk melalui proses pembayaran.

davidalger
sumber
2
Ini sangat bijaksana. Kami juga menggunakan BASIC auth, meskipun, sebagian besar waktu menyajikan tantangan yang sama untuk pementasan yang Anda sebut di atas: pemroses pembayaran, dll.
philwinkle
6

Saya telah mengembangkan modul untuk mengaktifkan mode pemeliharaan yang dapat digunakan dengan efek yang sama dengan memblokir pengguna mengakses fronted (bukan admin yang dapat dibatasi dengan fitur IP blocking asli Magento).

Anda dapat membuat beberapa IP mengakses frontend bahkan dengan mode pemeliharaan yang diaktifkan.

Mungkin Anda bisa mencobanya, berharap itu bisa membantu. Ini gratis dan open source: https://github.com/aleron75/Webgriffe_Maintenance

Alessandro Ronchi
sumber
+1 Bagus! Ini persis seperti modul yang ada dalam pikiran saya. Sudahkah Anda mengujinya di balik Varnish?
kalenjordan
Hai, sayangnya saya tidak mengujinya di belakang Varnish, maaf. Apakah kamu akan melakukan itu? ;-)
Alessandro Ronchi
Bekerja di lingkungan pementasan saya. Saya tidak yakin apakah logika ini akan berfungsi b / c Saya telah melihat yang REMOTE_ADDRtersedia tetapi tidak menjadi alamat yang benar, jadi saya pikir mungkin lebih baik untuk membandingkan terhadap salah satu REMOTE_ADDR atau X_FORWARDED_FOR. Bekerja dengan baik dalam pementasan jadi saya tidak terlalu khawatir menggali sendiri secara pribadi dulu.
kalenjordan
4

Ada beberapa cara berbeda untuk melakukan ini.

Salah satu caranya adalah membuat pengembang Anda mengedit file / host mereka dengan alamat IP yang benar.

Ada ekstensi di luar sana yang mengklaim melakukan ini dengan cara yang lebih elegan: http://www.magentocommerce.com/magento-connect/et-ip-security.html

kab8609
sumber
1
Kris terima kasih! Saya pikir saya condong ke arah hanya menggunakan fitur toko demo sekarang saya memikirkannya. Karena saya tidak harus berkeliling secara manual dengan robots.txt, dan memiliki pemberitahuan toko demo, saya pikir itu sudah cukup. Tetapi bagi siapa saja yang ingin membatasi akses ke pementasan, saya pikir modul yang Anda temukan adalah cara yang harus dilakukan. Terima kasih!!
kalenjordan
2

Karena Anda bertanya tentang Varnish di komentar, saya akan membagikan konfigurasi saya dengan HTTP Basic Authentication menggunakan Varnish, termasuk pengecualian. Anda harus mengaturnya di VCL, jika halaman yang di-cache akan selalu dapat diakses.

Pernis konfigurasi VCL

Saya ingin mengizinkan alamat dan rentang IP tertentu untuk panggilan balik penyedia pembayaran dan semacamnya, yang saya definisikan sebagai ACL di bagian atas file VCL:

acl payment {
  "1.2.3.4"/28;
  "1.3.3.7";
}

Kemudian tambahkan berikut ini di akhir vcl_recv, tepat sebelum return (lookup):

if (! req.http.Authorization ~ "Basic XXXXXXXXX"
&& ! client.ip ~ payment
&& ! req.url ~ "^/index.php/ADMIN/.*/upload") {
    error 401 "Restricted";
}

paymentadalah ACL yang didefinisikan di atas. Saya juga mengizinkan akses ke rute unggah karena pengunggah Flash tidak mengirim tajuk otentikasi dan dengan demikian gagal di belakang HTTP Basic Auth. Ganti ADMIN dengan URL admin Anda yang sebenarnya. Anda dapat menambahkan pengecualian lain dengan cara ini.

XXXXXXXXX adalah nama pengguna dan kata sandi yang disandikan base64. Jalankan berikut ini di shell untuk menghasilkan string ini:

$ echo -n "username:password" | base64

Kemudian tambahkan ini di akhir VCL untuk menentukan respons kesalahan 401:

sub vcl_error {
if (obj.status == 401) {
  set obj.http.Content-Type = "text/html; charset=utf-8";
  set obj.http.WWW-Authenticate = "Basic realm=Secured";
  synthetic {" 

 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
 "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">

 <HTML>
 <HEAD>
 <TITLE>Error</TITLE>
 <META HTTP-EQUIV='Content-Type' CONTENT='text/html;'>
 </HEAD>
 <BODY><H1>401 Unauthorized (varnish)</H1></BODY>
 </HTML>
 "};
  return (deliver);
}
}
Fabian Schmengler
sumber