Tăng cường bảo mật cho FreeBSD bằng IPFW và SSHGuard

Máy chủ VPS thường xuyên bị nhắm mục tiêu bởi những kẻ xâm nhập. Một kiểu tấn công phổ biến xuất hiện trong nhật ký hệ thống khi hàng trăm lần đăng nhập ssh trái phép. Thiết lập tường lửa rất hữu ích, nhưng bản thân nó có thể không kiểm soát đầy đủ các nỗ lực xâm nhập đột phá.

Hướng dẫn này cho thấy cách xây dựng một rào cản xâm nhập nâng cao cho FreeBSD bằng hai chương trình, ipfwtường lửa và sshguard. SSHGuard là một chương trình bổ trợ nhỏ theo dõi nhật ký hệ thống cho các mục "lạm dụng". Khi người phạm tội cố gắng truy cập, hãy sshguardhướng dẫn ipfwchặn lưu lượng truy cập bắt nguồn từ địa chỉ IP của người phạm tội. Người phạm tội sau đó bị đóng cửa một cách hiệu quả.

Khi đã hiểu cách thức các chương trình này hoạt động, việc quản lý bảo vệ máy chủ khá đơn giản. Mặc dù hướng dẫn này tập trung vào việc định cấu hình FreeBSD, các phần của nó áp dụng cho các phần mềm tường lửa và hệ điều hành khác.

Bước 1. Cấu hình IPFW

FreeBSD cung cấp 3 tường lửa trong mặc định (của nó GENERICkernel), ipfw, pf, và ipfilter. Mỗi cái đều có ưu điểm và người hâm mộ, nhưng ipfwlà phần mềm tường lửa riêng của FBSD và khá đơn giản để sử dụng cho mục đích của chúng tôi. Điều đáng chú ý là ipfwcó nhiều thứ như trang người dùng của nó cho thấy, tuy nhiên các khả năng như NAT, định hình lưu lượng truy cập, v.v., không cần thiết cho tình huống VPS điển hình. May mắn thay, các tính năng cơ bản của tường lửa dễ dàng đáp ứng yêu cầu của chúng tôi.

Để khởi động tường lửa khi khởi động, hãy thêm vào như sau /etc/rc.conf:

firewall_enable="YES"
firewall_script="/usr/local/etc/IPFW.rules"
firewall_logging="YES"

Các servicelệnh có sẵn để bắt đầu / dừng các bức tường lửa bằng tay:

[user@vultr ~]$ sudo service ipfw start

Đương nhiên, ipfwsẽ không làm bất cứ điều gì cho đến khi nó thêm quy tắc, thường là từ một tệp, trong ví dụ này nằm ở /usr/local/etc/IPFW.rules. Trên thực tế, tệp quy tắc có thể được đặt ở bất kỳ đâu hoặc có bất kỳ tên nào, miễn là nó phù hợp với tham số "tường lửa". Các tập tin quy tắc được mô tả chi tiết dưới đây.

Bước 2. Cài đặt và cấu hình SSHGuard

sshguardcó nhiều hương vị để sử dụng với các tường lửa khác nhau. Sử dụng pkgtiện ích để tìm nạp và cài đặt sshguard-ipfw:

[user@vultr ~]$ sudo pkg install sshguard-ipfw

Trong hầu hết các trường hợp đó là tất cả một người cần phải làm. Biến thích hợp được tự động chèn vào /etc/rc.confđể bắt đầu khởi động:

sshguard_enable="YES"

Mặc định thường hoạt động tốt. Nếu các giá trị khác nhau là cần thiết, sshguardtrang man cung cấp thông tin chi tiết về các tham số:

# sshguard--program defaults, so don't need to be in rc.conf unless assigning different value
# sshguard_pidfile="/var/run/sshguard.pid"
# sshguard_watch_logs="/var/log/auth.log:/var/log/mail"
# sshguard_blacklist="40:/var/db/sshguard/blacklist.db"
# sshguard_safety_thresh="40"
# sshguard_pardon_min_interval="420"
# sshguard_prescribe_interval="1200"

Bạn có thể bắt đầu sshguardvới servicelời gọi thông thường :

[user@vultr ~]$ sudo service sshguard start

Bước 3. Tạo một kịch bản quy tắc

