บอตเข้าถึงไดเรกทอรีบนเซิร์ฟเวอร์ที่ไม่ใช่ DocumentRoot ของที่อยู่ IP สาธารณะได้อย่างไร ฉันจะหยุดพวกเขาได้อย่างไร


0

ฉันมีการตั้งค่าเครือข่ายท้องถิ่นด้วย apache2 และ "ชื่อ" ที่ทำงานบน OpenSuse 13.1 Linux

ฉันใช้บริการ "named" เพื่อใช้คอมพิวเตอร์เป็นเซิร์ฟเวอร์โดเมน ฉันตั้งค่าเราเตอร์ของฉันให้ชี้ไปที่คอมพิวเตอร์ของฉันเพื่อค้นหาโดเมนดังนั้นฉันจึงมีโอกาสที่จะเขียนโดเมนจำนวนมากในเครือข่ายของฉันเป็น IP ท้องถิ่นของตนเอง

มันใช้งานได้ดี

ฉันใช้การกำหนดค่าโฮสต์เสมือนเพื่ออนุญาตโดเมนและโดเมนย่อยต่างๆ (กำหนดเส้นทางใหม่ไปยัง IP เดียวกันผ่านทางชื่อ) เพื่อดึงไดเรกทอรีต่าง ๆ ในคอมพิวเตอร์ของฉัน

อัปเดต - (เพิ่มโดเมนฐานข้อมูล VirtualHost) สำหรับโดเมนของฉัน:

<VirtualHost *:80>
    ServerName 192.168.0.111
    ServerAlias for.us 192.168.0.111
    DocumentRoot /home/personal/network/for.us

    # if not specified, the global error log is used
    ErrorLog /var/log/apache2/for.us-error_log
    CustomLog /var/log/apache2/for.us-access_log combined
</VirtualHost>
<VirtualHost *:80>
    ServerName 192.168.0.111
    ServerAlias wa.net 192.168.0.111
    DocumentRoot /home/work/wa.net

    # if not specified, the global error log is used
    ErrorLog /var/log/apache2/ip-error_log
    CustomLog /var/log/apache2/ip-access_log combined
</VirtualHost>

และสำหรับโดเมนย่อยของฉัน:

<VirtualHost *:80>
    ServerName 192.168.0.111
    ServerAlias fmb.wa.net
    DocumentRoot /home/work/wa.net/fmb
</VirtualHost>
<VirtualHost *:80>
    ServerName 192.168.0.111
    ServerAlias postrecord.wa.net
    DocumentRoot /home/work/wa.net/postrecord
</VirtualHost>
<VirtualHost *:80>
    ServerName 192.168.0.111
    ServerAlias cvalley.wa.net
    DocumentRoot /home/work/wa.net/cvalley_local
</VirtualHost>

สิ่งนี้ทำให้ฉันสามารถตี cvalley.wa.net จากอุปกรณ์ใด ๆ ในเครือข่ายของฉันและรับไซต์ที่มีชีวิตอยู่ใน /home/work/wa.net/cvalley_local

ฉันตัดสินใจที่จะส่งต่อพอร์ต 80 ไปยังคอมพิวเตอร์เครื่องนี้ดังนั้นฉันจึงสามารถแบ่งปันเว็บไซต์พัฒนาบางแห่งกับเพื่อนร่วมงานได้ ฉันไม่สามารถควบคุมเว็บไซต์ที่พวกเขาเห็นด้วยบริการที่มีชื่อเดียวกันได้เนื่องจากพวกเขาจะต้องใช้คอมพิวเตอร์เป็นเซิร์ฟเวอร์ชื่อโดเมน ...

ดังนั้นฉันจึงเพิ่มบรรทัดดังนี้:

<VirtualHost *:80>
    ServerName 192.168.0.111
    ServerAlias MY.IP.XXX.XX
    DocumentRoot /home/work/wa.net/cvalley
</VirtualHost>

ที่ "MY.IP.XXX.XX" เป็นที่อยู่ IP สาธารณะของฉัน

สิ่งนี้ทำงานได้อย่างที่คาดไว้เมื่อคุณกดที่อยู่ IP ของฉันจากเครือข่ายสาธารณะคุณจะเห็นไซต์ที่มีชีวิตอยู่ใน /home/work/wa.net/cvalley

