보안?
라즈베리 파이가 보안 취약점이 될 수 있으므로 몇 가지 보안 조치를 해보려고 합니다.
사용자 명, 기본 패스워드 변경하기
최신 imager는 사용자 명과 기본 패스워드는 이미지를 굽거나 OS 설치 시 변경했으므로 별도의 변경이 필요 없습니다.
변경하고 싶다면 config로 변경할 수 있습니다.
1. 기본 패스워드
sudo raspi-config
설정에 들어가셔서

System Options -> S3 Password 엔터

터미널에서 새 비밀번호를 입력하시면 됩니다.

2. 유저명 변경
절차는 다음과 같습니다.
- 새 사용자 추가 및 패스워드 추가
- sudo 퍼미션 추가
- 기존 유저 삭제
다음과 같이 새 사용자를 추가 후 비밀번호를 생성해줍니다.
sudo adduser alice

이제 새로운 사용자의 홈 디렉터리는 home/alice가 됩니다.
sudo 퍼미션을 할당해줍니다.
sudo adduser alice sudo

su alice
su명령어를 통해 유저를 변경할 수 있습니다.

이제 새로운 유저를 등록했으니 기존 유저는 삭제해도 됩니다.
sudo deluser <기존 유저명> sudo //sudo 퍼미션 삭제
sudo deluser <기존 유저명> // <기존 유저명> 삭제
sudo deluser -remove-home <기존 유저명> // 파일까지 삭제

sudo에 비밀번호 걸기
sudo vim /etc/sudoers.d/010_pi-nopasswd
저는 vim에디터가 좋으므로 vim으로 수정했습니다.


NOPASSWD의 NO를 지워서 패스워드 검사를 활성화해줍니다.

앞으로 sudo 명령어를 사용할 때마다 "우리는 널 믿지만 패스워드 입력해" 메시지를 보게 될 것입니다.
최신 보안 픽스 적용
최신 배포판은 이미 최신 보안 픽스이므로, 라즈 비안의 버전을 최신으로 유지하면 됩니다.
만약 라즈베리파이를 연결하기 위해 SSH를 사용한다면, ssh-server를 업데이트하는 cron 작업을 추가하는 것도 좋습니다.
apt install openssh-server
cron은 유닉스 계열 컴퓨터 운영체제의 시간 기반 잡 스케줄러입니다. 자동화라고 볼 수 있네요.
[Linux] crontab 명령어 사용법 - cron 작업 생성 및 관리
crontab 명령은 리눅스에서 특정 작업을 주기적으로 실행하기 위해서 사용한다. crontab을 일종의 작업 스케쥴러로 "매일 1시에 이 작업을 실행하라” 혹은 “10분마다 이 스크립트를 실행하라” 같
hbase.tistory.com
cron명령어는 위 블로그에서 상세하게 설명하고 있으니 간단히 설정만 하겠습니다.

crontab -e
우선 작업을 하나 생성합니다. 처음 생성하게 되면 에디터를 설정해야 하는데 편한 거 선택하면 됩니다.
문법은 다음과 같습니다.
# ┌───────────── min (0 - 59)
# │ ┌────────────── hour (0 - 23)
# │ │ ┌─────────────── day of month (1 - 31)
# │ │ │ ┌──────────────── month (1 - 12)
# │ │ │ │ ┌───────────────── day of week (0 - 6) (0 to 6 are Sunday to Saturday, or use names; 7 is Sunday, the same as 0)
# │ │ │ │ │
# │ │ │ │ │
# * * * * * command to execute
자정에 실행하길 원하므로 0 0 * * * 로 넣어줍니다.


