Score:2

Reverse Proxy สำหรับกล้อง IP

ธง it

ฉันใช้กล้อง Amcrest ซึ่งต้องการการรับรองความถูกต้องขั้นพื้นฐานในการแสดงสตรีม (เอกสาร - หน้า 17). กล้องสามารถเข้าถึงได้ผ่าน http://admin:password@IP_CAMERA/cgi-bin/mjpg/video.cgi .

เมื่อได้ลองตี :56700ฉันได้รับแจ้งให้ตรวจสอบสิทธิ์แม้ว่าจะเป็นแบบฮาร์ดโค้ดก็ตาม (ด้านล่าง) แม้ว่าฉันจะป้อนข้อมูลประจำตัวที่ถูกต้อง มันก็ล้มเหลว ผมทำอะไรผิดหรือเปล่า?

    เซิร์ฟเวอร์ {
        ฟัง 56700;
        ที่ตั้ง / {
            proxy_set_header โฮสต์ $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-ส่งต่อ-สำหรับ $proxy_add_x_forwarded_for;
            proxy_pass http://IP_CAMERA/cgi-bin/mjpg/video.cgi;
            proxy_set_header การอนุญาต "xxx พื้นฐาน";
        }
    }

ฉันได้ลองเพิ่ม การอนุญาต proxy_pass_header; ตามที่อธิบายไว้ ที่นี่.

CrazyTux avatar
in flag
ฉันคิดว่าคุณได้ผสมไวยากรณ์ `rtsp` กับไวยากรณ์ `http` แล้ว ลอง `http:///cgi-bin/realmonitor.cgi?action=getStream&channel=&ประเภทย่อย=` สำหรับ `http` จากนั้นรับรองความถูกต้องด้วยชื่อผู้ใช้และรหัสผ่าน หรือใช้ `rtsp` กับ `VLC` ด้วยไวยากรณ์นี้ `rtsp://:@:/cam/realmonitor?channel=&ประเภทย่อย=`
Kermit avatar
it flag
@CrazyTux ฉันสามารถกด URL ด้านบนในเบราว์เซอร์ของฉันได้โดยไม่มีปัญหา
Score:2
ธง us

อย่างที่กล่าวไว้ข้างต้นสามารถแก้ไขได้โดย

proxy_set_header การอนุญาต "พื้นฐาน dXNlcjpwYXNzd29yZA==";

ที่ไหน dXNlcjpwYXNzd29yZA== เป็นผลมาจากคำสั่ง: echo -n "ผู้ใช้:รหัสผ่าน" | ฐาน 64

ฉันเดาว่าคุณลองแล้ว

อย่างไรก็ตาม ฉันเชื่อว่าตำแหน่งที่ถูกต้องจะมีลักษณะดังนี้

ที่ตั้ง / {
    proxy_set_header โฮสต์ $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-ส่งต่อ-สำหรับ $proxy_add_x_forwarded_for;
    proxy_pass http://IP_CAMERA;
    proxy_set_header การอนุญาต "พื้นฐาน dXNlcjpwYXNzd29yZA==";
    การอนุญาต proxy_set_header "พื้นฐาน $http_authorization"; # สำหรับโหมดโต้ตอบ
}

ปราศจาก /cgi-bin/mjpg/video.cgi เพราะมันจะผ่านไปที่ฝั่ง browser หรือ http client

หรือ หากไม่ได้ผล อาจเกี่ยวข้องกับกรณีนี้ https://stackoverflow.com/questions/14839712/nginx-reverse-proxy-passthrough-basic-authenication

หากกล้องมีการตรวจสอบขอบเขต คุณสามารถทราบขอบเขตที่คาดหวังผ่านเครื่องมือสำหรับนักพัฒนาที่แท็บส่วนหัว - ส่วนหัวการตอบสนอง

แต่คุณจะต้องคอมไพล์ nginx ด้วย ส่วนหัวเพิ่มเติม nginx โมดูล

คุณสามารถทำได้ด้วยสคริปต์นี้

