การตั้งค่าสภาพแวดล้อมการจัดเตรียมวีโอไอพีด้วยการ จำกัด การเข้าถึง


18

ฉันกำลังพยายามหาวิธีที่ดีที่สุดในการตั้งค่าสภาพแวดล้อมการจัดเตรียมด้วยข้อ จำกัด การเข้าถึงบางอย่าง

วิธีแก้ปัญหาง่ายๆคือการพิสูจน์ตัวตนพื้นฐาน แต่แล้วฉันจะไม่สามารถระบุ Google Page Speed ​​Insights ได้ในขณะที่ทดสอบการเพิ่มประสิทธิภาพประสิทธิภาพรวมถึงบริการภายนอกอื่น ๆ ที่คล้ายกันที่ฉันต้องการเข้าถึง

สามารถทำให้เป็นสาธารณะโดยสมบูรณ์กับ robots.txt เพื่อป้องกันไม่ให้ปรากฏในเครื่องมือค้นหา แต่ข้อกังวลของฉันคือความเสี่ยงของความผิดพลาดใด ๆ ใน robots.txt นั้นค่อนข้างสูงและฉันไม่ต้องกังวลเกี่ยวกับเรื่องนี้

หากคุณไม่บล็อกเครื่องมือค้นหา (หรือบางคนไม่สนใจ) คุณจะได้รับลูกค้าสดที่สั่งซื้อไปยังไซต์การแสดงละครของคุณซึ่งจะไม่ทำให้พวกเขามีความสุข

หรือแย่กว่านั้นคือถ้าคุณบังเอิญปรับใช้ robots.txt กับการผลิตคุณจะสูญเสียน้ำผลไม้ Google ทั้งหมดและยอดขายอันดี

ตัวเลือกที่ฉันชอบคือการ จำกัด ที่อยู่ IP อย่างง่าย ๆ แต่ฉันชอบที่จะสามารถเพิ่ม / ลบข้อ จำกัด โดยไม่ต้องรีสตาร์ท Nginx เพียงเพื่อลดความเสี่ยงอีกครั้งในขณะที่ทำการเปลี่ยนแปลง

ดังนั้นฉันเริ่มโน้มตัวไปยังโมดูลด่วนที่เมื่อเปิดใช้งานจะดูที่อยู่ IP ของผู้พัฒนาและอนุญาตการเข้าถึงไซต์ (ด้านหน้าและด้านหลัง) เท่านั้นหากที่อยู่ IP ของผู้ใช้ (หรือ X_FORWARDED_FOR) ตรงกัน

สงสัยว่าสิ่งนี้ฟังดูเหมือนเป็นคำตอบที่สมเหตุสมผลหรือหากมีบางสิ่งที่ง่ายกว่าที่ฉันคิดถึง

อัปเดต: เนื่องจาก robots.txt สามารถควบคุมได้ผ่านสวิตช์แบ็คเอนด์เนทีฟและประกาศร้านค้าตัวอย่างจะป้องกันการสั่งซื้อของลูกค้าที่ถูกต้องตามกฎหมายและเนื่องจากฉันไม่ได้กังวลเกี่ยวกับการเข้าถึงเว็บไซต์การแสดงสาธารณะฉันชอบโซลูชันของ Phil

แต่สำหรับใครก็ตามที่ต้องการ จำกัด การเข้าถึงเว็บไซต์ชั่วคราวของพวกเขาฉันคิดว่าโซลูชันของ Kris เป็นวิธีที่จะไป

UPDATE 2: ไม่แน่ใจ 100% ว่าตัวเลือก robots.txt ควรทำอะไรใน System Config> Design> HTML Head แต่ในกรณีของฉัน - และจากการค้นหาสั้น ๆ สิ่งนี้ดูเหมือนจะเป็นเรื่องธรรมดา - ฉันเพิ่งมี robots.txt แบบแบน ไฟล์ข้อความที่ใช้งานอยู่ดังนั้นตัวเลือกการกำหนดค่าจะไม่ได้รับการเคารพ

ดังนั้นฉันจะไปกับโมดูลการบำรุงรักษาในตอนนี้: https://github.com/aleron75/Webgriffe_Maintenance

