เปิดพอร์ต Redis สำหรับการเชื่อมต่อระยะไกล


119

ฉันสามารถ ping pong Redis บนเซิร์ฟเวอร์:

# redis-cli ping
PONG

แต่จากระยะไกลฉันมีปัญหา:

$ src/redis-cli -h REMOTE.IP ping
Could not connect to Redis at REMOTE.IP:6379: Connection refused

ใน config ฉันมีพอร์ตมาตรฐาน:

# Accept connections on the specified port, default is 6379.
# If port 0 is specified Redis will not listen on a TCP socket.
port 6379

ดังนั้นฉันควรเปิดพอร์ต 6379 บนเครื่อง Ubuntu ระยะไกลหรือไม่ ฉันต้องทำอย่างไร?


redis ไม่ได้ฟังบนเครื่องระยะไกล?
Sergio Tulentsev

อาจจะตรวจสอบได้อย่างไร
Maxim Yefremov

คุณได้ปิดการใช้งาน ufw หรือไม่?
ประทับตรา

คำตอบ:


214

คุณตั้งค่าตัวเลือกการผูกเพื่ออนุญาตการเข้าถึงระยะไกลบนเซิร์ฟเวอร์ Redis หรือไม่?

ก่อนหน้า (ไฟล์/etc/redis/redis.conf)

bind 127.0.0.1

หลังจาก

bind 0.0.0.0

และรันsudo service redis-server restartเพื่อรีสตาร์ทเซิร์ฟเวอร์ หากไม่ใช่ปัญหาคุณอาจต้องการตรวจสอบไฟร์วอลล์ที่อาจบล็อกการเข้าถึง

สำคัญ:หากคุณไม่ได้ใช้ไฟร์วอลล์ (iptables, ufw .. ) เพื่อควบคุมว่าใครเชื่อมต่อกับพอร์ตที่ใช้งานอยู่ทุกคนสามารถเชื่อมต่อกับอินสแตนซ์ Redis นี้ได้ โดยไม่ต้องใช้RedisAUTHนั่นหมายความว่าทุกคนสามารถเข้าถึง / เปลี่ยนแปลง / ลบข้อมูลของคุณได้ ปลอดภัย!


2
ในไฟล์ config ฉันเพิ่มสตริงหลังจากสตริงbind 0.0.0.0 bind 127.0.0.1รีสตาร์ท redis และตอนนี้สามารถเชื่อมต่อจากระยะไกลได้แล้ว
Maxim Yefremov

มีความแตกต่างหรือไม่ถ้าเราใช้bind 0.0.0.0คนเดียวกับbind 127.0.0.1 0.0.0.0
Nyxynyx

1
@Nyxynyx 0.0.0.0 ผูกกับอะแดปเตอร์ทั้งหมดดังนั้นจึงไม่จำเป็น ไม่ควรสร้างความแตกต่างแม้ว่า
MildlySerious

1
ปลอดภัยไหมที่จะเปิด redis กับสาย ip ใด ๆ เราจะ จำกัด การเข้าถึง redis จากบาง IP ได้อย่างไร?
brsbilgic

1
@MildlySerious ขอบคุณมาก. เราเสียเวลาเกือบ 2 สัปดาห์ในการค้นหาว่าไฟร์วอลล์หรือเครือข่ายหรือปัญหาอื่น ๆ แต่การเปลี่ยนแปลงนี้ได้ผลเหมือนแชมป์
kinnu

23

สำหรับฉันฉันต้องทำสิ่งต่อไปนี้:

1- แสดงความคิดเห็น bind 127.0.0.1

2- เปลี่ยนprotected-modeเป็นno

