SSH, SCP, firewalld, iptables 작동방식, 사용법

2025. 4. 23. 19:00·Cryptology

 

[리눅스 네트워크 보안] SSH, SCP, Firewalld, iptables에 대해

-원격 접속을 위한 SSH 

-파일 복사를 위한 SCP

-리눅스 방화벽 도구인 firewalld 

-구체적인 정책을 짤 수 있는 iptables

 

(실습 환경은 Rocky Linux를 기준)


1. SSH: 안전한 원격 접속 서비스 🔐

SSH란 무엇인가?

SSH(Secure Shell)는 암호화된 원격 접속 서비스이다. 예를 들어, Telnet과 비슷한 서비스지만, 모든 통신을 암호화하여 보안성이 매우 높다. 기본적으로 TCP 22번 포트를 사용하여 원격으로 서버에 접속한다. 💻

 

 

SSH Server 환경 설정파일(sshd_config)

vim /etc/ssh/sshd_config

 

SSH 포트 변경

 

21번 줄 주석처리 빼고 포트 숫자 변경하기

루트 허용하기 (연습용으로 실제 업무에서는 권장하지 않음)

#PermitRootLogin prohibit-password 
PermitRootLogin yes

 

SSH Server 실행

systemctl restart sshd

SSH 접속 과정

  1. TCP 연결: 먼저, 3-way handshake를 통해 클라이언트와 서버가 연결된다.
  2. 프로토콜 메시지 교환: 클라이언트와 서버가 protocol 메시지를 교환하고, 서로 지원하는 SSH 버전을 제안한다. 보통 SSHv2 버전을 사용한다.
  3. Key exchange: key exchange init 메시지를 통해, 클라이언트와 서버가 앞으로 사용할 암호화 알고리즘, 해시 알고리즘 등을 협상한다.
  4. Elliptic Curve Diffie-Hellman (ECDH):
    1. 클라이언트가 공개키를 전송한다.
    2. 서버는 클라이언트의 공개키와 자신의 비공개키를 이용해 대칭키를 생성하고, 서버의 공개키와 전자 서명을 함께 클라이언트에 전송한다.
  5. 서버 검증: 클라이언트는 서버의 공개키로 서명을 검증하고, 대칭키와 그 해시 값을 확인해 무결성을 검증한다.
  6. 암호화 통신 준비 완료: 클라이언트와 서버는 서로 new key 메시지를 통해 암호화된 통신을 준비한다.

Diffie-Hellman

Diffie-Hellman은 서로 다른 위치에 있는 두 당사자가 같은 대칭키를 동시에 생성할 수 있도록 도와주는 하이브리드 암호화 방식이다. 이 과정에서 공개키 암호화와 대칭키 암호화를 결합해 보안을 강화한다.


2. SCP: SSH를 이용한 원격 파일 전송 🗂️📡

SCP (Secure Copy)

SCP는 SSH를 기반으로 한 원격 파일 복사 서비스이다. 이 서비스를 사용하면 클라이언트와 서버 간에 파일을 안전하게 복사할 수 있다. SSH로 통신하면서 파일을 복사하기 때문에, 전송되는 데이터도 암호화된다.

SCP 사용 방법

  • 클라이언트에서 서버로 파일 복사: 클라이언트의 /root/test.txt 파일을 서버의 /tmp/test.txt로 복사하는 명령.
scp /root/test.txt root@192.168.50.50:/tmp/test.txt
  • 서버에서 클라이언트로 파일 복사: 서버의 /root/hello.txt 파일을 클라이언트의 /tmp/hello.txt로 복사하는 명령.
scp root@192.168.50.50:/root/hello.txt /tmp/hello.txt

포트 지정하여 SCP 실행:

scp -P 10022 /var/log/messages root@192.168.50.50:/tmp/put
  • 여기서 -P 옵션을 사용해 포트 10022로 SSH 접속 후, 클라이언트의 /var/log/messages 파일을 서버의 /tmp/put으로 복사하는 예시이다.

복사된 파일 확인:

  • 서버에서:
ls -l /tmp | grep put
  • 클라이언트에서:
ls -l /tmp | grep get
  1. 서버의 /tmp/put 파일을 클라이언트의 /tmp/get으로 복사:
scp -P 10022 root@192.168.50.50:/tmp/put /tmp/get
  1. 클라이언트에서 파일 복사 여부를 확인:
ls -l /tmp | grep get

3. 리눅스 방화벽: firewalld 🔥

방화벽이란?

방화벽은 외부의 위협으로부터 내부 네트워크 시스템을 보호하기 위한 보안 장비(또는 소프트웨어)이다. 리눅스에서 기본적으로 사용되는 방화벽 솔루션은 firewalld이다.

 

firewalld 기본 명령어

  • 방화벽 실행:
systemctl start firewalld
  • 상태 확인:
systemctl status firewalld
  • 부팅 시 자동 실행 설정:
systemctl enable firewalld
  • 버전 확인:
firewall-cmd --version

firewalld의 Zone

firewalld는 zone을 기반으로 네트워크 정책을 구성한다. 각각의 zone은 특정 정책 그룹을 저장하는 역할을 한다.

  • 기본 존 확인:
firewall-cmd --get-default-zone
  • 새 존 생성:
firewall-cmd --permanent --new-zone=test
  • 새 존 삭제:
firewall-cmd --permanent --delete-zone=test

서비스, 포트, IP 설정

  • 서비스 허용:
firewall-cmd --permanent --zone=public --add-service=telnet
  • 포트 허용:
firewall-cmd --permanent --zone=public --add-port=23/tcp
  • IP 허용:
firewall-cmd --permanent --zone=public --add-source=192.168.50.100

변경 사항 적용:

firewall-cmd --reload

Target 설정

  • Target은 특정 존에서 처리할 기본 정책을 지정한다. 예를 들어:
    • ACCEPT: 모든 트래픽을 허용
    • DROP: 모든 트래픽을 차단 (응답이 없다)
    • REJECT: 모든 트래픽을 차단 (응답이 있다)
    • default: DROP과 비슷하지만 사용하지 않는 것이 좋다.
  • Target 설정 변경:
firewall-cmd --permanent --zone=public --set-target=DROP
  • target 설정 확인:
firewall-cmd --permanent --zone=public --get-target

4. iptables: 전통적인 리눅스 방화벽 🛡️

iptables 개념

iptables는 리눅스에서 패킷 필터링을 위해 사용되는 방화벽 도구로, table과 chain을 기반으로 방화벽 정책을 설정하는 방식이다. table은 정책을 저장하는 "그릇"이고, chain은 데이터를 처리하는 규칙이다.

-firewalld 대신 iptables를 사용하는 이유 ⚙️: iptables는 firewalld보다 훨씬 세밀한 제어를 제공. iptables는 저수준 패킷 필터링을 지원하며, 대규모 트래픽을 다루는 환경에서 성능을 최적화하는 데 유리.

 

iptables의 주요 Table과 Chain

1. Table 종류:

  • filter: 기본적인 패킷 필터링 정책을 설정한다. (허용/차단)
  • nat (Network Address Translation): 네트워크 주소 변환을 위한 테이블. 외부에서 내부로 들어오는 패킷의 주소를 변환하거나, 내부에서 외부로 나가는 패킷의 출발지 주소를 변환할 때 사용.
  • mangle: 패킷의 헤더 값을 수정하는 데 사용된다. 예를 들어, TTL(Time to Live)을 변경하거나, 패킷의 특정 필드를 수정할 때 활용된다.

2. Chain 종류:

  • INPUT: 방화벽에 들어오는 패킷을 처리하는 규칙을 설정한다.
  • OUTPUT: 방화벽에서 나가는 패킷을 처리하는 규칙을 설정한다.
  • FORWARD: 방화벽을 지나가는 패킷을 처리하는 규칙을 설정한다. (즉, 방화벽을 통과하는 다른 네트워크 간의 트래픽)
  • PREROUTING: 패킷이 방화벽에 도달하자마자 처리되는 규칙을 설정한다. 주로 NAT 규칙에서 사용된다.
  • POSTROUTING: 패킷이 방화벽을 떠날 때 처리되는 규칙을 설정한다. 주로 NAT 규칙에서 사용된다.

동작 옵션 (Action/동작 설정)

iptables에서 동작 옵션은 어떤 작업을 할 것인지 지정하는 옵션이다. 이 동작은 기본적으로 패킷이 허용될지 차단될지를 결정한다.

  • -A (Append): 규칙을 추가하는 옵션이다. 기본적으로 규칙을 맨 끝에 추가한다.
  • -I (Insert): 규칙을 앞에 삽입하는 옵션이다. 주어진 위치에 원하는 규칙을 추가할 수 있다. (-I INPUT 1은 INPUT 체인의 첫 번째 위치에 규칙을 추가하는 것)
  • -D (Delete): 규칙을 삭제하는 옵션이다. 삭제하고자 하는 규칙의 순서를 지정해야 한다. (-D INPUT 2는 INPUT 체인의 두 번째 규칙을 삭제하는 것)
  • -F (Flush): 모든 규칙을 초기화하는 옵션이다. 즉, 테이블에 있는 모든 규칙을 삭제한다.
  • -L (List): 현재 설정된 규칙을 확인하는 옵션이다. (-L만 입력하면 기본적으로 filter 테이블의 모든 규칙이 나옴)
  • -P (Policy): 기본 정책을 설정하는 옵션이다. 기본 정책은 매칭되는 규칙이 없을 때의 행동을 정의한다. (-P INPUT DROP은 기본적으로 INPUT 체인에 대해 모든 트래픽을 차단하는 정책)

조건 설정

