IPFW 및 SSHGuard를 사용하여 FreeBSD에 대한 보안 강화

VPS 서버는 종종 침입자가 대상으로합니다. 수백 번의 무단 ssh 로그인 시도로 일반적인 유형의 공격이 시스템 로그에 나타납니다. 방화벽 설정은 매우 유용하지만 그 자체만으로도 침입 침입 시도를 적절하게 제어하지 못할 수 있습니다.

이 튜토리얼은 방화벽과와 같은 두 가지 프로그램을 사용하여 FreeBSD에 대한 향상된 침입 장벽 을 구성하는 방법을 보여줍니다 . SSHGuard는 "추가적인"항목에 대한 시스템 로그를 모니터링하는 작은 애드온 프로그램입니다. 가해자가 액세스를 시도 하면 가해자의 IP 주소에서 발생하는 트래픽을 차단 하도록 지시 합니다. 그런 다음 가해자가 효과적으로 종료됩니다.ipfwsshguardsshguardipfw

이러한 프로그램의 작동 방식을 이해하면 서버 보호 관리가 매우 간단합니다. 이 안내서는 FreeBSD 구성에 중점을두고 있지만 그 일부는 다른 OS 및 방화벽 소프트웨어에도 적용됩니다.

1 단계. IPFW 구성

FreeBSD는 기본 (3 방화벽을 제공 GENERIC) 커널, ipfw, pf,와 ipfilter. 각각의 장점과 팬이 있지만 ipfwFBSD의 기본 방화벽 소프트웨어이며 우리의 목적에 사용하기 매우 간단합니다. ipfw매뉴얼 페이지에 나와있는 것처럼 많은 작업 을 수행하는 것이 중요하지만 NAT, 트래픽 쉐이핑 등과 같은 기능은 일반적인 VPS 상황에 필요하지 않습니다. 다행히 방화벽의 기본 기능은 우리의 요구 사항을 쉽게 충족시킵니다.

부팅시 방화벽을 시작하려면 다음을 추가하십시오 /etc/rc.conf.

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

service명령은 시작 / 수동으로 방화벽을 중지 할 수 있습니다 :

[user@vultr ~]$ sudo service ipfw start

당연히 ipfw파일에 규칙을 추가 할 때까지 (예 :의 위치에있는)이 작업은 수행하지 않습니다 /usr/local/etc/IPFW.rules. rules 파일은 실제로 "firewall_script"매개 변수와 일치하는 한 어디에서나 이름을 가질 수 있습니다. 규칙 파일은 아래에 자세히 설명되어 있습니다.

2 단계. SSHGuard 설치 및 구성

sshguard다른 방화벽과 함께 사용하기 위해 여러 가지 형태로 제공됩니다. pkg유틸리티를 사용하여 가져오고 설치하십시오 sshguard-ipfw.

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

대부분의 경우 그 중 한 가지만하면됩니다. /etc/rc.conf부팅시 적절한 변수가 자동으로 삽입됩니다 .

sshguard_enable="YES"

기본값은 정상적으로 작동합니다. 다른 값이 필요한 경우 sshguard매뉴얼 페이지는 매개 변수에 대한 자세한 정보를 제공합니다.

# 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"

sshguard일반적인 service호출로 시작할 수 있습니다 .

[user@vultr ~]$ sudo service sshguard start

3 단계. 규칙 스크립트 작성

가장 어려운 부분은 방화벽 규칙 집합을 만드는 것입니다. ipfw제공된 /etc/rc.firewall스크립트를 사용할 수 있지만 SSHGuard 및 다양한 운영 시나리오를 수용하도록 수정해야합니다. 많은 웹 페이지들과 FreeBSD 매뉴얼 은 이것에 관한 유용한 정보를 가지고 있습니다. 그러나 규칙 파일을 작성하는 것은 어려운 일이 아니며, 사용자 지정 규칙 집합을 이해하고 필요할 때 더 쉽게 변경할 수 있습니다.

ipfw규칙 의 중요한 특징은 첫 번째 경기가 승리 한다는 것입니다. 즉 규칙 순서가 중요합니다. 에서 ipfw각 규칙은 명령이며, 규칙 파일은 실행 쉘 스크립트입니다. 이를 통해 규칙을 변경 한 다음 규칙 파일을 쉘 스크립트로 실행하여 규칙 세트를 변경할 수 있습니다.

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

일반적으로 규칙 파일은 ipfw명령에 대한 변수를 정의한 다음 현재 규칙을 지우고 일반 규칙을 발행 한 다음 "out"규칙을 설정 한 다음 "in"규칙을 따릅니다. ipfw 매뉴얼 페이지 및 기타 리소스에는 규칙 구조 및 옵션에 대한 풍부한 정보가 포함되어 있습니다.