Phần khó nhất là tạo quy tắc tường lửa. ipfwcó thể sử dụng /etc/rc.firewalltập lệnh được cung cấp , nhưng nó phải được sửa đổi để phù hợp với SSHGuard, cũng như các kịch bản hoạt động khác nhau. Một số trang web và Hướng dẫn FreeBSD có thông tin hữu ích về việc này. Tuy nhiên, viết một tệp quy tắc không khó lắm, ngoài ra, một quy tắc tùy chỉnh có thể dễ hiểu và thay đổi hơn khi cần thiết.

Một tính năng quan trọng của ipfwquy tắc là trận đấu đầu tiên thắng có nghĩa là thứ tự quy tắc là quan trọng. Trong ipfw, mỗi quy tắc là một lệnh và tệp quy tắc là một tập lệnh shell thực thi. Điều đó cho phép thay đổi quy tắc bằng cách thay đổi quy tắc sau đó chạy tệp quy tắc dưới dạng tập lệnh shell:

[user@vultr /usr/local/etc]$ sudo ./IPFW.rules

Nói chung, một tệp quy tắc sẽ xác định một biến cho ipfwlệnh, sau đó xóa các quy tắc hiện tại, ban hành các quy tắc chung, sau đó tiến hành đặt quy tắc "ra", theo sau là quy tắc "trong". Trang hướng dẫn ipfw và các tài nguyên khác chứa nhiều thông tin về cấu trúc quy tắc và các tùy chọn có rất nhiều điều để nói.

Do phiên bản sshguard FreeBSD đã được cập nhật lên phiên bản 1.6.2, nên phương thức chèn quy tắc chặn cho người phạm tội đã thay đổi. Bây giờ địa chỉ của người phạm tội được giữ trong một bảng ipfw (bảng 22 cụ thể), thay vì chèn vào các quy tắc trên 55000 như trước đây.

May mắn thay, việc thiết lập tệp quy tắc để sử dụng bảng khá đơn giản. Đây chỉ là vấn đề đặt quy tắc bảng vào đúng vị trí và đảm bảo sử dụng đúng cú pháp khi viết quy tắc.

Khi sshguardtìm thấy một kẻ phạm tội, nó sẽ đưa địa chỉ của người phạm tội vào danh sách đen của mình và cũng chèn địa chỉ vào ipfwbảng để nó "kích hoạt" từ chối truy cập. Quy tắc này sẽ thực hiện các mục đích sau:

01000 deny ip from table\(22\) to any

Vẫn cần đặt quy tắc cho phép các dịch vụ trong nước trên 01000 trong trường hợp này. Ví dụ: giả sử địa chỉ 10.20.30.40là người phạm tội trong bảng 22 và chúng tôi có quy tắc ipfw này:

56420 allow tcp from any to me dst-port 22 in via $vif

Kể từ ipfwcuộc gặp gỡ cai trị 01.000 trước khi quy tắc 56.420 , 10.20.30.40đang bị chặn . Nó sẽ không bao giờ được nhìn thấy bởi quy tắc "cho phép 22 trong". Nếu quy tắc cho phép có số "thông thường" như 00420 , lưu lượng truy cập xấu sẽ được đưa vào và không bao giờ bị chặn (vì 00420 nhỏ hơn 01000 và "trận thắng đầu tiên").

Một tính năng hay của phiên bản cập nhật là bây giờ khi sshguard khởi động tất cả các địa chỉ trong danh sách đen được thêm vào bảng và có sẵn để chặn những kẻ phạm tội đến mà không bị chậm trễ. Danh sách đen được tích lũy và giữ lại giữa các phiên.

Tại thời điểm này, có thể hợp lý để hiển thị một ipfwquy tắc hoàn chỉnh được sửa đổi cho sshguard. Các ý kiến ​​sẽ làm cho nó khá dễ dàng để tuân theo logic quy tắc:

#!/bin/sh

# ipfw config/rules
# from FBSD Handbook, rc.firewall, et. al.

# Flush all rules before we begin.
ipfw -q -f flush

# Set rules command prefix
cmd="ipfw -q add "

vif="vtnet0"

# allow all for localhost
$cmd 00010 allow ip from any to any via lo0

# checks stateful rules.  If marked as "keep-state" the packet has
# already passed through filters and is "OK" without futher
# rule matching
$cmd 00101 check-state