iptables에서 조건은 어떤 패킷에 대해 규칙을 적용할지 식별할 수 있는 요소들이다. 이를 통해 특정 패킷에만 규칙을 적용할 수 있다.

  • -p (protocol): 프로토콜을 지정한다. 예를 들어, TCP, UDP, ICMP 등을 지정할 수 있다.
  • -s (source): 출발지 IP 주소를 지정한다. (-s 192.168.50.100)
  • -d (destination): 목적지 IP 주소를 지정한다. (-d 192.168.50.200)
  • --sport (source port): 출발지 포트 번호를 지정한다. (--sport 22)
  • --dport (destination port): 목적지 포트 번호를 지정한다. (--dport 80)
  • -i (interface): 패킷이 들어오는 인터페이스를 지정한다. (-i eth0)
  • -o (interface): 패킷이 나가는 인터페이스를 지정한다. (-o eth0)

Target 종류 (패킷에 대해 어떤 동작을 할지 설정)

iptables에서 패킷이 특정 조건을 만족할 때 어떻게 처리할지 정의하는 부분이다. 주요 타겟은 다음과 같다:

  • ACCEPT: 패킷을 허용한다. 조건에 맞는 패킷을 네트워크로 전달한다.
  • DROP: 패킷을 차단한다. 차단된 패킷은 응답도 없이 그냥 버려진다.
  • REJECT: 패킷을 차단하지만, 차단된 패킷에 대해 응답을 보내서 거부했다는 사실을 알린다.
  • LOG: 패킷을 기록한다. 차단된 패킷이나 허용된 패킷을 로그로 남길 수 있다.
  • SNAT: 출발지 주소를 변경하는 NAT (Source NAT)
  • DNAT: 목적지 주소를 변경하는 NAT (Destination NAT)
  • MASQUERADE: 내부 네트워크에서 외부로 나가는 패킷의 출발지 IP 주소를 자동으로 변환하는 방식.

iptables 예시

이제 위의 내용을 바탕으로 실제 iptables 명령어를 작성해 보자.

1. 특정 출발지 IP에서 목적지 포트 23 (Telnet)으로 가는 트래픽 차단:

iptables -t filter -A FORWARD -p tcp --dport 23 -s 192.168.50.200 -d 10.10.10.1 -j DROP

2. 특정 출발지 IP에서 목적지 포트 80 (HTTP)으로 가는 트래픽 허용:

iptables -t filter -A FORWARD -p tcp --dport 80 -s 192.168.50.100 -d 10.10.10.1 -j ACCEPT

3. ICMP(핑) 패킷을 모두 차단:

iptables -t filter -A INPUT -p icmp -j DROP
iptables -t filter -A OUTPUT -p icmp -j DROP
iptables -t filter -A FORWARD -p icmp -j DROP

4. DNS 요청(포트 53)을 허용:

iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT

5. 모든 트래픽을 기본적으로 차단하고, HTTP와 HTTPS만 허용:

iptables -t filter -P INPUT DROP
iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT

 

6. IP 192.168.1.100으로부터의 접속 차단:

iptables -A INPUT -s 192.168.1.100 -j DROP

 

7. iptables 적용 후 확인

iptables -L

 


 

 

SSH와 SCP는 안전한 원격 접속과 파일 전송을 지원하고, firewalld와 iptables는 네트워크 트래픽을 필터링하여 시스템을 보호한다.

 

 

저작자표시 비영리 변경금지 (새창열림)

'Cryptology' 카테고리의 다른 글

리눅스 방화벽 및 서버 구축 실습 (vm 4개로 서로 통신, log기록설정 등 해보기)  (0) 2025.05.27
SSL - HTTPS, VSFTPS 구성해보기, 인증서 만들기  (0) 2025.04.30
MITM(Man-in-the-Middle 공격과 인증서  (0) 2025.04.25
암호화 - 단방향 암호(hash, MAC), 양방향 암호(대칭, 비대칭)  (0) 2025.04.23
암호학(Cryptology)이란? 요소, 과정, 종류  (0) 2025.04.22
'Cryptology' 카테고리의 다른 글
  • SSL - HTTPS, VSFTPS 구성해보기, 인증서 만들기
  • MITM(Man-in-the-Middle 공격과 인증서
  • 암호화 - 단방향 암호(hash, MAC), 양방향 암호(대칭, 비대칭)
  • 암호학(Cryptology)이란? 요소, 과정, 종류
햅삐root
햅삐root
happyroot 님의 블로그 입니다. IT 보안 정리💛
  • 햅삐root
    햅삐한 root
    햅삐root
  • 전체
    오늘
    어제
    • 전체보기 IT (123)
      • Linux (21)
      • Network (23)
      • packet tracer& GNS3 (10)
      • Cryptology (7)
      • WEB (16)
      • DB (16)
      • Hacking (28)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    sqlinjection
    injectionvector
    Hack
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
햅삐root
SSH, SCP, firewalld, iptables 작동방식, 사용법
상단으로

티스토리툴바