FreeBSD sshguard 버전이 버전 1.6.2로 업데이트 된 이후, 가해자에 대한 차단 규칙을 삽입하는 방법이 변경되었습니다. 이제 공격자의 주소는 이전과 같이 55000 이상의 규칙에 삽입되지 않고 ipfw 테이블 (특정 적으로 표 22)에 보관됩니다.

다행히 테이블을 사용하도록 규칙 파일을 설정하는 것은 매우 간단합니다. 테이블 규칙을 올바른 위치에 놓고 규칙을 작성할 때 올바른 구문을 사용해야합니다.

sshguard범죄자를 발견, 그것의 블랙리스트에 가해자의 주소를두고, 또한으로 주소를 삽입 ipfw은 "트���거"액세스를 거부 할 수 있도록 테이블. 이 규칙은 다음과 같은 목적을 달성합니다.

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

이 경우에도 인바운드 서비스를 01000 이상으로 허용하는 규칙을 설정해야합니다 . 예를 들어, address 10.20.30.40가 표 22의 위반자이고 다음 ipfw 규칙이 있다고 가정 해 보겠습니다 .

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

이후 ipfw만남 배제 01000 전에 규칙 56,420 , 10.20.30.40되는 슈팅 . "허용 22 인치"규칙에서는 전혀 보이지 않습니다. 허용 규칙에 00420 과 같은 "일반"숫자가 있으면 잘못된 트래픽이 유입되고 차단되지 않습니다 ( 0042001000 보다 작고 "첫 번째 일치 승리").

업데이트 된 버전의 좋은 기능은 이제 sshguard가 시작될 때 블랙리스트의 모든 주소가 테이블에 추가되고 들어오는 위반자를 지연없이 차단할 수 있다는 것입니다. 블랙리스트는 누적되며 세션간에 유지됩니다.

이 시점에서에 대해 ipfw수정 된 전체 규칙 세트 를 표시하는 것이 합리적 일 수 sshguard있습니다. 주석은 규칙 논리를 쉽게 따르는 데 도움이됩니다.

#!/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

4 단계. 시작 및 테스트

시스템 요구 사항은 다양하며 차단 또는 차단 해제 할 포트 선택이 규칙 세트에 반영됩니다. 규칙 세트가 완료되면 파일을에 저장 /usr/local/etc/IPFW.rules하고 FBSD 서비스를 시작하십시오.

 # service ipfw start
 # service sshguard start

기능이 강화 된 방화벽이 실행 중입니다! 확인 sshguard:

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

sshguard실행중인 경우 pid 및 전체 명령 행이 표시됩니다.

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

통계가 포함 된 방화벽 규칙 세트와 패킷이 규칙과 마지막으로 일치 한 시간이 표시됩니다.

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

몇 시간 또는 며칠 후에 위반자의 주소가 블랙리스트 및 표 22에 추가됩니다. 테이블의 모든 주소를 보려면 다음 명령을 사용하십시오.

ipfw table 22 list

결과는 다음과 같이 인쇄됩니다.

10.10.10.118/32 0
10.10.10.72/32 0
...

위에서 설명한 것처럼 이러한 주소의 연결은 허용되지 않습니다. 물론 처음 실행 sshguard하면 목록에 주소가 없지만 시간이 지남에 따라 다소 길어질 수 있습니다. 한 가지 옵션은 테이블에 여러 항목이있는 주소에 대해 별도의 차단 규칙을 만든 다음 블랙리스트에서 삭제하는 것입니다.

5 단계. 경계 유지 ...

침입이 제어되는지 확인하기 위해 때때로 로그를 확인하는 것이 좋습니다. 일반적으로, /var/log/auth.log그리고 /var/log/security정보입니다. 네트워크 서비스를 다루는 간격이나 오류가 명백해질 수 있습니다. 필요에 따라 방화벽 규칙 세트를 수정하는 것은 서버 관리의 일반적인 부분입니다.

이전 sshguard 버전에서는 /var/db/sshguard/blacklist.db파일이 커졌을 때 sshguard시스템 부팅시 시작 되지 않을 수 있습니다. sshguard시작할 수있는 블랙리스트 파일을 제거하거나 이름을 바꿉니다 . 이 문제는 최신 sshguard 버전에서 수정 된 것으로 보이므로이 해결 방법은 더 이상 필요하지 않습니다.

SSH 세션에 연결된 IP 주소를 허용 목록에 추가하십시오. 실수로 자신을 잠그면 언제든지 https://my.vultr.com의 noVNC 콘솔에 연결하여 IP를 허용 목록에 추가 할 수 있습니다.