# allow DNS out
$cmd 00110 allow tcp from me to any dst-port 53 out via $vif setup keep-state
$cmd 00111 allow udp from me to any dst-port 53 out via $vif keep-state

# allow dhclient connection out (port numbers are important)
$cmd 00120 allow udp from me 68 to any dst-port 67 out via $vif keep-state

# allow HTTP HTTPS replies
$cmd 00200 allow tcp from any to any dst-port 80 out via $vif setup keep-state
$cmd 00220 allow tcp from any to any dst-port 443 out via $vif setup keep-state

# allow outbound mail
$cmd 00230 allow tcp from any to any dst-port 25 out via $vif setup keep-state
$cmd 00231 allow tcp from any to any dst-port 465 out via $vif setup keep-state
$cmd 00232 allow tcp from any to any dst-port 587 out via $vif setup keep-state

# allow icmp re: ping, et. al. 
# comment this out to disable ping, et.al.
$cmd 00250 allow icmp from any to any out via $vif keep-state

# alllow timeserver out
$cmd 00260 allow tcp from any to any dst-port 37 out via $vif setup keep-state

# allow ntp out
$cmd 00270 allow udp from any to any dst-port 123 out via $vif keep-state

# allow outbound SSH traffic
$cmd 00280 allow tcp from any to any dst-port 22 out via $vif setup keep-state

# otherwise deny outbound packets
# outbound catchall.  
$cmd 00299 deny log ip from any to any out via $vif

# inbound rules
# deny inbound traffic to restricted addresses
$cmd 00300 deny ip from 192.168.0.0/16 to any in via $vif
$cmd 00301 deny ip from 172.16.0.0/12 to any in via $vif
$cmd 00302 deny ip from 10.0.0.0/8 to any in via $vif
$cmd 00303 deny ip from 127.0.0.0/8 to any in via $vif
$cmd 00304 deny ip from 0.0.0.0/8 to any in via $vif
$cmd 00305 deny ip from 169.254.0.0/16 to any in via $vif
$cmd 00306 deny ip from 192.0.2.0/24 to any in via $vif
$cmd 00307 deny ip from 204.152.64.0/23 to any in via $vif
$cmd 00308 deny ip from 224.0.0.0/3 to any in via $vif

# deny inbound packets on these ports
# auth 113, netbios (services) 137/138/139, hosts-nameserver 81 
$cmd 00315 deny tcp from any to any dst-port 113 in via $vif
$cmd 00320 deny tcp from any to any dst-port 137 in via $vif
$cmd 00321 deny tcp from any to any dst-port 138 in via $vif
$cmd 00322 deny tcp from any to any dst-port 139 in via $vif
$cmd 00323 deny tcp from any to any dst-port 81 in via $vif

# deny partial packets
$cmd 00330 deny ip from any to any frag in via $vif
$cmd 00332 deny tcp from any to any established in via $vif

# allowing icmp re: ping, etc.
$cmd 00310 allow icmp from any to any in via $vif

# allowing inbound mail, dhcp, http, https
$cmd 00350 allow udp from any 53 to me in via $vif
$cmd 00360 allow tcp from any 53 to me in via $vif
$cmd 00370 allow udp from any 67 to me dst-port 68 in via $vif keep-state

$cmd 00400 allow tcp from any to me dst-port 80 in via $vif setup limit src-addr 2
$cmd 00410 allow tcp from any to me dst-port 443 in via $vif setup limit src-addr 2

# SSHguard puts offender addresses in table 22. Set up the table rule
# Please note the '\(22\)' syntax, necessary since it's run as shell command
$cmd 01000 deny ip from table\(22\) to any

# allow inbound ssh, mail. PROTECTED SERVICES: numbered ABOVE sshguard blacklist range 
$cmd 56420 allow tcp from any to me dst-port 22 in via $vif setup limit src-addr 2
$cmd 56530 allow tcp from any to any dst-port 25 in via $vif setup keep-state
$cmd 56531 allow tcp from any to any dst-port 465 in via $vif setup keep-state
$cmd 56532 allow tcp from any to any dst-port 587 in via $vif setup keep-state

# deny everything else, and log it
# inbound catchall
$cmd 56599 deny log ip from any to any in via $vif

