Đặt một số cổng tường lửa để chỉ chấp nhận kết nối mạng cục bộ?


18

Làm cách nào để thiết lập tường lửa trên hệ thống trong mạng LAN để một số cổng chỉ mở cho các kết nối từ mạng cục bộ chứ không phải từ thế giới bên ngoài?

Ví dụ: tôi có một hộp chạy Khoa học Linux 6.1 (bản phân phối dựa trên RHEL) và tôi muốn máy chủ SSH của nó chỉ chấp nhận các kết nối từ localhost hoặc LAN. Làm thế nào để tôi làm điều này?

Câu trả lời:


24

Với iptables của kernel hoàn toàn trống ( iptables -F), điều này sẽ làm những gì bạn yêu cầu:

# iptables -A INPUT -p tcp --dport 22 -s 192.168.0.0/24 -j ACCEPT
# iptables -A INPUT -p tcp --dport 22 -s 127.0.0.0/8 -j ACCEPT
# iptables -A INPUT -p tcp --dport 22 -j DROP

Điều này nói rằng tất cả các địa chỉ LAN được phép nói chuyện với cổng TCP 22, rằng localhost có cùng sự cân nhắc (có, 127. * không chỉ 127.0.0.1) và các gói từ mọi địa chỉ khác không khớp với hai quy tắc đầu tiên đó bị bỏ rơi một cách bất thường các chút xô . Bạn có thể sử dụng REJECTthay vì DROPnếu bạn muốn từ chối hoạt động (TCP RST) thay vì biến cổng TCP 22 thành lỗ đen cho các gói.

Nếu mạng LAN của bạn không sử dụng khối 192.168.0. *, Tự nhiên bạn sẽ cần thay đổi IP và mặt nạ trên dòng đầu tiên để khớp với sơ đồ IP của mạng LAN.

Các lệnh này có thể không làm những gì bạn muốn nếu tường lửa của bạn đã có một số quy tắc được cấu hình. (Nói iptables -Llà root để tìm hiểu.) Điều thường xuyên xảy ra là một trong những quy tắc hiện có lấy các gói bạn đang cố lọc, do đó việc thêm các quy tắc mới không có hiệu lực. Trong khi bạn có thể sử dụng -Ithay vì -Avới các iptableslệnh để ghép quy định mới vào giữa một chuỗi thay vì phụ họ, nó thường là tốt hơn để tìm hiểu cách thức các chuỗi được dân cư khi khởi động hệ thống và sửa đổi quá trình đó nên quy định mới của bạn luôn luôn được cài đặt trong thứ tự đúng.

7+

Trên các hệ thống loại gần đây của RHEL, cách tốt nhất để làm điều đó là sử dụng firewall-cmdhoặc tương đương GUI của nó. Điều này cho firewallddaemon của hệ điều hành những gì bạn muốn, đó là những gì thực sự cư trú và thao túng những gì bạn nhìn thấy thông qua iptables -L.

RHEL 6 và trước đó

Trên các hệ thống loại cũ của RHEL, cách dễ nhất để sửa đổi chuỗi tường lửa khi đặt hàng là vấn đề cần chỉnh sửa /etc/sysconfig/iptables. Các công cụ tường lửa GUI và TUI của HĐH khá đơn giản, vì vậy một khi bạn bắt đầu thêm các quy tắc phức tạp hơn như thế này, tốt hơn là quay lại các tệp cấu hình cũ tốt. Coi chừng, một khi bạn bắt đầu thực hiện việc này, bạn có nguy cơ mất các thay đổi nếu bạn từng sử dụng các công cụ tường lửa của HĐH để sửa đổi cấu hình, vì nó có thể không biết cách xử lý các quy tắc thủ công như thế này.

Thêm một cái gì đó như thế này vào tập tin đó:

-A RH-Firewall-1-INPUT -p tcp --dport 22 -s 192.168.0.0/24 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp --dport 22 -s 127.0.0.0/8 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp --dport 22 -j DROP

Nơi bạn thêm nó là một chút khó khăn. Nếu bạn tìm thấy một dòng trong tập tin đó nói về --dport 22, chỉ đơn giản là thay thế nó với ba dòng trên. Mặt khác, nó có lẽ nên đi trước dòng hiện tại đầu tiên kết thúc bằng -j ACCEPT. Nói chung, bạn sẽ cần có được sự quen thuộc với cách thức hoạt động của iptables , tại thời điểm đó, điểm chèn chính xác sẽ rõ ràng.

Lưu tệp đó, sau đó nói service iptables restartđể tải lại các quy tắc tường lửa. Hãy chắc chắn để làm điều này trong khi đăng nhập vào bảng điều khiển, trong trường hợp bạn mập ngón tay chỉnh sửa! Bạn không muốn tự khóa máy của mình khi đăng nhập qua SSH.

Sự tương đồng với các lệnh trên không phải là ngẫu nhiên. Hầu hết các tập tin này bao gồm các đối số cho iptableslệnh. Sự khác biệt liên quan đến ở trên là iptableslệnh bị loại bỏ và INPUTtên chuỗi trở thành chuỗi đặc biệt dành riêng cho RHEL RH-Firewall-1-INPUT. (Nếu bạn quan tâm đến việc kiểm tra tệp chi tiết hơn, bạn sẽ thấy sớm hơn trong tệp mà về cơ bản họ đã đổi tên INPUTchuỗi. Tại sao? Không thể nói.)


4

Công cụ cấp thấp để thiết lập tường lửa trong Linux là iptables . Ngoài ra còn có các công cụ cấp cao hơn có sẵn. Tôi không biết Khoa học Linux có công cụ tường lửa được đề xuất không.

