Bảo mật máy chủ linux: iptables vs fail2ban


10

Tôi muốn chọn bộ não của cộng đồng về bảo mật máy chủ linux, đặc biệt là về các cuộc tấn công vũ phu và sử dụng fail2ban so với iptables tùy chỉnh .

Có một vài câu hỏi tương tự ngoài kia nhưng không ai trong số chúng giải quyết chủ đề cho sự hài lòng của tôi. Nói tóm lại, tôi đang cố gắng xác định giải pháp tốt nhất để bảo mật các máy chủ linux tiếp xúc với internet (chạy các dịch vụ thông thường, ssh, web, mail), khỏi các cuộc tấn công vũ phu.

Tôi có một xử lý tốt về bảo mật máy chủ, tức là khóa ssh bằng cách không cho phép đăng nhập root hoặc mật khẩu, thay đổi cổng mặc định, đảm bảo phần mềm được cập nhật, kiểm tra tệp nhật ký, chỉ cho phép một số máy chủ nhất định truy cập máy chủ và sử dụng bảo mật các công cụ kiểm toán như Lynis ( https://cisofy.com/lynis/ ), để tuân thủ bảo mật chung, vì vậy câu hỏi này không nhất thiết liên quan đến điều đó mặc dù đầu vào và lời khuyên luôn được hoan nghênh .

Câu hỏi của tôi là tôi nên sử dụng giải pháp nào (fail2ban hoặc iptables) và tôi nên cấu hình nó như thế nào, hay tôi nên sử dụng kết hợp cả hai để bảo vệ chống lại các cuộc tấn công vũ phu?

Có một câu trả lời thú vị liên quan đến chủ đề ( Denyhosts vs fail2ban vs iptables- cách tốt nhất để ngăn chặn đăng nhập vũ phu? ). Câu trả lời thú vị nhất đối với cá nhân tôi là ( https://serverfault.com/a/128964 ) và việc định tuyến iptables xảy ra trong kernel trái ngược với fail2ban, sử dụng các công cụ chế độ người dùng để phân tích các tệp nhật ký. Fail2ban sử dụng iptables tất nhiên, nhưng nó vẫn phải phân tích các tệp nhật ký và khớp với một mẫu cho đến khi nó thực hiện một hành động.

Việc sử dụng iptables và sử dụng giới hạn tỷ lệ có hợp lý không ( https://www.rackaid.com/blog/how-to-block-ssh-brute-force-attacks/ ) để bỏ yêu cầu từ IP trong một khoảng thời gian thời gian thực hiện quá nhiều lần thử kết nối trong một khoảng thời gian cụ thể bất kể giao thức đó đang cố kết nối với giao thức nào? Nếu vậy, có một số suy nghĩ thú vị về việc sử dụng drop vs từ chối cho các gói đó ở đây ( http://www.chiark.greenend.org.uk/~peterb/network/drop-vs-reject ), bạn có suy nghĩ gì về điều đó không?

Fail2ban cho phép cấu hình tùy chỉnh ở dạng có thể viết ' quy tắc ' tùy chỉnh cho các dịch vụ có thể không được xử lý trong cấu hình mặc định. Thật dễ dàng để cài đặt và thiết lập và mạnh mẽ, nhưng có thể là quá mức nếu tất cả những gì tôi đang cố gắng đạt được là ' chặn ' IP khỏi máy chủ nếu họ thực hiện 2 lần truy cập không thành công trên bất kỳ dịch vụ / giao thức nào với số lượng x của thời gian?

Mục tiêu ở đây là để mở các báo cáo logwatch hàng ngày và không phải cuộn qua các trang đã cố gắng kết nối với máy chủ.

Cảm ơn đã dành thời gian.


3
Bạn có thể tìm thấy Tại sao tôi cần tường lửa nếu máy chủ của tôi được cấu hình tốt? có thể làm sáng tỏ vấn đề.
MadHatter

Câu trả lời:


21

Tôi nên sử dụng fail2ban hay iptables?

Bạn sử dụng fail2ban ngoài giải pháp tường lửa, để mở rộng các quy tắc tường lửa hiện có theo yêu cầu để chặn các địa chỉ IP cụ thể của các hệ thống thực hiện các hành động không mong muốn trên các dịch vụ công cộng. Họ làm việc trong buổi hòa nhạc với nhau.

Đơn giản hóa: tường lửa chỉ nhìn thấy các kết nối và gói mạng và có thể hiểu ý nghĩa của các mẫu trong đó nhưng nó không có cái nhìn sâu sắc ở cấp ứng dụng để phân biệt các yêu cầu mong muốn và hợp lệ với các yêu cầu độc hại, không đúng định dạng và không mong muốn. Chẳng hạn, tường lửa của bạn không thể phân biệt được sự khác nhau giữa một loạt các yêu cầu API HTTP và một số lần đăng nhập không chính xác gây ra bởi việc đoán mật khẩu mạnh mẽ trên trang quản trị Wordpress của bạn, với cả tường lửa cả hai chỉ là kết nối TCP tới cổng 80 hoặc 443.

Fail2ban là một cách tiếp cận chung và có thể mở rộng để cung cấp cái nhìn sâu sắc về mức độ ứng dụng cho tường lửa của bạn, mặc dù có phần gián tiếp.
Các ứng dụng thường xuyên sẽ đăng ký và đăng nhập các yêu cầu độc hại, không đúng định dạng và không mong muốn như vậy, nhưng chỉ hiếm khi chúng có khả năng riêng để ngăn chặn lạm dụng thêm. Mặc dù Fail2ban được tách rời một chút, sau đó có thể hành động đối với các sự kiện độc hại đã đăng nhập đó và hạn chế thiệt hại và ngăn chặn lạm dụng thêm, thông thường bằng cách cấu hình lại linh hoạt tường lửa của bạn để từ chối truy cập thêm. Nói cách khác, Fail2ban cung cấp cho các ứng dụng hiện có của bạn, mà không sửa đổi chúng, phương tiện để chống lại sự lạm dụng.

Một phương pháp khác để cung cấp tường lửa với những hiểu biết ở cấp độ ứng dụng sẽ là hệ thống phát hiện / ngăn chặn xâm nhập .


Chẳng hạn, máy chủ web là một dịch vụ công cộng phổ biến và trong tường lửa của bạn, các cổng TCP 80 và 443 được mở cho internet.
Thông thường, bạn không có bất kỳ giới hạn tỷ lệ nào trên các cổng HTTP / HTTPS vì nhiều người dùng hợp lệ có thể có một nguồn gốc duy nhất khi họ ở phía sau cổng NAT hoặc proxy web.

Khi bạn phát hiện các hành động không mong muốn và / hoặc độc hại đối với máy chủ web của mình, bạn sử dụng fail2ban để tự động chặn một kẻ phạm tội như vậy (có thể chặn chúng hoàn toàn hoặc chỉ khóa quyền truy cập của chúng vào các cổng 80 & 443).

Mặt khác, truy cập SSH không phải là một dịch vụ công cộng, nhưng nếu bạn không ở vị trí hạn chế quyền truy cập SSH trong tường lửa của mình chỉ trong phạm vi địa chỉ IP được liệt kê trắng, thì các kết nối đến hạn chế tốc độ là một cách để làm chậm lại vũ phu tấn công lực lượng. Nhưng tường lửa của bạn vẫn không thể phân biệt được giữa người dùng đăng nhập thành công 5 lần vì anh ta đang chạy các sách phát có thể đọc được và 5 lần thất bại để đăng nhập bằng root bởi bot.


Đây là cái nhìn sâu sắc mà tôi đang tìm kiếm, nó có ý nghĩa hoàn hảo với tôi, cảm ơn vì đã dành thời gian.
kingmilo

2
Mặc dù có tường lửa ứng dụng (còn được gọi là cổng ứng dụng) có thể thực hiện kiểm tra gói sâu.
vườn

@gardenhead đã đồng ý và +1; Do iptablesđược đề cập bởi OP, tôi đã tập trung chủ yếu vào bộ lọc gói Linux vào kernel. Theo tường thuật ứng dụng "ý kiến" của tôi, tôi không hoàn toàn kiểm tra các gói mà chúng nhận thức được giao thức ứng dụng và phải kiểm tra yêu cầu hoàn chỉnh. Trong web, sau đó bạn giao dịch với các sản phẩm như mod_security, F5 và Bluecoat và các proxy ngược "khiêm tốn"
HBruijn

@HBruijn Bạn nói đúng - Tôi đã sử dụng sai gói thuật ngữ. Tôi không biết chi tiết về cách các cổng ứng dụng được xây dựng, nhưng tôi tưởng tượng họ chờ đợi để nhận đủ các gói để kết hợp một thông báo lớp ứng dụng hoàn chỉnh trước khi kiểm tra + chuyển tiếp.
vườn

1
Protip: sử dụng mô-đun gần đây của iptables cho ssh, ngay cả khi bạn sử dụng fail2ban cho các dịch vụ khác. Có thể có các chế độ thất bại thú vị khi các quy tắc không được dọn sạch đúng cách và việc đăng nhập bị ảnh hưởng bởi điều đó sẽ thực sự gây phiền nhiễu (và cũng khiến vấn đề khó gỡ lỗi). Với gần đây , các quy tắc thực tế không phải thay đổi, vì vậy bạn có cơ hội tốt để lấy lại quyền truy cập.
Simon Richter

7

Tôi nên sử dụng fail2ban hay iptables?

Điều này hơi giống với câu hỏi "tôi nên sử dụng dây an toàn hay xe hơi?".

Trước hết, hãy nhớ rằng fail2ban thực sự chỉ là một công cụ để tự động phát hiện các mục định kỳ trong tệp văn bản và thực thi một số lệnh khi chúng đáp ứng một ngưỡng được chỉ định.

Chúng tôi thường sử dụng nó để chặn các máy chủ vi phạm một số chính sách như được chứng minh bằng các mục nhật ký định kỳ cho thấy vi phạm chính sách, nhưng đó không phải là điều duy nhất bạn có thể sử dụng.

Bạn có thể sử dụng fail2ban để thêm (và xóa) quy tắc iptables theo yêu cầu. Bạn cũng có thể thêm và xóa các quy tắc iptables bằng tay hoặc bạn có thể sử dụng fail2ban để thực hiện một số thứ hoàn toàn khác trong phản hồi. Đó là tất cả về cách bạn cấu hình nó.

Bạn nên có tường lửa chung tại chỗ bất kể bạn có đang chạy fail2ban hay không. Tường lửa như vậy sẽ là, ví dụ, để chặn lưu lượng (đến hoặc đi) mà bạn biết sẽ không bao giờ hợp pháp. Ví dụ, máy chủ cơ sở dữ liệu đó có thực sự cần xử lý các kết nối đến trên cổng 25 từ toàn bộ Internet không?

Ngày đầu đó, có đáp ứng fail2ban vi phạm chính sách bằng cách cắt đứt IP xúc phạm (s) trong một thời gian sẽ không làm nhiều để đảm bảo máy chủ của bạn cho mỗi gia nhập (một tốt khai thác chỉ cần để vượt qua tường lửa của bạn một lần) nhưng nó sẽ cắt giảm mức độ tiếng ồn trên hệ thống của bạn, bao gồm nhưng không giới hạn trong nhật ký hệ thống. Cách đơn giản để làm điều đó là có fail2ban chạy iptables để cấu hình kernel để loại bỏ các gói trong một thời gian. Nếu bạn có thể cấu hình lại tường lửa chu vi của bạn thay vì chỉ tường lửa máy chủ, thì chỉ có càng nhiều càng tốt.

Nói cách khác, đến mức họ có thể dễ dàng tách ra ngay từ đầu, bạn muốn cả hai.

nó có thể là quá mức nếu tất cả những gì tôi đang cố gắng đạt được là 'chặn' IP khỏi máy chủ nếu họ thực hiện 2 lần truy cập không thành công trên bất kỳ dịch vụ / giao thức nào trong khoảng thời gian không?

Đó chính xác là trường hợp sử dụng fail2ban được thiết kế để giải quyết. Sử dụng một công cụ cho mục đích dự định của nó gần như không bao giờ là quá mức cần thiết.

Mục tiêu ở đây là để mở các báo cáo logwatch hàng ngày và không phải cuộn qua các trang đã cố gắng kết nối với máy chủ.

Một bên, không liên quan trực tiếp đến câu hỏi của bạn: Bất cứ khi nào bạn đang lọc nhật ký để xem xét, hãy xem xét những gì bạn sẽ làm về một số mục cụ thể. Nếu tất cả những gì bạn sẽ làm về một mục là nói "meh" và tiếp tục, thì có lẽ bạn muốn lọc nó ra. Hãy chắc chắn lưu các nhật ký đầy đủ để xem xét cần thiết, nhưng chỉ cần đưa vào quy trình giám sát thường xuyên của bạn những thứ mà bạn thực sự sẽ làm gì đó khi nó xuất hiện. Nếu bạn thiết lập fail2ban để chặn máy chủ sau một vài lần thử kết nối không thành công, rất có thể bạn sẽ không cần phải xem lại chúng theo cách thủ công và có thể loại bỏ chúng khỏi thông báo giám sát của bạn. Nếu một người dùng hợp pháp phàn nàn về việc mất quyền truy cập, chỉ cần lấy ra các bản ghi đầy đủ và xem xét.


Đánh giá cao những phản hồi sâu rộng, tôi đoán tôi chưa bao giờ nghĩ hai người có chức năng hoàn toàn riêng biệt.
kingmilo

4

Tôi đã giải quyết câu hỏi tương tự vài năm trước. Tôi quyết định sử dụng iptables với modul gần đây vì hiệu suất và thiết lập dễ dàng. Tôi đã phải bảo vệ rất nhiều container ảo trên máy chủ. Chỉ lưu ý không mở bất kỳ vectơ DOS nào với các quy tắc của bạn. Cũng sử dụng ipset để khớp danh sách mạng hoặc danh sách ip trong các quy tắc. Tôi sử dụng nó cho danh sách trắng. Tất cả các mạng của một quốc gia trong một danh sách là tuyệt vời để tinh chỉnh. Và rất dễ dàng để bảo vệ một dịch vụ khác có cùng quy tắc chỉ bằng cách thêm một cổng để khớp. Vì vậy, tôi không thích thay đổi với fail2ban nhưng có lẽ ai đó có nhu cầu khác sẽ hài lòng với fail2ban.

Đây là một số mẫu:

  #
  # SSH tracking sample
  #
  #################################################################################
  iptables -X IN_SSH
  iptables -N IN_SSH
  iptables -A IN_SSH -m set --match-set net_blacklist src -p tcp -j REJECT
  iptables -A IN_SSH -m set --match-set net_whitelist src -p tcp --match limit --limit 5/second -j LOG --log-prefix whitelist_de_prefix
  iptables -A IN_SSH -m set --match-set net_whitelist src -p tcp -j ACCEPT
  # filter update
  iptables -A IN_SSH -m recent --name sshbf --set --rsource
  # connlimit
  iptables -A IN_SSH -m connlimit --connlimit-above 4 --match limit --limit 5/second -j LOG --log-prefix ssh_connlimit_per_ip_above_4
  iptables -A IN_SSH -m connlimit --connlimit-above 4 -j REJECT
  # filter
  iptables -A IN_SSH -m recent --name sshbf --rttl --rcheck --hitcount 13 --seconds 60 --match limit --limit 5/second -j LOG --log-prefix ssh_filtered_13in60sec
  iptables -A IN_SSH -m recent --name sshbf --rttl --rcheck --hitcount 13 --seconds 60 -j REJECT
  iptables -A IN_SSH -j ACCEPT

iptables -A FORWARD -p tcp --dport ssh --syn --jump IN_SSH
# iptables -A INPUT -p tcp --dport ssh --syn --jump IN_SSH

Đầu ra của thông điệp đăng nhập của bạn có thể được kết hợp với fail2ban. Bạn cũng có thể sử dụng nó cho các quy tắc INPUT.

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.