# ipfw built-in default, don't uncomment
# $cmd 65535 deny ip from any to any

Bước 4. Khởi động và thử nghiệm

Nhu cầu hệ thống khác nhau và các lựa chọn khác nhau về cổng để chặn hoặc bỏ chặn được phản ánh trong bộ quy tắc. Khi quy tắc kết thúc, lưu tệp vào /usr/local/etc/IPFW.rulesvà bắt đầu dịch vụ FBSD:

 # service ipfw start
 # service sshguard start

Tường lửa tăng cường nên được chạy! Kiểm tra sshguard:

 [user@vultr ~]$ sudo pgrep -lfa ssh

Nếu sshguardđang chạy, dòng lệnh và lệnh đầy đủ của nó được hiển thị:

720 /usr/local/sbin/sshguard -b 40:/var/db/sshguard/blacklist.db -l /var/log/auth.log -l /var/log/maillog -a 40 -p 420 -s 1200 -w /usr/local/etc/sshguard.whitelist -i /var/run/sshguard.pid

Điều này cho thấy quy tắc tường lửa có số liệu thống kê và lần cuối cùng một gói khớp với quy tắc:

 [user@vultr ~]$ sudo ipfw -cat list

Sau nhiều giờ hoặc nhiều ngày, địa chỉ của những người phạm tội được thêm vào danh sách đen và cả bảng 22. Để xem tất cả các địa chỉ trong bảng, hãy sử dụng lệnh này:

ipfw table 22 list

Kết quả được in là:

10.10.10.118/32 0
10.10.10.72/32 0
...

Như mô tả ở trên, các kết nối từ các địa chỉ này không được phép. Tất nhiên, trong lần chạy đầu tiên sshguard, sẽ không có bất kỳ địa chỉ nào trong danh sách, nhưng theo thời gian, nó có thể trở nên khá dài. Một tùy chọn là tạo các quy tắc chặn riêng cho các địa chỉ có nhiều mục trong bảng và sau đó xóa chúng khỏi danh sách đen.

Bước 5. Giữ cảnh giác ...

Thỉnh thoảng nên kiểm tra nhật ký để đảm bảo kiểm soát xâm nhập. Nói chung, /var/log/auth.log/var/log/securitylà thông tin. Các lỗ hổng hoặc lỗi trong việc bao phủ các dịch vụ mạng có thể trở nên rõ ràng. Sửa đổi quy tắc tường lửa khi cần là một phần bình thường của quản trị máy chủ.

Trong các phiên bản sshguard trước, khi /var/db/sshguard/blacklist.dbtệp đã lớn, nó có thể ngăn không sshguardcho khởi động hệ thống. Xóa hoặc đổi tên tệp danh sách đen được phép sshguardbắt đầu. Vấn đề này dường như được khắc phục trong phiên bản sshguard mới nhất, vì vậy cách khắc phục này có lẽ không còn cần thiết nữa.

Đảm bảo lập danh sách trắng Địa chỉ IP mà bạn được kết nối với Phiên SSH từ đó. Nếu bạn vô tình tự khóa mình, bạn luôn có thể kết nối với Bảng điều khiển noVNC trong https://my.vultr.com và liệt kê danh sách IP của bạn.

Tóm tắt, sử dụng kết hợp ipfwsshguardgiúp giữ cho hệ thống FreeBSD của bạn an toàn và thực hiện công việc của nó. Giảm thiểu hoạt động mạng xâm nhập có một lợi ích bổ sung: ít "nhiễu" hơn giúp theo dõi và điều chỉnh hoạt động của hệ thống dễ dàng hơn, góp phần vào một máy chủ an toàn hơn, chạy tốt hơn.

Bảo vệ hiệu quả một hệ thống / máy chủ FreeBSD không đặc biệt phức tạp. Mặc dù một nỗ lực khiêm tốn là cần thiết để có được nó và chạy, nhưng nó được đền đáp bằng sự bảo mật dự án và VPS lớn hơn đáng kể.


Tags: #BSD #Security

Leave a Comment

ReactOS: Đây có phải là tương lai của Windows?

ReactOS: Đây có phải là tương lai của Windows?

