키워드
: ufw, iptables, PermitRootLogin, sshd_config, key
완성아키텍처

지난 편에 SSH 접속까지 완료했지만,
지금 상태는 비밀번호만 알면 누구든 들어올 수 있는 구조.
→ 보안에 취약하다 !
때문에 3가지의 보안 강화 조치를 해보고자 한다
(1) UFW 방화벽 설정
(2) root 로그인 차단
(3) Key 기반 인증
1. UFW → 방화벽 설정
- UFW(Uncomplicated Firewall)
- 리눅스에서는
iptables를 이용하여 방화벽 설정을 할 수 있지만, 되게 복잡하다. - 이 iptables를 좀 더 쉽게 설정할 수 있도록 돕는 도구가
ufw
(간단한 방화벽 구성에는 문제가 없지만, 높은 수준에는 무리가 있다)
- 리눅스에서는
방화벽 전략은 두 가지를 고민했다.
A. 전 세계 22번 포트 개방
B. 우리집 네트워크 대역(LAN 대역)만 허용
당장 외부에 서비스를 배포한 것도 아니고,
아직은 같은 Wi-Fi 안에서만 쓸 거라 B로 결정
(A는 브루트포스 등 여러 공격 위험이 존재함.
나중에 포트포워딩으로 외부 접속 열 때 다루도록 하자)

# 우선 기본 정책으로 : 들어오는 건 전부 차단, 나가는 건 전부 허용
sudo ufw default deny incoming
sudo ufw default allow outgoing
# 포트관련해서는 IP 대역과 함께 allow해줌.
# 같은 네트워크 안의 접속까지는 일단 허용해주자
# sudo ufw allow 22
sudo ufw allow from 172.30.1.0/24 to any port 22 ✅
# sudo ufw allow from 172.30.1.66 to any port 22
→ 이제 LAN대역 밖에서의 SSH 접속 시도는 전부 차단된다.
2. PermitRootLogin no → root 직접 로그인 차단
이전에 실무에서는 root 로그인을 차단해두는 것이 표준이라 했는데, 의아했었다.
어차피 sudo로 root처럼 동작할 수 있는데 굳이?
→ 여기엔 두 가지 대표적인 이유가 있다.
(1) 추적이 가능하다.
- root로 접속시 누가 접속했는지 알 수가 없음. (나야? 해커야?)
- 다만 kim, park 등으로 접속 후 sudo 권한을 획득하여 사용하면 추적이 가능함. (누가, 언제, 무엇을)
(2) 공격 난이도가 올라간다.
- root는 모든 시스템에 존재하는 계정이므로 1순위로 대입해봄.
- root가 열려있다면, 계정명은 고민할 필요가 없이 pw만 대입해보면 됨.
- root가 막혀있다면, 계정명과 pw 모두 추적해야 함.
- /etc/ssh/sshd_config
- SSH서버(sshd)의 동작 방식을 정의하는 설정 파일
(어떤 계정의 접속 허용하고, 어떤 인증 방식 쓸지 등)


3. PW가 아닌 → Key 기반 인증으로 업그레이드
- 공개키 / 개인키
- Private Key : 열쇠, 내 맥북에 보관
- Public Key : 자물쇠, sshd에 등록
- sshd가 두 키를 비교하여 맞으면 로그인을 허용
- pw가 네트워크를 타지 않아서 안전함
- 실무에서는 이 키도 주기적으로 갱신한다고 함
- 당연히 개인키는 절대 외부에 노출되면 안됨.
Step 1. 맥북에서 키 쌍 생성
ssh-keygen -t ed25519 -C "daepark-macbook"
# -t ed25519 : 키 알고리즘 지정, 현재 가장 권장되는 방식. RSA보다 짧고 빠르고 안전.
# -C : 주석, 키에 대한 설명
Step 2. 갤북에 공개키 등록
ssh-copy-id daepark@172.30.1.9
# 갤북의 ~/.ssh/authorized_keys에 공개키가 등록이 됨
+ 추가로 sshd_config열어서 PasswordAuthentication no로 설정
→ PW로그인까지 차단
🤔 근데 내가 알던 SSH key접속이랑 다른데?
이전에 AWS나 NCP 등 클라우드를 쓸 때는
CSP에서 만들어준 키 쌍을 .pem파일로 다운로드하여 아래 처럼 접속했었음.
ssh -i {개인키경로} user@192.168.xx.xx
지금은 내가 직접 키 쌍을 생성한다.
생성한 개인키는 ~/.ssh/에 자동으로 저장되고, 공개키를 갤북에 직접 등록했으므로.
-i가 없더라도 ~/.ssh/를 자동으로 뒤져서 키를 찾아주기에 개인키 경로를 명시하지 않아도 된다!