คำตอบ:


6

ข้อเสนอแนะเล็กน้อย - บางอย่างมีอยู่แล้วในตัว!

- ข้อ จำกัด IP ของนักพัฒนานั้นมีอยู่แล้วในการกำหนดค่าระบบ> ผู้พัฒนา:

สิ่งนี้ไม่ จำกัด การเข้าถึง IP ย้ายตาม

  • การ จำกัด IP นั้นยากและฉันชอบที่จะจัดการเรื่องนี้ที่ไฟร์วอลล์ส่วนตัว ตาราง IP ยังเป็นตัวเลือกเช่นเดียวกับข้อ จำกัด htaccess หรือผ่านทาง$_SERVER['REMOTE_ADDR']ใน index.php

  • อัปเดตเมตาหุ่นยนต์ต่อหน้าเริ่มต้นใน CMS เป็น NOINDEX / NOFOLLOW ในขณะที่อยู่ในการกำหนดค่าระบบ> การออกแบบ> หัว HTML:

ป้อนคำอธิบายรูปภาพที่นี่

  • ในพื้นที่กำหนดค่าเดียวกันคือความสามารถในการแสดงการแจ้งเตือนร้านค้าตัวอย่าง :

ป้อนคำอธิบายรูปภาพที่นี่


1
ขอบคุณ Phil ฉันลืมไปแล้วว่าหุ่นยนต์เป็นตัวเลือกแบ็กเอนด์ที่เป็นค่าเริ่มต้นฉันคิดว่ามันมีความเสี่ยงน้อยกว่าที่จะใช้เพียงแค่แทนที่จะใช้ความยุ่งยากมากกว่าด้วยไฟล์ robots.txt ฉันได้รับรู้ถึงข้อ จำกัด IP ของนักพัฒนาซอฟต์แวร์ แต่พวกเขาไม่ได้ช่วยให้คุณ จำกัด การเข้าถึงเว็บไซต์ใช่ไหม? เฉพาะคุณลักษณะของนักพัฒนาเท่านั้น และการแจ้งเตือนการสาธิต - คุณควรหลีกเลี่ยงการสั่งซื้อโดยไม่ได้ตั้งใจโทรดี
kalenjordan

1
เอ้ยคุณพูดถูก ฉันไม่รู้ว่าฉันไม่รู้เรื่องนี้อย่างไร
philwinkle

11

วิธีการหลักของเราในการล็อคสภาพแวดล้อมการจัดเตรียม (ส่วนใหญ่) เป็นการตรวจสอบเบื้องต้น แต่เรายังมีมาตรการป้องกันเพื่อป้องกันไม่ให้ถูกค้นพบโดยเครื่องยนต์ยกเว้นลิงค์ที่ปรากฏบนเว็บไซต์สาธารณะ (ไม่เคยเกิดขึ้น) และเพื่อป้องกันไม่ให้ถูกทำดัชนีโดย Google

ฉันตั้งค่ากฎ/etc/httpd/conf.d/robots.confด้วยนามแฝงต่อไปนี้:

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

นามแฝงจะกำหนดเส้นทางคำขอทั้งหมดไปยังตำแหน่ง robots.txt ไปยังไฟล์ที่ถูกล็อค ซึ่งหมายความว่าไม่สำคัญว่าไฟล์ใดในไฟล์ robots.txt ในรูทการแสดงละคร Magento เซิร์ฟเวอร์จะแสดงกฎต่อไปนี้เสมอ:

User-agent: *
Disallow: /

ตำแหน่งและตอบสนองใด ๆ ที่อนุญาตให้ไฟล์ robots.txt สามารถแสดงต่อใครก็ได้โดยไม่คำนึงถึงการรับรองความถูกต้องเนื่องจากเราไม่มีdisallow from anyกฎสากล