ReactOS, một hệ điều hành mã nguồn mở và miễn phí đã có phiên bản mới nhất. Liệu nó có thể đáp ứng đủ nhu cầu của người dùng Windows hiện đại và hạ gục Microsoft? Hãy cùng tìm hiểu thêm về trải nghiệm hệ điều hành kiểu cũ nhưng mới hơn này.

Liệu AI có thể chiến đấu với số lượng các cuộc tấn công bằng Ransomware ngày càng tăng

Liệu AI có thể chiến đấu với số lượng các cuộc tấn công bằng Ransomware ngày càng tăng

Các cuộc tấn công ransomware đang gia tăng, nhưng liệu AI có thể giúp đối phó với loại virus máy tính mới nhất? AI có phải là câu trả lời? Đọc ở đây biết là AI boone hay cấm

Luôn kết nối thông qua Ứng dụng WhatsApp Desktop 24 * 7

Luôn kết nối thông qua Ứng dụng WhatsApp Desktop 24 * 7

Whatsapp cuối cùng đã ra mắt ứng dụng Máy tính để bàn cho người dùng Mac và Windows. Giờ đây, bạn có thể truy cập Whatsapp từ Windows hoặc Mac một cách dễ dàng. Có sẵn cho Windows 8+ và Mac OS 10.9+

Làm thế nào AI có thể đưa quá trình tự động hóa lên cấp độ tiếp theo?

Làm thế nào AI có thể đưa quá trình tự động hóa lên cấp độ tiếp theo?

Hãy đọc phần này để biết Trí tuệ nhân tạo đang trở nên phổ biến như thế nào đối với các công ty quy mô nhỏ và làm thế nào nó đang tăng khả năng khiến họ phát triển và giúp đối thủ cạnh tranh của họ có thể cạnh tranh.

Bản cập nhật bổ sung macOS Catalina 10.15.4 đang gây ra nhiều vấn đề hơn là giải quyết

Bản cập nhật bổ sung macOS Catalina 10.15.4 đang gây ra nhiều vấn đề hơn là giải quyết

Gần đây Apple đã phát hành macOS Catalina 10.15.4 một bản cập nhật bổ sung để khắc phục các sự cố nhưng có vẻ như bản cập nhật đang gây ra nhiều vấn đề hơn dẫn đến việc máy mac bị chai. Đọc bài viết này để tìm hiểu thêm

13 Công cụ trích xuất dữ liệu thương mại của Dữ liệu lớn

13 Công cụ trích xuất dữ liệu thương mại của Dữ liệu lớn

13 Công cụ trích xuất dữ liệu thương mại của Dữ liệu lớn

Hệ thống tệp nhật ký là gì và nó hoạt động như thế nào?

Hệ thống tệp nhật ký là gì và nó hoạt động như thế nào?

Máy tính của chúng tôi lưu trữ tất cả dữ liệu một cách có tổ chức được gọi là hệ thống tệp Ghi nhật ký. Đây là một phương pháp hiệu quả cho phép máy tính tìm kiếm và hiển thị các tệp ngay khi bạn nhấn tìm kiếm. Https://wethegeek.com/? P = 94116 & preview = true

Điểm kỳ dị về công nghệ: Tương lai xa của nền văn minh nhân loại?

Điểm kỳ dị về công nghệ: Tương lai xa của nền văn minh nhân loại?

Khi Khoa học phát triển với tốc độ nhanh chóng, chiếm rất nhiều nỗ lực của chúng ta, những rủi ro của việc phục tùng bản thân trước một Điểm kỳ dị không thể giải thích cũng tăng lên. Hãy đọc, điểm kỳ dị có thể có ý nghĩa gì đối với chúng ta.

Hiểu rõ hơn về 26 kỹ thuật phân tích dữ liệu lớn: Phần 1

Hiểu rõ hơn về 26 kỹ thuật phân tích dữ liệu lớn: Phần 1

Hiểu rõ hơn về 26 kỹ thuật phân tích dữ liệu lớn: Phần 1

Tác động của trí tuệ nhân tạo trong chăm sóc sức khỏe 2021

Tác động của trí tuệ nhân tạo trong chăm sóc sức khỏe 2021

AI trong lĩnh vực chăm sóc sức khỏe đã có những bước tiến nhảy vọt so với những thập kỷ trước. Vì vậy, tương lai của AI trong Chăm sóc sức khỏe vẫn đang phát triển từng ngày.