UPDATE - จุดที่ชัดเจนของความสับสน จุดสับสนที่ฉันมีคือมีที่อยู่ IP สาธารณะในบันทึกของฉันในไซต์ "for.us" นอกเหนือจากไซต์ "wa.net" ฉันคาดหวังว่า "wa.net" จะมีการเข้าถึง IP สาธารณะ แต่ฉันไม่เข้าใจว่าบอตสาธารณะกำลังเข้าถึงไซต์ "for.us" ได้อย่างไร

ฉันคาดว่าจะเป็นไปไม่ได้ที่จะเข้าถึง "for.us" ไซต์ในเครือข่ายของฉันเว้นแต่ผู้ใช้สาธารณะจะรู้ว่าฉันโทรหา ServerAliases ของฉันอย่างไรและกำลังเลียนแบบการตั้งค่าโดเมนของฉัน ...

การเข้าชมสาธารณะสามารถกดปุ่มฉันได้อย่างไร "สำหรับพวกเรา" เว็บไซต์? ฉันจะสร้างการเข้าถึงประเภทนี้ได้อย่างไร

นี่คือตัวอย่างบางส่วนของ IP สาธารณะที่เข้าชมเว็บไซต์ VirtualHost ของฉัน:

อัปเดต - คำอธิบายที่ดีกว่าของบันทึก

บันทึกนี้แสดงกิจกรรมใน "สำหรับพวกเรา" VirtualHost - ฉันจะมีกิจกรรมที่คาดว่าจะมีอยู่ใน "wa.net" โดเมนที่ฉันมีบันทึกที่คาดหวัง

162.253.66.76 - - [15/Aug/2014:19:20:47 -0600] "GET /xmlrpc.php HTTP/1.0" 404 1004 "-" "-"
162.253.66.74 - - [16/Aug/2014:10:50:28 -0600] "GET / HTTP/1.0" 200 262 "-" "masscan/1.0 (https://github.com/robertdavidgraham/masscan)"
185.4.227.194 - - [16/Aug/2014:11:16:45 -0600] "GET http://24x7-allrequestsallowed.com/?PHPSESSID=1rysxtj500143WQMVT%5E_NAZ%5BQ HTTP/1.1" 200 262 "-" "-"
101.226.254.138 - - [16/Aug/2014:13:32:14 -0600] "HEAD / HTTP/1.0" 200 - "-" "-"
162.253.66.74 - - [16/Aug/2014:14:26:19 -0600] "GET / HTTP/1.0" 200 262 "-" "masscan/1.0 (https://github.com/robertdavidgraham/masscan)"
212.129.2.119 - - [16/Aug/2014:16:00:51 -0600] "HEAD / HTTP/1.0" 200 - "-" "-"
91.240.163.111 - - [16/Aug/2014:18:34:32 -0600] "GET / HTTP/1.0" 200 262 "-" "masscan/1.0 (https://github.com/robertdavidgraham/masscan)"
162.253.66.74 - - [16/Aug/2014:19:02:53 -0600] "GET / HTTP/1.0" 200 262 "-" "masscan/1.0 (https://github.com/robertdavidgraham/masscan)"
122.226.223.69 - - [17/Aug/2014:05:53:09 -0600] "GET http://www.k2proxy.com//hello.html HTTP/1.1" 404 1006 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)"
::1 - - [17/Aug/2014:10:19:26 -0600] "OPTIONS * HTTP/1.0" 200 - "-" "Apache/2.4.6 (Linux/SUSE) OpenSSL/1.0.1e PHP/5.4.20 (internal dummy connection)"
162.209.65.196 - - [17/Aug/2014:15:31:53 -0600] "HEAD / HTTP/1.0" 200 - "-" "-"
111.206.199.163 - - [18/Aug/2014:11:12:56 -0600] "HEAD / HTTP/1.0" 200 - "-" "-"
37.187.180.168 - - [18/Aug/2014:15:40:00 -0600] "HEAD / HTTP/1.0" 200 - "-" "-"
62.210.38.226 - - [18/Aug/2014:18:35:16 -0600] "HEAD / HTTP/1.0" 200 - "-" "-"

มีสิ่งใดบ้างที่ฉันสามารถทำได้เพื่อปฏิเสธการเข้าถึงสาธารณะเป็นค่าเริ่มต้นอย่างน่าเชื่อถือ แต่อนุญาตเฉพาะใน VirtualHost เดียวเท่านั้นหรือไม่


1
จากล็อกไฟล์นั้นสิ่งที่แสดงให้เห็น VirtualHosts ที่ถูกเข้าถึง?
grawity

