fail2ban으로 Linux 서버를 보호하는 방법
게시 됨: 2022-01-29 fail2ban
을 사용하면 Linux 컴퓨터가 연결 실패가 너무 많은 IP 주소를 자동으로 차단합니다. 자체 규제 보안입니다! 사용법을 알려드리겠습니다.
보안 보안 보안
윈저 공작부인 월리스 심슨(Wallis Simpson)은 “당신은 결코 너무 부자이거나 너무 마른 사람이 될 수 없다”는 유명한 말을 했습니다. 우리는 현대적이고 상호 연결된 세상을 위해 이것을 업데이트했습니다. 너무 조심하거나 너무 안전할 수는 없습니다.
컴퓨터가 SSH(Secure Shell) 연결과 같은 들어오는 연결 요청을 수락하거나 웹 또는 이메일 서버 역할을 하는 경우 무차별 대입 공격 및 암호 추측자로부터 컴퓨터를 보호해야 합니다.
그렇게 하려면 계정에 로그인하지 못하는 연결 요청을 모니터링해야 합니다. 짧은 시간 내에 반복적으로 인증에 실패하면 추가 시도를 금지해야 합니다.
이것이 실질적으로 달성될 수 있는 유일한 방법은 전체 프로세스를 자동화하는 것입니다. 약간의 간단한 구성으로 fail2ban
이 모니터링, 차단 및 차단 해제를 관리합니다.
fail2ban
은 Linux 방화벽 iptables
와 통합됩니다. 방화벽에 규칙을 추가하여 의심되는 IP 주소에 대한 금지를 시행합니다. 이 설명을 깔끔하게 유지하기 위해 빈 규칙 집합과 함께 iptables
를 사용하고 있습니다.
물론 보안이 염려된다면 잘 채워진 규칙 세트로 방화벽을 구성했을 것입니다. fail2ban
은 자체 규칙만 추가 및 제거합니다. 일반 방화벽 기능은 그대로 유지됩니다.
다음 명령을 사용하여 빈 규칙 집합을 볼 수 있습니다.
sudo iptables -L
관련: Linux 방화벽인 iptables에 대한 초보자 가이드
fail2ban 설치
이 기사를 조사하는 데 사용한 모든 배포판에서 fail2ban
을 설치하는 것은 간단합니다. Ubuntu 20.04에서 명령은 다음과 같습니다.
sudo apt-get install fail2ban
Fedora 32에서 다음을 입력합니다.
sudo dnf 설치 fail2ban
Manjaro 20.0.1에서는 pacman
을 사용했습니다.
sudo pacman -Sy fail2ban
fail2ban 구성
fail2ban
설치에는 jail.conf라는 기본 구성 파일이 포함되어 있습니다. 이 파일은 fail2ban
이 업그레이드될 때 덮어쓰여지므로 이 파일을 사용자 정의하면 변경 사항이 손실됩니다.
대신, jail.conf 파일을 jail.local이라는 파일에 복사합니다. 구성 변경 사항을 jail.local에 넣으면 업그레이드 후에도 유지됩니다. 두 파일 모두 fail2ban
에 의해 자동으로 읽힙니다.
파일을 복사하는 방법은 다음과 같습니다.
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
이제 즐겨찾는 편집기에서 파일을 엽니다. 우리는 gedit
를 사용할 것입니다:
sudo gedit /etc/fail2ban/jail.local
파일에서 [DEFAULT] 및 [sshd]의 두 섹션을 찾습니다. 그러나 실제 섹션을 찾는 데 주의하십시오. 이러한 레이블은 해당 레이블을 설명하는 섹션의 상단 근처에도 표시되지만 이는 우리가 원하는 것이 아닙니다.
[DEFAULT] 섹션은 40행 정도에서 찾을 수 있습니다. 많은 주석과 설명이 있는 긴 섹션입니다.
90행까지 아래로 스크롤하면 알아야 할 다음 네 가지 설정을 찾을 수 있습니다.
- ignoreip: 절대 금지되지 않을 IP 주소의 화이트리스트입니다. 그들은 영구 탈옥 무료 카드를 가지고 있습니다. localhost IP 주소(
127.0.0.1
)는 기본적으로 IPv6에 해당하는 주소(::1
)와 함께 목록에 있습니다. 금지해서는 안 되는 다른 IP 주소가 있는 경우 이 목록에 추가하고 각 주소 사이에 공백을 두십시오. - bantime: IP 주소가 금지된 기간("m"은 분을 나타냄). "m" 또는 "h"(시간) 없이 값을 입력하면 초로 처리됩니다. -1 값은 IP 주소를 영구적으로 금지합니다. 자신을 영구적으로 잠그지 않도록 각별히 주의하십시오.
- findtime: 너무 많은 연결 시도 실패로 인해 IP 주소가 금지되는 시간입니다.
- maxretry: "너무 많은 시도 실패"에 대한 값입니다.
동일한 IP 주소의 연결이 findtime 기간 내에 maxretry
연결 시도에 실패하면 findtime
기간 동안 bantime
됩니다. 유일한 예외는 ignoreip
목록의 IP 주소입니다.
fail2ban
은 IP 주소를 일정 시간 동안 감옥에 가둡니다. fail2ban
은 다양한 감옥을 지원하며 각 감옥은 단일 연결 유형에 적용되는 설정을 나타냅니다. 이를 통해 다양한 연결 유형에 대해 서로 다른 설정을 가질 수 있습니다. 또는 fail2ban
이 선택한 연결 유형 집합만 모니터링하도록 할 수 있습니다.
[DEFAULT] 섹션 이름에서 짐작할 수 있지만 지금까지 살펴본 설정은 기본값입니다. 이제 SSH 감옥에 대한 설정을 살펴보겠습니다.
관련: gedit를 사용하여 Linux에서 그래픽으로 텍스트 파일을 편집하는 방법
감옥 구성
Jail을 사용하면 fail2ban's
모니터링 안팎으로 연결 유형을 이동할 수 있습니다. 기본 설정이 감옥에 적용하려는 설정과 일치하지 않으면 bantime
, findtime
및 maxretry
에 대한 특정 값을 설정할 수 있습니다.
약 280행까지 아래로 스크롤하면 [sshd] 섹션이 표시됩니다.
여기에서 SSH 연결 감옥에 대한 값을 설정할 수 있습니다. 모니터링 및 금지에 이 감옥을 포함하려면 다음 줄을 입력해야 합니다.
활성화 = 사실
다음 줄도 입력합니다.
최대 재시도 = 3
기본 설정은 5이지만 SSH 연결에 더 주의하고 싶습니다. 우리는 그것을 3으로 떨어 뜨린 다음 파일을 저장하고 닫았습니다.
이 감옥을 fail2ban's
모니터링에 추가하고 기본 설정 중 하나를 무시했습니다. 감옥은 기본 설정과 감옥 관련 설정을 조합하여 사용할 수 있습니다.
fail2ban 활성화
지금까지 fail2ban
을 설치하고 구성했습니다. 이제 자동 시작 서비스로 실행되도록 활성화해야 합니다. 그런 다음 예상대로 작동하는지 테스트해야 합니다.
서비스로 fail2ban
을 활성화하려면 systemctl
명령을 사용합니다.
sudo systemctl enable fail2ban
우리는 또한 그것을 사용하여 서비스를 시작합니다:
sudo systemctl 시작 fail2ban
systemctl
을 사용하여 서비스 상태를 확인할 수도 있습니다.
sudo systemctl 상태 fail2ban.service
모든 것이 좋아 보입니다. 우리는 녹색 신호를 받았으므로 모든 것이 정상입니다.
fail2ban
이 동의하는지 봅시다:
sudo fail2ban-클라이언트 상태
이것은 우리가 설정한 것을 반영합니다. [sshd]라는 단일 감옥을 활성화했습니다. 이전 명령에 감옥 이름을 포함하면 더 자세히 살펴볼 수 있습니다.
sudo fail2ban-client 상태 sshd
여기에는 실패 횟수와 금지된 IP 주소가 나열됩니다. 물론 현재 모든 통계는 0입니다.
감옥 테스트
다른 컴퓨터에서 테스트 시스템에 SSH 연결을 요청하고 의도적으로 비밀번호를 잘못 입력합니다. 각 연결 시도에서 올바른 암호를 얻기 위해 세 번 시도합니다.
maxretry
값은 세 번의 암호 시도 실패가 아니라 세 번의 연결 시도 실패 후에 트리거됩니다. 따라서 연결 시도에 실패하려면 잘못된 암호를 세 번 입력해야 합니다.
그런 다음 다시 연결을 시도하고 암호를 세 번 더 잘못 입력합니다. 세 번째 연결 요청의 첫 번째 잘못된 비밀번호 시도는 fail2ban.
세 번째 연결 요청에서 잘못된 첫 번째 비밀번호 이후에는 원격 시스템에서 응답을 받지 못합니다. 우리는 어떤 설명도 얻지 못합니다. 우리는 냉담한 어깨를 얻습니다.
명령 프롬프트로 돌아가려면 Ctrl+C를 눌러야 합니다. 한 번 더 시도하면 다른 응답이 표시됩니다.
ssh [email protected]
이전에는 오류 메시지가 "사용 권한이 거부되었습니다."였습니다. 이번에는 연결이 완전히 거부되었습니다. 우리는 사람이 아닌 사람입니다. 우리는 금지되었습니다.
[sshd] 감옥의 세부 사항을 다시 살펴보겠습니다.
sudo fail2ban-client 상태 sshd
3번의 실패가 있었고, 1개의 IP 주소(192.168.4.25)가 차단되었습니다.
앞에서 언급했듯이 fail2ban
은 방화벽 규칙 집합에 규칙을 추가하여 금지를 시행합니다. 규칙 세트를 다시 살펴보겠습니다(이전에는 비어 있음).
sudo iptables -L
SSH 트래픽을 f2b-sshd
체인으로 보내는 규칙이 INPUT 정책에 추가되었습니다. f2b-sshd
체인의 규칙은 192.168.4.25의 SSH 연결을 거부합니다. bantime
에 대한 기본 설정을 변경하지 않았으므로 10분 안에 해당 IP 주소가 금지 해제되고 새로운 연결 요청을 할 수 있습니다.
더 긴 금지 기간(예: 몇 시간)을 설정했지만 IP 주소가 더 빨리 다른 연결 요청을 하도록 허용하려면 조기에 가석방할 수 있습니다.
이를 위해 다음을 입력합니다.
sudo fail2ban-client set sshd unbanip 192.168.5.25
원격 컴퓨터에서 다른 SSH 연결을 요청하고 올바른 암호를 입력하면 연결이 허용됩니다.
ssh [email protected]
간단하고 효과적인
일반적으로 단순할수록 더 좋으며 fail2ban
은 까다로운 문제에 대한 우아한 솔루션입니다. 구성이 거의 필요하지 않으며 사용자나 컴퓨터에 운영 오버헤드가 거의 발생하지 않습니다.
리눅스 명령어 | ||
파일 | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · 보기 · 문자열 · 유형 · 이름 바꾸기 · zip · 압축 풀기 · 마운트 · 언마운트 · 설치 · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · 패치 · 변환 · rclone · 파쇄 · srm | |
프로세스 | alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · wall · yes · kill · sleep · sudo · su · time · groupadd · usermod · groups · lshw · 종료 · 재부팅 · 정지 · poweroff · passwd · lscpu · crontab · 날짜 · bg · fg | |
네트워킹 | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw |
관련: 개발자 및 열광자를 위한 최고의 Linux 노트북