Taeyoung Kim

Cloud & Platform

리눅스 네트워크 및 보안 실습

리눅스 네트워크 및 보안 실습 학습 내용을 정리한 백필 노트입니다.

이 글은 2025년 학습 기록을 블로그 형식으로 정리한 백필 노트입니다.

1. WSL2 네트워크 포트 포워딩 설정

설정 절차:

  1. WSL에서 서버 실행: sudo service nginx start, sudo service ssh start 등으로 WSL 내부에서 서버를 실행합니다.

  2. WSL IP 확인: WSL 터미널에서 ip addr show eth0 또는 ip addr | grep inet 명령어로 WSL의 내부 IP 주소(예: 172.29.xxx.xxx)를 확인합니다. 이 IP는 재부팅 시 변경될 수 있습니다.

  3. Windows에서 포트 포워딩: 관리자 권한으로 PowerShell을 열고, 외부 요청을 WSL IP로 전달하도록 설정합니다.PowerShell

    `# 형식: netsh interface portproxy add v4tov4 listenport=[외부 포트] listenaddress=0.0.0.0 connectport=[내부 포트] connectaddress=[WSL IP]

    예시 (HTTP: 80번 포트)

    netsh interface portproxy add v4tov4 listenport=80 listenaddress=0.0.0.0 connectport=80 connectaddress=172.29.205.121

    예시 (SSH: 22번 포트)

    netsh interface portproxy add v4tov4 listenport=22 listenaddress=0.0.0.0 connectport=22 connectaddress=172.29.205.121`

  4. Windows 방화벽 규칙 추가: 관리자 권한으로 PowerShell에서 외부 접근을 허용할 포트를 엽니다.PowerShell

    `# 예시 (HTTP: 80번 포트) New-NetFirewallRule -DisplayName "WSL 80 Port" -Direction Inbound -LocalPort 80 -Protocol TCP -Action Allow

    예시 (SSH: 22번 포트)

    New-NetFirewallRule -DisplayName "WSL 22 Port" -Direction Inbound -LocalPort 22 -Protocol TCP -Action Allow`

  5. 테스트: 외부 장치에서 Windows PC의 IP 주소로 접속을 시도합니다. (예: curl http://<Windows_IP>, ssh user@<Windows_IP>)

포트 포워딩 관리:

  • 설정 확인: netsh interface portproxy show all
  • 설정 삭제: netsh interface portproxy delete v4tov4 listenport=[포트번호] listenaddress=0.0.0.0
  • 전체 초기화: Remove-Item -Path "HKLM:\\SYSTEM\\CurrentControlSet\\Services\\PortProxy\\v4tov4\\tcp" -Recurse 후 재부팅

2. 리눅스 기초 실습 요약

챕터 1: 네트워크 구성 확인 실습

  • 목표: 내 컴퓨터의 네트워크 설정(IP 주소, 인터페이스)을 확인하고 기본적인 도메인-IP 관계를 이해합니다.
  • 핵심 개념:
    • IP 주소: 네트워크상 컴퓨터의 고유 주소.
    • 네트워크 인터페이스: 네트워크 연결 통로 (예: eth0 - 유선, wlan0 - 무선).
    • /etc/hosts 파일: 도메인과 IP를 수동으로 매핑하는 로컬 전화번호부.
  • 주요 명령어:
    • whoami: 현재 사용자 확인.
    • ip addr / ifconfig: IP 주소 및 네트워크 인터페이스 정보 확인.
    • ip link show up: 활성화된 인터페이스 목록 확인.
    • cat /etc/hosts: hosts 파일 내용 보기.
    • sudo nano /etc/hosts: hosts 파일 수정 (관리자 권한 필요).
    • ip route show: 기본 게이트웨이(라우터) 정보 등 네트워크 경로 확인.

챕터 2: 네트워크 연결성 테스트 실습

  • 목표: 기본 도구를 사용하여 특정 웹사이트까지의 네트워크 연결 상태와 경로를 진단합니다.
  • 핵심 개념:
    • IP 주소: 컴퓨터가 이해하는 숫자 주소.
    • 도메인 이름: 사람이 기억하기 쉬운 문자 주소.
  • 주요 명령어:
    • ping [도메인/IP]: 대상과의 연결 상태 및 응답 시간 확인.
    • traceroute [도메인/IP] (Linux/macOS) / tracert (Windows): 목적지까지의 네트워크 경로 추적.
    • nslookup [도메인] / dig [도메인]: 도메인 이름에 해당하는 IP 주소 조회 (DNS 쿼리).

챕터 3: 네트워크 모니터링 도구 실습

  • 목표: 내 컴퓨터의 활성 네트워크 연결과 트래픽을 실시간으로 감시하는 방법을 배웁니다.
  • 핵심 개념:
    • 포트: 서비스 구분을 위한 번호 (예: HTTP-80, SSH-22).
    • 연결: 두 컴퓨터 간의 통신 통로.
    • 패킷: 데이터를 잘게 나눈 조각.
    • 트래픽: 네트워크를 오가는 데이터의 흐름.
  • 주요 명령어:
    • netstat -antp: 활성화된 TCP 연결, 대기 포트 및 관련 프로그램 정보 확인 (관리자 권한 필요).
    • ss -antp: netstat과 유사하지만 더 빠르고 효율적인 소켓 상태 확인 도구.
    • sudo tcpdump -i [인터페이스]: 지정한 네트워크 인터페이스를 오가는 패킷을 실시간으로 캡처 (필터링 가능).
    • sudo iptraf-ng: 텍스트 기반의 종합적인 실시간 네트워크 트래픽 모니터링 도구.

챕터 4: SSH 서버 설정 실습

  • 목표: 리눅스에 원격 접속을 위한 SSH 서버를 설치하고 보안 설정을 강화합니다.
  • 핵심 개념:
    • SSH (Secure Shell): 암호화된 안전한 원격 접속 프로토콜.
    • 서버/클라이언트: 서비스를 제공하는 쪽(서버)과 요청하는 쪽(클라이언트).
  • 설정 절차:
    1. sudo apt install openssh-server: SSH 서버 설치.
    2. systemctl status ssh: 서비스 상태 확인 (active (running)이면 정상).
    3. sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak: 설정 파일 백업.
    4. sudo nano /etc/ssh/sshd_config: 설정 파일 수정.
      • Port 2222: 기본 포트(22)를 다른 번호로 변경하여 보안 강화.
      • PermitRootLogin no: root 계정의 직접 접속 차단.
    5. sudo systemctl restart ssh: 변경된 설정을 적용하기 위해 서비스 재시작.
    6. ssh [사용자명]@[서버 IP] -p [변경한 포트]: 접속 테스트.

챕터 5: SSH 클라이언트 및 키 관리 실습

  • 목표: 비밀번호 대신 안전한 SSH 키를 생성하여 원격 서버에 접속하고 파일을 전송합니다.
  • 핵심 개념:
    • SSH 키 (공개키/개인키): 비밀번호를 대체하는 한 쌍의 암호화된 파일.
      • 개인키 (id_rsa): 나만 보관하는 비밀 열쇠. 절대 공유 금지.
      • 공개키 (id_rsa.pub): 접속할 서버에 등록하는 자물쇠.
  • 주요 명령어:
    • ssh-keygen: SSH 키 쌍(공개키/개인키) 생성.
    • ssh-copy-id [사용자명]@[서버 IP]: 내 공개키를 원격 서버의 ~/.ssh/authorized_keys 파일에 자동으로 복사 및 등록.
    • ssh [사용자명]@[서버 IP]: 키를 사용하여 원격 접속.
    • scp [파일명] [사용자명]@[서버 IP]:[경로]: SSH를 통해 안전하게 파일 복사.
  • 로그인 문제 해결: 키 로그인 실패 시 서버에서 다음 권한을 확인.
    • chmod 755 ~
    • chmod 700 ~/.ssh
    • chmod 600 ~/.ssh/authorized_keys

챕터 6: 방화벽 설정 실습 (UFW)

  • 목표: UFW(Uncomplicated Firewall)를 사용하여 리눅스 서버의 방화벽을 설정하고 불필요한 접근을 차단합니다.
  • 핵심 개념:
    • 방화벽: 네트워크 트래픽을 규칙에 따라 허용/차단하는 보안 시스템.
  • 주요 명령어:
    • sudo ufw status: 현재 방화벽 상태 확인.
    • sudo ufw enable: 방화벽 활성화.
    • sudo ufw default deny incoming: 외부에서 들어오는 연결을 기본적으로 차단.
    • sudo ufw default allow outgoing: 내부에서 나가는 연결은 기본적으로 허용.
    • sudo ufw allow [서비스/포트]: 특정 서비스(예: ssh, http)나 포트(예: 8080/tcp) 허용.
    • sudo ufw deny [포트]: 특정 포트 차단.
    • sudo ufw status numbered: 규칙 목록을 번호와 함께 보기.
    • sudo ufw delete [번호]: 특정 번호의 규칙 삭제.
    • sudo ufw reset: 모든 설정을 초기화.

챕터 7: 파일 보안 및 암호화 실습

  • 목표: 파일의 변조 여부를 확인하고, 중요한 파일을 암호화하며, 시스템 보안 로그를 확인하는 방법을 배웁니다.
  • 핵심 개념:
    • 암호화: 파일 내용을 비밀번호나 키를 이용해 알아볼 수 없게 변경.
    • 해싱/체크섬: 파일 고유의 '지문'을 생성하여 파일이 변조되지 않았는지(무결성) 검증.
    • 시스템 로그: 시스템에서 발생하는 이벤트를 기록한 파일.
  • 주요 명령어:
    • md5sum [파일명] / sha256sum [파일명]: 파일의 체크섬(해시 값) 계산.
    • gpg -c [파일명]: 비밀번호를 사용하여 파일 암호화 (결과: [파일명].gpg).
    • gpg [암호화된 파일명]: 암호화된 파일 복호화.
    • cd /var/log: 시스템 로그 파일이 저장된 디렉터리로 이동.
    • sudo less auth.log: 보안 관련 로그(로그인 성공/실패 등) 확인.