เท่าที่ฉันสามารถบอกได้ว่าบันทึกนั้นแสดงคำขอ GET สำหรับ / และรายการบางอย่างที่ไม่มีอยู่ (เช่นรหัสสถานะ 404) คุณเห็นอะไร
ernie

ขอโทษ - ฉันทำให้คำถามของฉันสับสนและทิ้งรายละเอียดที่สำคัญ มีสองโดเมนหลัก โดเมนย่อย "wa.net" หนึ่งในนั้นคือโดเมนที่ฉันได้ตั้งค่าให้สาธารณชนสามารถเข้าถึงได้ผ่านทางที่อยู่ IP ของฉัน ฉันยังมีโดเมนย่อย "for.us" ซึ่งเขียนไปยังบันทึกอื่น ฉันไม่เข้าใจว่าทำไมฉันจึงเห็นกิจกรรมสาธารณะในบันทึก "for.us" นี้เฉพาะเมื่อ "wa.net" VirtualHost เชื่อมโยงกับ IP สาธารณะ ฉันได้อัปเดตคำถามแล้ว
tmsimont

คำตอบ:


2

ทั้ง wa.net และ for.us แก้ไขเป็น IP เดียวกันดังนั้นเครือข่ายจึงไม่สามารถบอกได้ว่าโดเมน DNS ใดที่มีแพ็กเก็ต IP (และเซ็กเมนต์ TCP และ UDP datagram) ตัวอย่างเช่น HTTP ยกเลิกการรับส่งข้อมูลเครือข่ายที่ส่งไปยัง IP เดียวกันโดยตรวจสอบส่วนหัว HTTP Host: เพื่อดูโดเมนที่ต้องการของคำขอ (นั่นคือวิธีที่เว็บโฮสติ้งเสมือนทำงาน) แต่ชื่อไม่มีแนวคิด DNS แอดเดรสของดาต้าแกรมที่เข้ามา

ฉันขอแนะนำให้วาง wa.net และ for.us ในที่อยู่ IP ที่แตกต่างกันและกำหนดค่าที่อยู่ทั้งสองในส่วนต่อประสานทางกายภาพ สิ่งนี้ควรแยกทราฟฟิกที่ระดับ IP และซอฟต์แวร์การจำลองเสมือนสามารถส่งแพ็กเก็ตไปยังอินเตอร์เฟสเสมือนที่เหมาะสม


คุณหมายถึงใส่พวกเขาใน IP สาธารณะที่แตกต่างกันหรือไม่? หรือ IP ท้องถิ่นอื่น ๆ ฉันสมมติว่าฉันไม่สามารถทำมากกว่าหนึ่ง IP สาธารณะเนื่องจากนี่เป็นเพียงการติดตั้งที่บ้านซึ่งฉันมีเพียงหนึ่ง IP สาธารณะ ถูกต้องไหม
tmsimont

คุณควรใส่ IP ท้องถิ่นที่แตกต่างกัน ตรวจสอบให้แน่ใจว่าเซิร์ฟเวอร์โดเมนและเว็บเซิร์ฟเวอร์ทำงานได้กับ LAN ของคุณทำงานอย่างถูกต้องจากนั้นหากคุณต้องการให้เว็บเซิร์ฟเวอร์มองเห็นได้จากภายนอกคุณสามารถส่งต่อพอร์ต 80 จากเราเตอร์ของคุณไปยัง IP ท้องถิ่นของเว็บเซิร์ฟเวอร์
Fred

2

for.us เป็น VirtualHost ตัวแรกที่ทำให้เป็น "ค่าเริ่มต้น" VirtualHost ดังนั้นการยื่นคำร้องใด ๆ ที่ไม่มี Host ส่วนหัว (หรือไม่ตรงกับ VirtualHosts อื่น ๆ ) จะสิ้นสุดที่นั่น

HTTP/1.0 ไม่ต้องการ Host ส่วนหัวทำงานได้ดังนั้นมันจึงเป็นค่า VH เริ่มต้น


แก้ไข: หากเป็นการตั้งค่าโฮมโซลูชันที่เร็วที่สุดสำหรับกรณีนั้นกำลังย้ายโฮสต์เสมือน "สาธารณะ" ไปด้านบนดังนั้นค่าเริ่มต้นการเชื่อมต่อใด ๆ สำหรับไซต์นั้น