สำหรับการตรวจสอบรหัสผ่านฉันได้รับการตั้งค่ากฎเพื่อให้ฉันสามารถเปิดการรับรองความถูกต้องในไซต์เดียวโดยการเพิ่มSatisfy anyลงใน.htaccessไฟล์ นี่เป็นเพราะเราเรียกใช้ไซต์สเตจหลายแห่งบนเซิร์ฟเวอร์ staging ภายในโดยเฉพาะ นอกจากนี้ยังอนุญาตให้ตั้งค่าallow fromกฎพร้อมกับSatisfy anyลบการรับรองความถูกต้องรหัสผ่านไปยังที่อยู่ IP ที่เฉพาะเจาะจงในขณะที่รักษาไว้ให้คนอื่น ๆ (ถ้าฉันต้องการจริงๆ)

เหตุผลที่ฉันไม่ชอบรายการที่อนุญาตจาก IP ทั่วทั้งกระดาน (เช่นที่ไม่มีการรับรองความถูกต้องด้วยรหัสผ่าน) เป็นเพราะที่อยู่ IP ของลูกค้าไม่คงที่เสมอไป ซึ่งหมายความว่าเราจะต้องอัปเดต IP ของพวกเขาเพื่อให้เข้าถึงได้ทุกวันหรือทุกสัปดาห์ขึ้นอยู่กับระยะเวลาที่ ISPs DHCP ของพวกเขาถือครองอยู่

สำหรับ DNS เราใช้ wildcard DNS เพื่อให้โปรแกรมรวบรวมข้อมูล DNS ไม่ดึงข้อมูลชื่อโฮสต์ทั้งหมดของไซต์บนเวทีซึ่งต้องมี DNS สาธารณะ Google จะรับไซต์จากระเบียน DNS วิธีนี้ป้องกันไม่ได้ซึ่งหมายความว่าวิธีเดียวที่พวกเขาจะพบคือถ้ามีคนออกจากลิงค์ที่วางอยู่ที่ไหนสักแห่ง แต่ด้วยการบังคับให้ไฟล์ robots แสดงกฎ disallow จะหยุดการสร้างดัชนีหากพบลิงค์

เมื่อฉันอยู่ในสถานที่ของผู้ค้าที่ใช้ไซต์เวทีสำหรับเว็บไซต์ของ บริษัท ฉันจะทำสิ่งต่าง ๆ เล็กน้อยและจะบล็อกการรับส่งข้อมูลทั้งหมดที่มาถึงกล่องเวทียกเว้นว่าจะมีที่อยู่ IP ที่รู้จัก ทุกคนที่ทำงานบนไซต์จากระยะไกล (ในองค์กร) จะต้องเชื่อมต่อกับ VPN ของ บริษัท เพื่อเข้าถึงหากพวกเขาไม่มี IP แบบคงที่ซึ่งฉันสามารถขึ้นบัญชีขาวได้

การมี DNS สาธารณะเป็นสิ่งจำเป็นหากคุณต้องการทดสอบสิ่งต่าง ๆ เช่นการรวมระบบประมวลผลการชำระเงินซึ่งไม่เหมือนกับเกตเวย์ส่วนใหญ่จะต้องทำการโทรกลับไปยังเซิร์ฟเวอร์เพื่อดำเนินการตามกระบวนการชำระเงิน


2
นี่ช่างคิดจริงๆ เรายังใช้การตรวจสอบสิทธิ์ขั้นพื้นฐาน แต่ใช้เวลาส่วนใหญ่จะนำเสนอความท้าทายเดียวกันกับการแสดงละครที่คุณโทรออกไป: processers การชำระเงิน ฯลฯ
philwinkle

6

ฉันได้พัฒนาโมดูลสำหรับเปิดใช้งานโหมดการบำรุงรักษาซึ่งสามารถใช้กับเอฟเฟกต์เดียวกันของการบล็อกผู้ใช้ที่เข้าถึงด้านหน้า (ไม่ใช่ผู้ดูแลระบบซึ่งสามารถ จำกัด ด้วยคุณสมบัติการบล็อก IP ดั้งเดิมของ Magento)

คุณสามารถ infact อนุญาตให้ IP บางส่วนสามารถเข้าถึงส่วนหน้าได้แม้จะเปิดใช้งานโหมดบำรุงรักษาก็ตาม