3- ปกป้องเซิร์ฟเวอร์ของฉันด้วยiptables( https://www.digitalocean.com/community/tutorials/how-to-implement-a-basic-firewall-template-with-iptables-on-ubuntu-14-04 )


1
ฉันต้องใช้การผูก 0.0.0.0 "ผูก 127.0.0.1" ไม่ได้ผลสำหรับฉัน ฉันไม่จำเป็นต้องตั้งค่า "โหมดป้องกัน" เป็น "ไม่" คำเตือน: อย่าปล่อยให้มีพื้นที่ว่างก่อนที่ "ผูก" มิฉะนั้นเซิร์ฟเวอร์จะไม่เริ่มทำงาน หมายเหตุ: ฉันใช้พอร์ต windows ของ Redis
Josh

7

โปรดทราบว่าการทำเช่นนี้โดยไม่รักษาความปลอดภัยเซิร์ฟเวอร์ Redis ของคุณอีกต่อไปไม่ใช่ความคิดที่ดีเพราะอาจทำให้คุณเปิดรับการโจมตีได้ อย่าลืมใช้ AUTH ด้วยหรืออย่างอื่นให้ปลอดภัย ดูรายละเอียดที่http://redis.io/topics/security


3

1- แสดงความคิดเห็นผูก 127.0.0.1

2- ตั้งค่าต้องใช้รหัสผ่านของคุณ

จากนั้นตรวจสอบว่าไฟร์วอลล์บล็อกพอร์ตของคุณหรือไม่

iptables -L -n

iptables บริการหยุด


3
  1. เปิด $ REDIS_HOME / redis.conf และยกเลิกการแสดงความคิดเห็นrequirepass -YOUR-PASSWORD-HERE-และจดรหัสผ่านของคุณในบรรทัดที่ระบุ

  2. เข้าสู่ระบบ redis โดยใช้ redis-cli และตรวจสอบรหัสผ่านของคุณในฐานข้อมูลโดยใช้auth -YOUR-PASSWORD-HERE-คำสั่ง

  3. ปิดการใช้งานโหมดการป้องกันโดยการเปลี่ยนสตริงใน $ REDIS_HOME / redis.conf protected-mode noไป

  4. ค้นหาค่าพอร์ตการผูกทั้งหมดและแสดงความคิดเห็นทั้งหมด เพียงเพิ่มลงbind 0.0.0.0ในไฟล์ $ REDIS_HOME / redis.conf

  5. ปิดไฟร์วอลล์ของคุณหรือเปิดพอร์ต redis

  6. เริ่ม redis โดยใช้./redis-server $REDIS_HOME/redis.conf.

  7. ตรวจสอบการกำหนดค่าผ่าน./redis-cli -h -YOUR-IP- -a -YOUR-PASSWORD-HERE-.

  8. ตรวจสอบการกำหนดค่าผ่าน./redis-cli -h -YOUR-IP- ping.

9
โปรดอย่าให้คำแนะนำ "ปิดการใช้งานไฟร์วอลล์ของคุณ"
Samantha Atkins

3
  1. เปิดไฟล์ที่ตำแหน่ง /etc/redis.conf

  2. แสดงความคิดเห็น bind 127.0.0.1

  3. รีสตาร์ท Redis:

     sudo systemctl start redis.service
    
  4. ปิดการใช้งาน Firewalld:

     systemctl disable firewalld
    
  5. หยุด Firewalld:

     systemctl stop firewalld
    

จากนั้นลอง:

redis-cli -h 192.168.0.2(ip) -a redis(username)

1

โปรดทราบโดยย่อว่าหากคุณใช้อินสแตนซ์ AWS ec2 มีอีกหนึ่งขั้นตอนพิเศษที่ฉันเชื่อว่าจำเป็นเช่นกัน ฉันพลาดขั้นตอนที่ 3 และต้องใช้เวลาทั้งวันเพื่อเพิ่มกฎขาเข้าในกลุ่มความปลอดภัย

ขั้นตอนที่ 1 (ก่อนหน้านี้): ใน redis.conf ของคุณเปลี่ยนการผูก 127.0.0.1 เป็นผูก 0.0.0.0

ขั้นตอนที่ 2 (ตามที่แล้ว): ใน redis.conf ของคุณเปลี่ยนโหมดป้องกันใช่เป็นโหมดป้องกัน

สิ่งสำคัญสำหรับอินสแตนซ์ Amazon Ec2:

ขั้นตอนที่ 3: ในเครื่อง ec2 ปัจจุบันของคุณไปที่กลุ่มความปลอดภัย เพิ่มกฎขาเข้าสำหรับ TCP ที่กำหนดเองด้วยพอร์ต 6379 และเลือกตัวเลือก "ใช้จากที่ใดก็ได้"


1

ในกรณีของฉันฉันใช้ redis-stable

Go to redis-stable path 
 cd /home/ubuntu/software/redis-stable

เปิด redis.conf

vim redis.conf

เปลี่ยนbind 127.0.0.1ไปbind 0.0.0.0

เปลี่ยนprotected-mode yesไป protected-mode no

รีสตาร์ทเซิร์ฟเวอร์ redis:

/etc/init.d/redis-server stop
 redis-server redis.conf

0

โหมดผูกและป้องกันทั้งสองเป็นขั้นตอนสำคัญ แต่ถ้าเปิดใช้งานufwคุณจะต้องทำให้พอร์ต redis อนุญาตใน ufw

  1. ตรวจสอบสถานะufwufw statusหากStatus: activeอนุญาตให้ใช้พอร์ต redisufw allow 6379
  2. vi /etc/redis/redis.conf
  3. เปลี่ยนbind 127.0.0.1ไปbind 0.0.0.0
  4. เปลี่ยนprotected-mode yesไปprotected-mode no
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.