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

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

Thêm hình mờ nền vào tài liệu Word của bạn

Thêm hình mờ nền vào tài liệu Word của bạn

Microsoft Word cho phép bạn thêm hình mờ vào tài liệu của mình. Hình mờ là những hình ảnh hoặc văn bản nhẹ phía sau văn bản thông thường trong tài liệu của bạn.

Tạo danh sách phân phối Outlook \ Nhóm

Tạo danh sách phân phối Outlook \ Nhóm

Outlook và nhiều ứng dụng e-mail khác có một tính năng cho phép bạn gửi e-mail đến nhiều người nhận cùng một lúc bằng cách sử dụng danh sách phân phối. Bằng cách này khi bạn gửi e-mail, bạn chỉ cần đặt tên danh sách phân phối vào hộp Tới:

5 Xu hướng thiết kế web bổ sung cho nhau

5 Xu hướng thiết kế web bổ sung cho nhau

Luôn có những thứ bổ sung cho nhau. Cho dù đó là ghép nối các loại thực phẩm, kinh nghiệm hay thậm chí là các mối quan hệ cá nhân; một số thứ chỉ hoạt động tốt hơn khi có thứ gì đó khác hỗ trợ nó. Thiết kế web không có gì khác biệt. Có một số kỹ thuật nhất định dựa vào thứ gì đó khác để nó có hiệu quả hoặc thậm chí hoạt động bình thường.

Đã xảy ra sự cố khi gửi lệnh đến lỗi chương trình trong Excel

Đã xảy ra sự cố khi gửi lệnh đến lỗi chương trình trong Excel

Nếu bạn sử dụng Excel 2007 hoặc 2010, bạn có thể gặp lỗi khi mở Excel hoặc nhấp đúp vào tệp Excel có thông báo Đã xảy ra sự cố khi Gửi lệnh tới Chương trình. Điều này có thể được gây ra bởi một vài điều khác nhau.

Favicons là gì và cách sử dụng chúng

Favicons là gì và cách sử dụng chúng

Biểu tượng yêu thích là một hình ảnh nhỏ riêng lẻ của một trang web được hiển thị bên cạnh thanh địa chỉ. Tùy thuộc vào trình duyệt, nó cũng xuất hiện trong dấu trang / dấu trang trong thanh công cụ dấu trang và thanh bảng hoặc dưới dạng lối tắt trên màn hình.

Thay đổi chủ đề Microsoft Outlook của bạn

Thay đổi chủ đề Microsoft Outlook của bạn

Nếu bạn là người dùng Outlook thì bạn có thể tạo phong cách hoặc chủ đề của riêng mình cho các thư email gửi đi của mình chỉ với một vài cú nhấp chuột.

Sử dụng Windows Photo Viewer trong Windows 10

Sử dụng Windows Photo Viewer trong Windows 10

Nếu bạn thích sử dụng Windows Photo Viewer trong Windows 7 nhưng nhận thấy rằng bạn không thể sử dụng nó trong Windows 10 thì đây là cách bạn lấy lại.

Trình giả lập tốt nhất để chơi trò chơi Nintendo DS trên máy tính của bạn

Trình giả lập tốt nhất để chơi trò chơi Nintendo DS trên máy tính của bạn

Ngày nay, hình thức chơi game phổ biến nhất liên quan đến các trò chơi cũ, cổ điển là sử dụng trình giả lập. Hôm nay chúng tôi sẽ giới thiệu cho bạn một số trình giả lập tốt nhất cho Nintendo DS chạy trên mọi máy tính. Sau đó, tất cả những gì bạn phải làm là tải xuống trình giả lập NDS và các trò chơi và bạn đã sẵn sàng chơi.

Thay đổi Phông chữ Mặc định cho Tài liệu Word Mới

Thay đổi Phông chữ Mặc định cho Tài liệu Word Mới

Nếu bạn có một phông chữ nhất định mà bạn muốn sử dụng cho tất cả các tài liệu Word của mình, có một cách để làm cho Word sử dụng phông chữ đó theo mặc định mỗi khi bạn bắt đầu một tài liệu mới. Làm theo các bước đơn giản.

3 cách để tắt tính năng nén tệp tự động trong Windows

3 cách để tắt tính năng nén tệp tự động trong Windows

Bây giờ chúng ta sẽ đi vào cách ngăn Windows tự động nén tệp của bạn, do đó bạn không cần phải lo lắng về điều này xảy ra nữa.