โปรดจำไว้ว่าสำหรับ NameVirtualHost คุณจะมี VirtualHost "ค่าเริ่มต้น" เสมอหากส่วนหัวของโฮสต์ไม่ปรากฏขึ้นหรือไม่ตรงกับชื่อ / นามแฝงใด ๆ ที่คุณกำหนดค่า (VirtualHost แรกที่กำหนดไว้สำหรับ IP นั้น)

นอกจากนี้ฉันจะกำหนดค่า ServerName คำสั่งให้เป็นค่าที่คุณกำหนดให้กับแต่ละ ServerAlias ​​และไม่ได้ใช้ ServerAlias ​​ในกรณีของคุณ ServerName มีวัตถุประสงค์เพื่อแยกความแตกต่างระหว่างที่ควรใช้ VirtualHost หากคุณตั้งค่า NameVirtualHost ดังนั้นการมีค่าเดียวกันใน ServerName ทั้งหมดจึงไม่ได้ผลดี ServerAlias ​​ใช้เพื่อทำเครื่องหมายชื่อเพิ่มเติม (ตัวอย่างเช่น ServerName hostname ServerAlias hostname.domain.com

โปรดทราบว่าหากเพื่อนร่วมงานของคุณแก้ไข /etc/hosts และเพิ่มรายการเช่น fmb.wa.net MY.IP.XXX.XX, postrecord.wa.net MY.IP.XXX.XXฯลฯ พวกเขาจะได้รับ ใด เว็บไซต์บนเว็บเซิร์ฟเวอร์ของคุณ คุณสามารถปิดกั้นด้วย Block, Allow และ Order คำสั่ง แต่รายการที่มีรหัสข้อผิดพลาด 403 จะยังคงปรากฏใน access_log ของคุณ


สุดท้ายเพื่อแก้ไขปัญหานี้อย่างถูกต้องและเนื่องจากมี IP ส่วนตัวมากมายให้คุณใช้ฉันจะทำสิ่งต่อไปนี้:

  • ก่อนอื่นให้มอบหมายหนึ่ง IP เพิ่มเติมให้กับ OpenSuse ของคุณ IP หลักปัจจุบันของคุณจะใช้สำหรับเซิร์ฟเวอร์ภายในของคุณและใหม่สำหรับเซิร์ฟเวอร์ภายในและสาธารณะ
    • ตั้งอยู่ /etc/sysconfig/network-scripts/ifcfg-eth*. ควรเป็นไฟล์เดียวเท่านั้นหากเซิร์ฟเวอร์ของคุณมีการ์ดเครือข่ายเดียว
    • แก้ไขและเพิ่มบรรทัดนี้ (ติดไว้เพื่อความสะดวกของคุณ):

.

IPADDR1='192.168.0.112'
NETMASK1='255.255.255.0'
LABEL1='0' 
  • รีสตาร์ทเครือข่าย: /etc/init.d/network restart
  • เปลี่ยนปัจจุบันของคุณ <VirtualHost *:80> สำหรับ <VirtualHost 192.168.0.111:80> ยกเว้นสำหรับคุณ VirtualHost สาธารณะซึ่งควรมีแทน <VirtualHost 192.168.0.112:80>
  • รีสตาร์ท apache
  • แก้ไขของคุณ named เพื่อชี้ชื่อ "สาธารณะ" ไปยัง IP ใหม่หากจำเป็น (สำหรับการใช้ภายในของคุณ)
  • เปลี่ยน NAT ที่คุณอาจมีที่เราเตอร์เพื่อชี้ไปที่ IP ใหม่

ด้วยการกำหนดค่านั้นจาก IP สาธารณะของคุณพวกเขาจะได้รับเนื้อหาจาก VirtualHost ด้วย IP 192.168.0.112 เท่านั้น


นั่นทำให้รู้สึกมาก ฉันมีโฮสต์เสมือนอื่น ๆ ที่ไม่ได้รับการเข้าชมสาธารณะ ฉันสงสัยว่าทำไม for.us จึงเป็นโดเมนเดียว (นอกเหนือจากโดเมนย่อย wa.net ที่เฉพาะเจาะจงซึ่งฉันต้องการได้รับการเข้าชมสาธารณะ)
tmsimont

ฉันหวังว่าฉันจะให้ 2 ตอบเครื่องหมายถูก
tmsimont

เพิ่มโซลูชันที่ชัดเจน
NuTTyX
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.