Theo trang web này (tôi chưa xác minh rằng nó áp dụng cho 6.1), service iptables savesẽ lưu các quy tắc tường lửa hiện tại và các quy tắc đã lưu này được tải khi khởi động. Vì vậy, bạn cần thiết lập các quy tắc bạn muốn thông qua iptablescác lệnh (hoặc bất kỳ phương tiện nào khác), sau đó chạy service iptables saveđể thiết lập liên tục.

Bài đăng trên blog của Scott Pack là một khởi đầu cho việc bỏ các gói lẻ lẻ lẻ mà không cần thiết và có nguy cơ cao là một phần của cuộc tấn công. Ngoài ra, bạn sẽ muốn đóng tất cả các cổng đến và chỉ mở những cổng bạn cần. Một cái gì đó như thế này:

# Accept everything on the loopback interface
iptables -A INPUT -i lo -j ACCEPT
# Accept ICMP
iptables -A INPUT -p icmp --icmp-type any -j ACCEPT
# Drop oddball packets
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
iptables -A INPUT -f -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
# Accept packets that are part of established connections
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Accept selected incoming connections, e.g. ssh from 10.0.42.x
iptables -A INPUT -p tcp --dport 22 -s 10.0.42.0/24 -j ACCEPT
# Reject incoming connections that aren't explicitly accepted
iptables -A INPUT -j REJECT

1
Gilles, bạn đã đọc sai câu hỏi một chút? Tôi hiểu rằng hộp Khoa học Linux là một trong những máy tính trên mạng LAN, nhưng không phải là tường lửa.
rozcietrzewiacz

@Gilles Có, hộp là một trong những máy tính trong mạng LAN.
hpy

@rozcietrzewiacz Tôi hiểu rằng tường lửa nằm trên cùng một máy với máy chủ. Tôi đồng ý rằng câu hỏi này không rõ ràng ở một mức độ nào đó, nhưng vì penyuan chỉ đề cập đến hệ điều hành của một máy, tôi cho rằng mọi thứ đang diễn ra trên máy đó. Nếu không, đây sẽ không phải là một câu hỏi unix, đây sẽ là một câu hỏi quản trị mạng chưa được xác định rõ.
Gilles 'SO- ngừng trở nên xấu xa'

1

Cách ưa thích để làm điều đó là với iptables. Dường như điều đó được bảo vệ đầy đủ bởi những người khác, vì vậy, để hoàn thiện, tôi sẽ chỉ ra một phương pháp kiểm soát truy cập thay thế có sẵn cho nhiều trình nền trên hầu hết các bản phân phối Linux. Phương pháp kiểm soát truy cập đó được cung cấp bởi libwrapthư viện.

Để kiểm tra xem trình nền yêu thích của bạn có libwraphỗ trợ hay không, hãy thử chạy như sau:

ldd `which sshd` | grep libwrap

Nếu bạn nhận được một kết quả không trống, chẳng hạn như

libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f84e7b0e000)

sau đó bạn chắc chắn là tốt để đi.

Gần như chắc chắn rằng sshdtrình nền của bạn có libwraphỗ trợ, và vì vậy nó nên tham khảo các tệp /etc/hosts.allow/etc/hosts.denykiểm soát truy cập. Giả sử mạng LAN cục bộ của bạn là 192.168.100.0/24, bạn có thể từ chối quyền truy cập vào sshdtất cả các máy khách ngoại trừ những máy khách trên máy chủ cục bộ hoặc trên mạng LAN cục bộ bằng cách đưa thông tin sau vào /etc/hosts.denytệp của bạn :

sshd: ALL EXCEPT 127.0.0.0/255.0.0.0, [::1]/128, 192.168.100.0/255.255.255.0

Lưu ý rằng phương pháp này này không thực sự mở hoặc đóng cổng, mỗi lần. Nó chỉ đơn giản cho daemon sử dụng phương pháp kiểm soát truy cập này để chấp nhận hoặc từ chối các nỗ lực kết nối từ các máy khách phù hợp với (các) mẫu đã cho.

Để biết chi tiết đầy đủ, hãy kiểm tra các trang man, bắt đầu với hosts_access(5).


1

Nếu bạn có tường lửa dựa trên linux của riêng mình, bạn sẽ thiết lập tốt nhất iptables, như những người khác mô tả ở đây. Nếu không và tường lửa là bộ định tuyến của bạn, thì rất có thể cấu hình mặc định đã ngăn truy cập từ bên ngoài, trừ khi bạn kích hoạt rõ ràng chuyển tiếp cổng (như tôi đã mô tả gần đây trong câu trả lời cho câu hỏi này ).

Để bảo mật hơn ở trên, bạn có thể sử dụng một mạng con riêng cho các kết nối trong mạng LAN. Để làm như vậy, đối với mỗi máy tính, hãy thêm một địa chỉ IP thứ hai chỉ được sử dụng trong mạng LAN chứ không phải bởi bộ định tuyến. Giả sử toàn bộ mạng LAN hiện đang sử dụng 192.168.0.xxxđịa chỉ và bộ định tuyến (cổng, tường lửa) 192.168.0.1. Vì vậy, thêm địa chỉ thứ hai cho mỗi máy tính - ví dụ:

ifconfig eth0:0 192.168.5.1/24

Tiếp theo, chỉnh sửa sshdcấu hình để chỉ sử dụng địa chỉ này (để nó không cho phép kết nối bật 192.168.0.xxx) - chỉnh sửa /etc/ssh/sshd_configvà sửa đổi ListenAddressthành một trong các mạng con mới của bạn ( 192.168.5.1trong ví dụ trên). Đó là nó! Nếu bạn không định cấu hình cổng để định tuyến truyền thông của mạng con đó, thì nó nên được tách ra khỏi bên ngoài.

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.