, 합산의 조합을 사용 ipfw하고 sshguard보안 FreeBSD 시스템을 유지하는 데 도움이 그 일을. 침입 성있는 네트워크 활동을 최소화하면 추가적 이점이 있습니다. "노이즈"가 적을수록 시스템 운영을보다 쉽게 ​​추적하고 튜닝 할 수있어보다 안전하고보다 우수한 서버 운영에 기여합니다.

FreeBSD 시스템 / 서버를 효과적으로 보호하는 것은 특별히 복잡하지 않습니다. 제대로 작동하려면 약간의 노력이 필요하지만 VPS와 프로젝트 보안이 크게 향상됩니다.


Tags: #BSD #Security

Leave a Comment

AI가 랜섬웨어 공격의 증가와 싸울 수 있습니까?

AI가 랜섬웨어 공격의 증가와 싸울 수 있습니까?

랜섬웨어 공격이 증가하고 있지만 AI가 최신 컴퓨터 바이러스를 처리하는 데 도움이 될 수 있습니까? AI가 답인가? AI boone 또는 bane인지 여기에서 읽으십시오.

ReactOS: 이것이 Windows의 미래입니까?

ReactOS: 이것이 Windows의 미래입니까?

오픈 소스이자 무료 운영 체제인 ReactOS가 최신 버전과 함께 제공됩니다. 현대 Windows 사용자의 요구 사항을 충족하고 Microsoft를 무너뜨릴 수 있습니까? 이 구식이지만 더 새로운 OS 환경에 대해 자세히 알아보겠습니다.

WhatsApp 데스크톱 앱 24*7을 통해 연결 유지

WhatsApp 데스크톱 앱 24*7을 통해 연결 유지

Whatsapp은 마침내 Mac 및 Windows 사용자용 데스크톱 앱을 출시했습니다. 이제 Windows 또는 Mac에서 Whatsapp에 쉽게 액세스할 수 있습니다. Windows 8 이상 및 Mac OS 10.9 이상에서 사용 가능

AI는 어떻게 프로세스 자동화를 다음 단계로 끌어올릴 수 있습니까?

AI는 어떻게 프로세스 자동화를 다음 단계로 끌어올릴 수 있습니까?

인공 지능이 소규모 회사에서 어떻게 인기를 얻고 있으며 어떻게 인공 지능이 성장할 가능성을 높이고 경쟁자가 우위를 점할 수 있는지 알아보려면 이 기사를 읽으십시오.

macOS Catalina 10.15.4 추가 업데이트로 인해 해결보다 더 많은 문제가 발생함

macOS Catalina 10.15.4 추가 업데이트로 인해 해결보다 더 많은 문제가 발생함

최근 Apple은 문제를 해결하기 위해 macOS Catalina 10.15.4 추가 업데이트를 출시했지만 이 업데이트로 인해 Mac 컴퓨터의 브릭킹으로 이어지는 더 많은 문제가 발생하는 것 같습니다. 자세히 알아보려면 이 기사를 읽어보세요.

빅데이터의 13가지 상용 데이터 추출 도구

빅데이터의 13가지 상용 데이터 추출 도구

빅데이터의 13가지 상용 데이터 추출 도구

저널링 파일 시스템이란 무엇이며 어떻게 작동합니까?

저널링 파일 시스템이란 무엇이며 어떻게 작동합니까?

우리 컴퓨터는 모든 데이터를 저널링 파일 시스템이라고 하는 체계적인 방식으로 저장합니다. 검색을 누르는 즉시 컴퓨터에서 파일을 검색하고 표시할 수 있는 효율적인 방법입니다.https://wethegeek.com/?p=94116&preview=true

기술적 특이점: 인류 문명의 먼 미래?

기술적 특이점: 인류 문명의 먼 미래?

과학이 빠른 속도로 발전하고 우리의 많은 노력을 인수함에 따라 설명할 수 없는 특이점에 처할 위험도 높아집니다. 특이점이 우리에게 무엇을 의미할 수 있는지 읽어보십시오.

26가지 빅 데이터 분석 기법에 대한 통찰: 1부

26가지 빅 데이터 분석 기법에 대한 통찰: 1부

26가지 빅 데이터 분석 기법에 대한 통찰: 1부

2021년 의료 분야에서 인공 지능의 영향

2021년 의료 분야에서 인공 지능의 영향

의료 분야의 AI는 지난 수십 년 동안 큰 도약을 했습니다. 따라서 의료 분야에서 AI의 미래는 여전히 나날이 성장하고 있습니다.