ซีดี /usr/src
NGINXFILE=$(wget -qO- http://nginx.org/en/download.html | tr ' ' '\n' | egrep -o 'nginx.+?tar.gz' | หัว -1)
wget http://nginx.org/download/${NGINXFILE}
tar zxvf ${NGINXFILE}
ซีดี ${NGINXFILE%.*.*}

cp -r /etc/nginx /root/nginx_$(date +%F) #สำรองการกำหนดค่า nginx ปัจจุบัน

ซีดี /usr/src
คอมไพล์โคลน https://github.com/openresty/headers-more-nginx-module.git

./configure --add-module=/usr/src/headers-more-nginx-module --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/ lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/ nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/ nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/ var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with -threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --ด้วย -http_secure_link_module --กับ-http_slice_module --กับ-http_ssl_module --กับ-http_s tub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt=' -O2 -g -pipe -Wall -Wp, -D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' - -with-ld-opt='-Wl,-z,relro -Wl,-z,ตอนนี้ -พาย'
ทำ
ทำการติดตั้ง

เมื่อเสร็จแล้วคุณสามารถลองกำหนดค่าดังกล่าว:

ที่ตั้ง / {
  proxy_http_version 1.1;
  เปิด proxy_pass_request_headers;
  proxy_set_header โฮสต์ $host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-ส่งต่อ-สำหรับ $proxy_add_x_forwarded_for;

  more_set_input_headers 'การอนุญาต: พื้นฐาน dXNlcjpwYXNzd29yZA=='; 
  #more_set_input_headers 'การอนุญาต: $http_authorization'; # สำหรับโหมดโต้ตอบ
  proxy_set_header ยอมรับการเข้ารหัส "";

  proxy_pass http://IP_CAMERA;
  proxy_redirect เริ่มต้น;
  more_set_headers -s 401 'www-authenticate: Basic realm="Authentication Required"';
}

ที่ไหน www-authenticate: Basic realm="ต้องมีการตรวจสอบสิทธิ์" ข้อมูลที่แท้จริงของส่วนหัวนี้

ฉันตรวจสอบทั้งสองกรณีแล้ว มันใช้งานได้สำหรับฉัน ฉันทดสอบกับแอปพลิเคชันขวดแก้วแบบกำหนดเอง น่าเสียดายที่ฉันไม่มีกล้องดังกล่าวสำหรับการแก้ไขจุดบกพร่องส่วนบุคคล

Score:1
ธง cl

แก้ไขด้วยโซลูชันเฉพาะของ Amcrest

เมื่อถึงจุดหนึ่ง (ประมาณปี 2560?) แอมเครสต์ ออกอัพเดตเฟิร์มแวร์ว่า ลบการรับรองความถูกต้องพื้นฐาน จากกล้อง IP ของตน โดยปล่อยให้ Digest Authentication เป็นตัวเลือกเดียว

คำตอบ Stack Overflow นี้ อาจเป็นตัวเลือกที่ดีที่สุดของคุณสำหรับการแยก Digest Authentication ออกตามที่คุณต้องการโดยใช้ FastCGI และ nginx

หรือบางทีคุณอาจหาวิธีดาวน์เกรดเฟิร์มแวร์ในกล้องของคุณเพื่อรองรับการรับรองความถูกต้องพื้นฐานอีกครั้ง


คำตอบก่อนหน้า

คุณกำลังเข้ารหัส Base64 ชื่อผู้ใช้และรหัสผ่านโดยมีโคลอนคั่นกลางหรือไม่

สำหรับ การรับรองความถูกต้องพื้นฐาน HTTPคุณจะต้องดำเนินการดังต่อไปนี้:

proxy_set_header การอนุญาต "xxx พื้นฐาน";

แทนที่ xxx กับ Base64(<ชื่อผู้ใช้>:<รหัสผ่าน>). นั่นคือ หาตัวเข้ารหัส Base-64 ป้อนชื่อผู้ใช้ เครื่องหมายทวิภาคตามตัวอักษร (:) อักขระ และรหัสผ่าน และแทนที่ xxx ด้วยสตริงผลลัพธ์

ตัวอย่างเช่น หากชื่อผู้ใช้คือ ผู้ดูแลระบบและรหัสผ่านคือ ฮันเตอร์2เราสามารถเรียกใช้สิ่งต่อไปนี้ที่พรอมต์ Bash:

printf %s 'ผู้ดูแลระบบ:hunter2' | ฐาน 64

และใส่สตริงผลลัพธ์ในส่วนหัวดังนี้:

การอนุญาต proxy_set_header "พื้นฐาน YWRtaW46aHVudGVyMg==";

Kermit avatar
it flag
ชื่อผู้ใช้และรหัสผ่านถูกเข้ารหัส Base64 ด้วย `:` ใช่
Score:0
ธง ne

ยิงในที่มืด

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

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา