Làm cách nào tôi có thể chặn cổng 6379 cho lưu lượng truy cập bên ngoài trên Ubuntu?


8

Tôi muốn chặn truy cập vào cổng 6379 trên máy chủ của mình, nhưng tôi vẫn muốn kết nối với nó trong nội bộ. Ứng dụng redis-server chạy trên cổng đó và tôi chỉ muốn kết nối với nó cục bộ (127.0.0.1). Tôi có thể làm cái này như thế nào?

Câu trả lời:


11

Để làm điều này, bạn cần đảm bảo rằng các quy tắc IPTables của bạn được cấu hình đúng. Ubuntu thường để máy chủ của họ mở rộng theo mặc định, đó là lý do tại sao tôi vẫn không khuyến nghị họ sử dụng làm máy chủ trừ khi bạn nhận thức rõ về cách thực hiện việc này đúng cách.

Tôi tưởng tượng rằng bạn iptables -L -nvtrông giống như thế này, phải không?

# iptables -L -nv
Chain INPUT (policy ACCEPT 4M packets, 9M bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 8M packets, 4M bytes)
 pkts bytes target     prot opt in     out     source               destination

Nó trống rỗng và nó rộng mở. Ubuntu IPTables HowTo có thể sẽ giúp ích khá nhiều cho việc này. ( https://help.ubfox.com/community/IptablesHowTo )

Tôi khuyên bạn nên một cái gì đó như thế này, cho phép SSH trên bất kỳ giao diện nào và tcp 6379 bất kỳ giao diện nào nhưng giao diện bạn không muốn:

*filter
:INPUT DROP [92:16679]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [203:36556]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -p tcp -m tcp --dport 6379 -j ACCEPT
-A INPUT -i lo -p udp -m udp --dport 6379 -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i lo -j ACCEPT
COMMIT

Sau đó, bạn sẽ lưu tệp này trong /etc/iptables.rules.

Rõ ràng, bất kỳ cổng nào khác mà bạn đặc biệt muốn mở nên được thêm vào.

Lưu ý: Tôi đã thêm 6379 dòng cụ thể cho rõ ràng. CHẤP NHẬN dưới cùng ngay trước khi CAM KẾT thực sự cho phép điều này bởi vì tất cả các kết nối loopback phải được cho phép trên hệ thống Linux để hoạt động đúng.

Bạn cũng sẽ muốn đặt các quy tắc trong tệp / etc / mạng / giao diện của mình, để đảm bảo rằng chúng được thêm vào khi giao diện xuất hiện và không muộn hơn trong quá trình khởi động. Thêm một cái gì đó như thế này được khuyến khích:

auto eth0
iface eth0 inet dhcp
  pre-up iptables-restore < /etc/iptables.rules

Chỉnh sửa: Để tải cấu hình này ban đầu, bạn cần chạy lệnh iptables-restore được tham chiếu ở trên:

iptables-restore < /etc/iptables.rules

Tôi giả sử điều này sẽ mở cổng 6379 cho toàn bộ web phải không? Tôi nên làm gì để mở cái này chỉ cho 127.0.0.1?
Steve Coleue

Không, bởi vì quy tắc mặc định là DROP. Nếu nó không có quy tắc ACCEPT rõ ràng, nó sẽ bị chặn bởi DROP mặc định bên cạnh: INPUT ở trên cùng.
Magellan

Cá nhân, tôi nghĩ rằng quy tắc ACCEPT mặc định chỉ là tội phạm trong triển khai "máy chủ". Nhưng không có gì đáng ngạc nhiên vì Ubuntu trước hết là một bản phân phối máy tính để bàn.
Magellan

Ok, tôi chỉ làm đúng những gì bạn yêu cầu, nhưng có vẻ như tôi vẫn có thể kết nối với cổng 6379 từ bên ngoài. Tôi nên khởi động lại máy chủ hay cái gì đó?
Steve Coleue

1
Có, nhưng tôi không thực sự quan tâm nhiều đến quầy và điều này hiệu quả với tôi. Hãy thoải mái chỉnh sửa câu trả lời để phù hợp với quy trình nghiêm ngặt hơn.
Magellan

3

Chà, tôi sẽ đề nghị sử dụng "tường lửa không phức tạp" (ufw), cũng được khuyến nghị bởi canonical. Đọc và viết iptables quá phức tạp đối với các tác vụ khóa cổng thỉnh thoảng.

Xem tại đây: https://wiki.ubfox.com/UncomplicatedFirewall


1
Các phiên bản cũ hơn của UFW không có khả năng áp dụng quy tắc cho các cổng được chọn, tất cả hoặc không có gì. Và các sysadins chuyên nghiệp nên có thói quen hiểu các cài đặt iptables của họ làm gì và các chuỗi hoạt động như thế nào.
Magellan

2

Cái gì đó như

iptables -A INPUT -s 0.0.0.0  -i eth0 --protocol tcp --dport 6379 -j DROP

Nên làm việc.


Điều này mang lại cho tôi lỗi này: iptables v1.4.4: tùy chọn không xác định `--dport '
Steve Coleue

Bạn có thể thử lại với lệnh mới không? Tôi đã thêm phần --protatio và -i (thích ứng với giao diện của bạn), giờ nó sẽ hoạt động.
Kedare

Vấn đề tôi gặp phải với đề xuất này là nó không lưu trong quá trình khởi động lại trừ khi các lệnh bắt buộc khác được chạy và nó giả định rằng chỉ có 1 giao diện không lặp lại.
Magellan

Tôi khuyên bạn nên sử dụng toán tử phủ định: -i! lo
Magellan

Adrian: bạn có nghĩa là nếu tôi khởi động lại máy chủ, sửa đổi đó sẽ không còn hoạt động?
Steve Coleue

0

Đối với các phiên bản mới hơn của redis bạn có thể sử dụng bind 127.0.0.1trong redis.confđể làm điều này trực tiếp không cần thông qua cấu hình iptables

thấy này bài viết

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.