บางทีคุณอาจลองดูก็ได้ แต่หวังว่ามันจะช่วยได้ ฟรีและโอเพ่นซอร์ส: https://github.com/aleron75/Webgriffe_Maintenance


+1 ดี! นี่คือประเภทของโมดูลที่ฉันมีอยู่ในใจ คุณได้ทดสอบมันด้านหลังวานิชหรือไม่?
kalenjordan

สวัสดีโชคไม่ดีที่ฉันไม่ได้ทดสอบด้านหลังวานิชขออภัย คุณจะทำเช่นนั้น? ;-)
Alessandro Ronchi

ทำงานในสภาพแวดล้อมการจัดเตรียมของฉัน ผมก็ไม่แน่ใจว่าตรรกะนี้จะทำงาน B / C ผมเคยเห็นREMOTE_ADDRจะมี แต่ไม่ได้อยู่ที่ถูกต้องดังนั้นฉันคิดว่ามันอาจจะดีกว่าที่จะเปรียบเทียบกับอย่างใดอย่างหนึ่ง หรือREMOTE_ADDR X_FORWARDED_FORทำงานได้ดีในการจัดเตรียม แต่ฉันก็ยังไม่กังวลเกี่ยวกับการขุดลงไปเอง
kalenjordan

4

มีหลายวิธีในการทำเช่นนี้

วิธีหนึ่งคือการทำให้นักพัฒนาของคุณแก้ไขไฟล์ / โฮสต์ของพวกเขาด้วยที่อยู่ IP ที่ถูกต้อง

มีการขยายออกไปที่อ้างว่าทำสิ่งนี้อย่างสง่างามมากขึ้น: http://www.magentocommerce.com/magento-connect/et-ip-security.html


1
ขอบคุณคริส! ฉันคิดว่าฉันกำลังใช้งานคุณสมบัติการสาธิตของร้านค้าตอนนี้ที่ฉันคิดถึงมัน เนื่องจากฉันไม่ต้องไปยุ่งกับ robots.txt ด้วยตนเองและมีการแจ้งเตือนร้านค้าตัวอย่างฉันคิดว่าเพียงพอแล้ว แต่สำหรับใครก็ตามที่ต้องการ จำกัด การเข้าถึงการแสดงละครฉันคิดว่าโมดูลที่คุณพบนั้นเป็นวิธีที่จะไป ขอบคุณ !!
kalenjordan

2

เมื่อคุณถามเกี่ยวกับวานิชในความคิดเห็นฉันจะแชร์การกำหนดค่าของฉันกับ HTTP Basic Authentication โดยใช้วานิชรวมถึงข้อยกเว้น คุณต้องตั้งค่าใน VCL มิฉะนั้นหน้าแคชจะสามารถเข้าถึงได้เสมอ

Varnish VCL configuration

ฉันต้องการอนุญาตให้อยู่ IP และช่วงบางช่วงสำหรับการเรียกกลับของผู้ให้บริการชำระเงินและเช่นนั้นซึ่งฉันกำหนดเป็น ACL ที่ด้านบนของไฟล์ VCL:

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

จากนั้นเพิ่มสิ่งต่อไปนี้ในตอนท้ายของvcl_recvก่อนหน้าreturn (lookup):

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

paymentคือ ACL ที่กำหนดไว้ด้านบน ฉันยังอนุญาตให้เข้าถึงเส้นทางการอัปโหลดเนื่องจากตัวอัปโหลด Flash ไม่ได้ส่งส่วนหัวการตรวจสอบสิทธิ์และล้มเหลวหลัง HTTP Basic Auth แทนที่ ADMIN ด้วย URL ผู้ดูแลระบบที่แท้จริงของคุณ คุณสามารถเพิ่มข้อยกเว้นอื่น ๆ ด้วยวิธีนี้

XXXXXXXXXX เป็นชื่อผู้ใช้และรหัสผ่านที่เข้ารหัส base64 รันสิ่งต่อไปนี้บนเชลล์เพื่อสร้างสตริงนี้:

$ echo -n "username:password" | base64

จากนั้นเพิ่มสิ่งนี้ที่ส่วนท้ายของ VCL เพื่อกำหนดการตอบสนองข้อผิดพลาด 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);
}
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.