만약 권한이 없어서 안된다면 sudo를 추가하는 것도 하나의 방법입니다.
작성된 cron을 확인하고 싶다면 crontab -l
으로 확인할 수 있습니다.
방화벽 설치하기
리눅스에는 방화벽 솔루션이 많은데 그중 원문에 소개된 ufw인터페이스를 사용하려고 합니다. ufw는 "Uncomplicated Fire Wall"의 약자이며 우분투의 기본 방화벽 도구입니다.
sudo apt install ufw
간단하게 설치할 수 있습니다.
방화벽을 활성화하고, 부트 시에 시작하도록 하려면 다음의 명령을 실행합니다.
sudo ufw enable
방화벽을 비활성화하고, 부트 시에 시작하지 않게 하려면 다음의 명령을 실행합니다.
sudo ufw disable
특정 포트에 접근을 허용합니다(예에서는 22번 포트를 사용합니다).
sudo ufw allow 22
포트에 대한 접근을 차단하는 것도 아주 쉽습니다(여기서도 22번 포트를 예로 듭니다).
sudo ufw deny 22
특정 포트에 대하여 어느 서비스를 허용하거나 차단할지도 정할 수 있습니다. 아래의 예는 22번 포트에 대하여 tcp를 차단합니다.
sudo ufw deny 22/tcp
어느 포트를 사용하는지 알지 못하더라도 서비스를 지정할 수 있습니다. 이 예는 방화벽을 통한 ssh 서비스 접근을 허가합니다.
sudo ufw allow ssh
status 명령으로 방화벽의 모든 설정을 볼 수 있습니다.
sudo ufw status
tcp를 사용하여 ssh 포트에 로그인을 시도하는 것을 제한합니다. 특정 IP 주소에서 30초 내에 여섯 번 이상 시도하면 연결을 차단합니다.
sudo ufw limit ssh/tcp
IP 주소 192.168.2.1로부터 30번 포트에 접근하는 것을 차단합니다.
sudo ufw deny from 192.168.2.1 port 30
IP 주소 192.168.2.1을 허가합니다.
sudo ufw allow from 192.168.2.1
등록한 룰을 잘못 입력했다면 삭제합니다.
sudo ufw delete allow 21/tcp
이 외에도 다양한 ufw룰이 있습니다. 원하는 룰을 하나씩 추가해주면 됩니다.
반드시 SSH 포트는 허용해주셔야 Putty나 MobaXterm으로 접속할 수 있습니다.
fail2ban 설치하기
파이를 포트 포워딩해서 외부로 노출된다면, 무수한 악수요청이 있는걸 로그로 볼 수 있습니다. 이럴 경우 fail2ban을 통해 접근 시도를 막을 수 있습니다.
Fail2ban은 침입차단 소프트웨어 프레임워크로서 컴퓨터 서버를 무차별 대입 공격 으로부터 보호합니다.
다음 명령으로 fail2ban을 설치합니다.
sudo apt install fail2ban
Fail2ban 설치 시 /etc/fail2ban 폴더가 생성되며, jail.conf 구성 파일을 볼 수 있습니다. jail.local에 복사해줘야 활성화됩니다.
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo vim /etc/fail2ban/jail.local

파일에 들어가게 되면 설명이 되게 많은데 간단 요약하면
- bantime = 사용자가 밴되는 시간입니다.
- findtime = maxretry(최대 재시도 횟수)를 시도하는 총시간입니다.
- maxretry = 최대 재시도 횟수입니다.
따라서 bantime=10m, finetime=10m, maxretry=5 이면 10분 내로 5번 초과로 틀릴 경우 10분간 block 합니다.

이제 1시간 내로 5번 초과해서 틀린다면 7일간 밴됩니다.
systemctl restart fail2ban
서비스를 재시작해줍니다.

이제 우리가 설정한 config가 반영됐습니다.
현재 block상태를 알고 싶다면
sudo fail2ban-client status sshd
sshd에 대한 정보를 볼 수 있습니다.

차단된 IP 풀어주기 (2022-09-12 추가)
추석 보내고 나니 서버 비밀번호를 까먹어서 밴 됐습니다.
sudo fail2ban-client set sshd unbanip <IP 주소>
만약 실수로 밴 됐다면 unbanip 명령어로 풀어주면 됩니다.
끝
라즈베리 파이에 대해 보안설정을 마쳤습니다. 나중에 서버나 포트 포워딩 같이 공개된 환경에서 사용할 일이 많다면 보안설정은 필수라고 생각합니다. 작업하는 게 귀찮긴 하지만 해킹되는 것보다 나으니까요..
참고
18. 라즈베리 파이 보안 설정
라즈베리 파이에 있어서 보안은 중요합니다. 보안에 신경 쓰지 않는 것은, 해커가 당신의 허가 없이 라즈베리 파이를 사용하도록 열어두는 것과 같습니다. 어느 수준의 보안이 ...
wikidocs.net
cron - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전.
ko.wikipedia.org
라즈베리파이 방화벽 설치 및 세팅
데비안 계열(유부투, 라즈비안)의 기본 방화벽은 ufw 입니다. 방화벽 설정은 포트 또는 아이피 단위로 허용, 거부를 설정 할 수 있습니다. 라즈베리 파이에 패키지 관리자 apt-get로 ufw 방화벽을 설
erider.co.kr
라즈베리파이 fail2ban 설치하여 외부 접근 시도 막기(보안 강화)
라즈베리파이를 포트포워딩 하여 외부 인터넷으로 노출해두신 분들이라면 내 서버로 어마어마한 접근 시도들이 있는걸 로그로 보실 수 있습니다. (특히 포트가 잘 알려진 22, 80, 443과 같은 포트
lance.tistory.com
'라즈베리파이' 카테고리의 다른 글
파이 한글 깨짐 해결 및 입력기 설치 (0) | 2022.11.18 |
---|---|
[docker] 포트 포워딩 설정하기 (1) | 2022.10.26 |
[docker]라즈베리 파이에 도커 설치하기 (1) | 2022.10.25 |
[docker]kotlin + SpringBoot를 Docker Hub에 올리기(feat.FCM) (0) | 2022.10.20 |
라즈베리 파이4 설치 및 초기설정 (0) | 2022.09.01 |