본문 바로가기
Linux

Linux Server Build

by Mostlove 2025. 3. 24.
728x90
반응형

🖥리눅스 서버 구축

원격에서 전속하는 Telnet 서버와 원결에서 보안으로 접속하는 SSH 서버 구축하면서 SSH 연결을 이요한 SFTP, HTTPS등과 SSH의 특성을 이용한 PSSH, PSCP와 같은 연결도 알아본다. 또 파일을 전송하는 FTP서버와 이름풀이를 하는 DNS서버, 그리고 Apache 웹 서버와 Ngin-X 서버, Linux머신 끼리 파일을 송수신하는 NFS 서버, Linux와 Windows머신끼리 파일을 송수신하는 Samba 서버, 그리고 Mail 서버와 Proxy서버, 가상화를 지원하는 KVM, IP주소등을 자동으로 배포해주는 DHCP 서버등을 알아보자

보통 어느서버 서비스를 실행시킬 때에는 

  1. 해당 서비스 프로그램 패키지와 필요한 모듈 설치
  2. 필요하면 해당 서비스의 각종 구성파일 변경
  3. 방화벽 설정과 SELinux 설정 변경
  4. 사용자 접근제한 등 부가적인 설정 추가나 변경 
  5. 해당 서비스 실행 및 실행 확인
  6. 클라이언트 사용자의 접속
  7. 로그파일 저장, 시스템 모니터링 등 관리작업 수행이 이뤄진다.

📌 Telnet 서버

**Telnet(Server & Client)**는 네트워크를 통해 원격 시스템에 접속하여 명령어를 입력하고 조작할 수 있도록 하는 프로토콜 및 서비스이다.
기본적으로 TCP 23번 포트를 사용하며, 원격 서버의 터미널 환경에 직접 접속하여 제어할 수 있다.


📌 Telnet 서버를 사용하는 이유

원격 서버 관리: 다른 컴퓨터(서버)에 로그인하여 관리 작업 수행 가능
장비 설정 및 유지보수: 네트워크 장비(라우터, 스위치) 설정 시 사용
네트워크 테스트 및 디버깅: 특정 포트가 열려 있는지 확인 가능
시스템 모니터링: 원격으로 서버 상태 점검 가능

⚠️ 하지만! 보안이 취약하다.
👉 Telnet은 암호화되지 않은 평문(Plaintext)으로 데이터를 주고받기 때문에 해킹 위험이 높다.
👉 **SSH(Secure Shell)**을 사용하여 보안을 강화하는 것이 일반적이다.


📌 Telnet 서버 예제

🔹 1. CentOS에서 Telnet 서버 설치 및 실행

# Telnet 서버 패키지 설치
sudo yum install -y telnet-server xinetd

# Telnet 서비스 활성화
sudo systemctl enable xinetd
sudo systemctl start xinetd

# 방화벽에서 23번 포트 열기
sudo firewall-cmd --permanent --add-port=23/tcp
sudo firewall-cmd --reload

# Telnet 서비스 시작
sudo systemctl enable telnet.socket
sudo systemctl start telnet.socket

👉 이제 다른 장치에서 이 서버에 접속 가능!


🔹 2. Windows에서 Telnet 클라이언트로 접속

telnet [서버 IP] 23

예시:

telnet 192.168.1.100 23

👉 로그인 화면이 나오면 사용자 계정으로 로그인하여 원격으로 명령어 실행 가능!


🔹 3. Linux에서 Telnet 클라이언트로 접속

telnet 192.168.1.100

접속 후 실행 예시

login: root
Password: *****
[root@server ~]# ls
[root@server ~]# exit

📌 Telnet을 이용한 네트워크 테스트

🔹 특정 서버의 포트가 열려 있는지 확인

telnet google.com 80

출력 결과

Trying 142.250.186.206...
Connected to google.com.
Escape character is '^]'.

👉 포트가 열려 있으면 연결 성공!
👉 닫혀 있으면 Connection refused 에러 발생.


📌 Telnet 사용 시 주의할 점

⚠️ 보안 취약점
✔ 패스워드와 데이터가 평문(Plaintext)으로 전송됨
✔ 해커가 네트워크를 가로채면 쉽게 계정 정보를 탈취할 수 있음
✔ 인터넷 환경에서 사용하지 말 것 (로컬 네트워크에서만 사용 추천)
보안이 필요한 경우 SSH(Secure Shell) 사용


📌 SSH(Secure Shell)

**SSH(Secure Shell)**은 네트워크를 통해 원격 시스템에 안전하게 접속할 수 있도록 해주는 보안 프로토콜이다.
Telnet과 비슷한 기능을 하지만 모든 데이터가 암호화되어 보안성이 뛰어나다.

💡 SSH의 주요 특징
보안 강화: 패스워드와 데이터가 암호화되어 해킹 위험 감소
파일 전송 지원: SCP, SFTP를 이용하여 파일을 안전하게 전송 가능
포트 포워딩: 원격 서버의 특정 포트를 로컬에서 사용 가능
인증 방식 다양: 패스워드, 공개 키 인증(Public Key Authentication) 지원

🔹 기본적으로 TCP 22번 포트를 사용하며, 필요에 따라 변경 가능하다.


📌 SSH를 사용하는 이유

안전한 원격 접속: 서버 관리자가 원격에서 보안이 강화된 접속 가능
보안이 중요한 데이터 전송: 암호화된 통신으로 해킹 방지
파일 전송 가능: SSH 기반의 SCP, SFTP를 사용하여 파일 송수신
포트 포워딩: 로컬에서 원격 서버의 서비스에 안전하게 접속

⚠️ Telnet과 달리 SSH는 모든 데이터를 암호화하여 전송하므로 보안성이 뛰어나며, 인터넷 환경에서도 안전하게 사용 가능하다.


📌 SSH 서버 설정 (Linux)

🔹 1. SSH 서버 설치 (CentOS, Ubuntu)

✅ CentOS

sudo yum install -y openssh-server

✅ Ubuntu

sudo apt update
sudo apt install -y openssh-server

🔹 2. SSH 서비스 실행 및 부팅 시 자동 시작

sudo systemctl enable sshd
sudo systemctl start sshd

🔹 3. 방화벽에서 22번 포트 열기

✅ CentOS

sudo firewall-cmd --permanent --add-port=22/tcp
sudo firewall-cmd --reload

✅ Ubuntu (UFW 사용)

sudo ufw allow 22/tcp
sudo ufw reload

🔹 4. SSH 서버 상태 확인

sudo systemctl status sshd

"active (running)" 이라고 나오면 정상 작동 중!


📌 SSH 클라이언트 사용법

🔹 1. Linux/Mac에서 SSH 접속

ssh [사용자이름]@[서버IP]

예시:

ssh root@192.168.1.100

👉 패스워드를 입력하면 원격 서버에 접속 완료!

🔹 2. Windows에서 SSH 접속

Windows에서는 기본적으로 PowerShell 또는 cmd에서 SSH 명령어를 사용할 수 있다.

ssh root@192.168.1.100

또는 PuTTY 같은 SSH 클라이언트를 이용해 접속할 수도 있다.


📌 SSH를 이용한 파일 전송

🔹 1. SCP(Secure Copy) 사용법

scp [파일명] [사용자이름]@[서버IP]:[경로]

예시 (로컬에서 서버로 파일 전송)

scp test.txt user@192.168.1.100:/home/user/

예시 (서버에서 로컬로 파일 가져오기)

scp user@192.168.1.100:/home/user/test.txt .

🔹 2. SFTP 사용법

sftp user@192.168.1.100

연결 후:

put localfile.txt  # 로컬에서 서버로 전송
get remotefile.txt # 서버에서 로컬로 가져오기
bye  # 종료

📌 SSH 보안 설정 (권장)

SSH를 사용할 때 보안을 강화하기 위해 다음 설정을 적용하는 것이 좋다.

🔹 1. 루트 계정 SSH 접속 차단

SSH 설정 파일을 열어 수정한다.

sudo nano /etc/ssh/sshd_config

다음 설정을 변경:

PermitRootLogin no

저장 후 SSH 서비스 재시작:

sudo systemctl restart sshd

🔹 2. SSH 포트 변경

기본 포트(22번)를 변경하여 보안 강화:

Port 2200

포트 변경 후 방화벽에서 새 포트를 열어줘야 한다.

sudo firewall-cmd --permanent --add-port=2200/tcp
sudo firewall-cmd --reload

이제 SSH 접속 시 다음과 같이 새로운 포트를 사용한다.

ssh -p 2200 user@192.168.1.100

🔹 3. 공개 키 인증 사용

SSH 비밀번호 로그인 대신 **공개 키 인증(Public Key Authentication)**을 사용하면 보안이 더욱 강화된다.

✅ 공개 키 생성 (클라이언트)

ssh-keygen -t rsa

생성된 키를 서버에 복사:

ssh-copy-id user@192.168.1.100

이제 SSH 접속 시 패스워드 입력 없이 자동 로그인된다.


📌 Telnet vs SSH 비교

항목 Telnet SSH

보안성 암호화 없음 (취약) ⚠️ 암호화 O (보안 강력) 🔒
포트 번호 23번 22번
데이터 보호 평문(Plaintext) 전송 암호화된 전송
파일 전송 지원 ✅ (SCP, SFTP 지원)
사용 추천 여부 ❌ (비추천) ✅ (강력 추천)

📌 결론

SSH는 원격 서버에 안전하게 접속할 수 있는 가장 중요한 프로토콜
보안이 중요한 환경에서는 반드시 SSH를 사용해야 함
파일 전송(SCP, SFTP), 포트 포워딩 등 다양한 기능 활용 가능
보안을 강화하기 위해 포트 변경, 루트 로그인 차단, 공개 키 인증 적용 추천


**iptables 명령어 사용

파일에 적어주기

  1. yum -y install iptables-services해주고
  2. nano /etc/sysconfig/iptables-config한뒤,
    - A INPUT -p tcp -m state ~ --dport22 ~아래에
    - A INPUT -p tcp -m state --state NEW -m tcp --dport33 -j ACCEPT해주고 저장한다.
  3. service iptables reload && service iptables restart 하고 
  4. iptables -nL --line-numbers해서 설정을 확인한다.

명령어로 설정하기

  1. iptables -l INPUT 2 -p tcp -m state --state New -m tcp --dport 23 -j ACCEPT해주고
  2. service iptables reload && service iptables restart 해준다.
  3. iptables -nL --line-numbers해서 설정을 확인한다.

📌 PSSH(Parallel SSH)

**PSSH(Parallel SSH)**는 여러 개의 원격 서버에 동시에 SSH 명령을 실행할 수 있도록 해주는 도구다.
여러 서버를 동시에 관리할 때 유용하며, 반복적인 작업을 자동화할 때 많이 사용된다.

🔹 PSSH의 주요 특징

  • 병렬 SSH 실행: 여러 서버에서 동시에 명령 실행 가능
  • 다중 서버 파일 전송 지원
  • 서버별 개별 출력 저장 가능
  • 자동화 스크립트와 연계 가능

💡 PSSH는 일반 SSH와 다르게 여러 서버에 동시에 명령을 보낼 수 있는 기능이 핵심이다!


📌 PSSH 설치 방법

✅ Ubuntu / Debian

sudo apt update
sudo apt install -y pssh

✅ CentOS / RHEL

sudo yum install -y epel-release
sudo yum install -y pssh

✅ MacOS

brew install pssh

📌 PSSH 사용법

🔹 1. 여러 서버 리스트 파일 만들기

먼저, 접속할 서버 목록을 파일로 만들어야 한다.

nano servers.txt

다음과 같이 서버 목록을 작성한다.

user1@192.168.1.100
user2@192.168.1.101
user3@192.168.1.102

👉 각 줄마다 하나의 서버를 입력하며, user@IP 형식으로 작성!


📌 PSSH 기본 명령어

🔹 1. 모든 서버에 동일한 명령 실행

pssh -h servers.txt -l root -A -i "uptime"

각 서버에 SSH 접속 후 uptime 명령 실행
✅ -h servers.txt: 서버 목록 파일 지정
✅ -l root: 접속할 사용자 계정 지정
✅ -A: 패스워드 입력을 위한 옵션
✅ -i: 결과를 표준 출력으로 보여줌

📌 예제 실행 결과

[1] 19:10:01 [SUCCESS] user1@192.168.1.100
 19:10:01 up 2 days, 5:12, 1 user, load average: 0.10, 0.20, 0.30
[2] 19:10:01 [SUCCESS] user2@192.168.1.101
 19:10:01 up 1 day, 4:55, 2 users, load average: 0.15, 0.25, 0.35

🔹 2. 모든 서버에서 특정 파일 실행

예를 들어, 여러 서버에서 /root/script.sh 스크립트를 실행하고 싶다면:

pssh -h servers.txt -l root -A -i "bash /root/script.sh"

👉 모든 서버에서 /root/script.sh 실행됨


🔹 3. 모든 서버에 파일 전송

PSSH 자체적으로 파일 전송 기능은 없지만, pscp(Parallel SCP)로 가능하다.

pscp -h servers.txt -l root -A localfile.txt /remote/path/

✅ localfile.txt를 모든 서버의 /remote/path/ 경로로 전송

📌 예제

pscp -h servers.txt -l root -A backup.tar.gz /home/user/

👉 모든 서버에 backup.tar.gz 파일을 /home/user/ 경로로 복사


🔹 4. 실행 결과를 로그 파일로 저장

pssh -h servers.txt -l root -A -o /var/log/pssh_output "df -h"

✅ /var/log/pssh_output/ 디렉토리에 서버별 실행 결과가 저장됨
✅ 각 서버별로 개별 로그 파일 생성됨


📌 PSSH의 장점과 단점

장점 단점

✅ 여러 서버에서 동시에 명령 실행 가능 ❌ SSH 키 없이 사용하면 패스워드 입력이 번거로움
✅ 다중 서버 파일 전송 지원 (pscp) ❌ GUI 지원 없음 (CLI에서만 사용 가능)
✅ 서버별 개별 출력 저장 가능 ❌ 일부 서버에서 오류 발생 시 개별 처리 필요

📌 결론

PSSH는 여러 서버를 동시에 관리해야 할 때 필수적인 도구!
대량의 서버에서 반복 작업을 수행할 때 유용
파일 전송(Pscp), 자동화 스크립트 등과 함께 사용하면 강력한 효과

📌 FTP(File Transfer Protocol)란?

**FTP(File Transfer Protocol)**는 네트워크를 통해 파일을 전송하는 프로토콜이다.
클라이언트(사용자) ↔ 서버 간 파일을 업로드/다운로드할 때 사용
✅ 21번 포트를 기본적으로 사용
사용자 인증이 필요 (익명 접근도 가능하지만 보안에 취약)
제어 채널(명령어)과 데이터 채널(파일 전송)로 분리됨


📌 FTP의 특징

특징 설명

📂 파일 전송 기능 원격 서버에서 파일 업로드/다운로드 가능
🔐 사용자 인증 지원 ID/PW로 접속하거나 익명(Anonymous) 접속 가능
빠른 전송 속도 네트워크 속도에 따라 파일 전송 가능
🔀 액티브/패시브 모드 지원 방화벽 설정에 따라 모드 선택 가능

📌 FTP 동작 방식

FTP는 "클라이언트-서버" 모델을 기반으로 동작하며, 제어 채널과 데이터 채널을 사용한다.

1️⃣ 클라이언트가 FTP 서버에 접속
2️⃣ 제어 채널을 통해 명령어 전송 (예: 로그인, 디렉토리 변경)
3️⃣ 데이터 채널을 통해 파일 전송 (다운로드/업로드)

FTP는 두 가지 모드가 있다.

  • 액티브(Active) 모드: 서버가 클라이언트의 포트로 데이터를 전송
  • 패시브(Passive) 모드: 클라이언트가 서버의 포트로 데이터를 가져옴 (방화벽 환경에서 유리)

📌 FTP 설치 및 사용 방법

🔹 1. FTP 서버 설치

Ubuntu/Debian:

sudo apt update
sudo apt install vsftpd -y

CentOS/RHEL:

sudo yum install vsftpd -y

✅ 설치 후 서비스 시작:

sudo systemctl start vsftpd
sudo systemctl enable vsftpd

✅ 방화벽 열기:

sudo firewall-cmd --add-service=ftp --permanent
sudo firewall-cmd --reload

🔹 2. FTP 서버 설정

FTP 설정 파일을 수정하여 접근을 제한하거나 보안을 강화할 수 있다.

sudo nano /etc/vsftpd.conf

기본적인 설정 변경

anonymous_enable=NO     # 익명 로그인 비활성화
local_enable=YES        # 로컬 사용자 로그인 허용
write_enable=YES        # 파일 업로드 허용
chroot_local_user=YES   # 사용자 홈 디렉토리 제한

✅ 변경 후 서비스 재시작:

sudo systemctl restart vsftpd

🔹 3. FTP 클라이언트 사용법

CLI(명령어)로 접속

ftp [서버 IP 또는 도메인]

예제:

ftp 192.168.1.100

👉 ID/PW 입력 후 접속 성공

파일 다운로드

get 파일이름

파일 업로드

put 파일이름

디렉토리 이동

cd 디렉토리명

FTP 종료

bye

📌 FTP GUI 클라이언트 (FileZilla) 사용

1️⃣ FileZilla 다운로드: https://filezilla-project.org/
2️⃣ 서버 정보 입력

  • 호스트: FTP 서버 주소 (예: 192.168.1.100)
  • 사용자명: FTP 계정
  • 비밀번호: FTP 비밀번호
  • 포트: 21 3️⃣ 연결 후 파일 업로드/다운로드

📌 FTP vs SFTP 차이점

항목 FTP SFTP

🔐 보안 암호화 없음 SSH 기반 암호화 (보안 강력)
🚀 속도 빠름 상대적으로 느림
🔄 포트 21번 포트 22번 포트
🔧 설정 별도 FTP 서버 필요 SSH 활성화만 하면 됨

보안이 중요한 환경에서는 SFTP(SSH 기반 FTP) 사용 추천!


📌 DNS와 로컬 DNS 서버(BIND) 

1️⃣ DNS란?

**DNS(Domain Name System)**는 도메인 이름을 IP 주소로 변환하는 역할을 하는 시스템이다.

  • 예시: www.naver.com → 210.89.164.90
  • 사람이 기억하기 쉬운 도메인을 컴퓨터가 이해할 수 있는 IP 주소로 변환

DNS의 주요 역할

  1. 내부 호스트가 외부 도메인 접속 가능하도록 지원
    • www.naver.com에 접속하려는 내부 사용자가 210.89.164.90을 얻을 수 있도록 도움
  2. 외부에서 내부 도메인 접속 가능하도록 지원
    • 외부 사용자가 www.kahn.edu에 접속하면 192.168.100.100을 반환

DNS 네임 레졸루션(이름풀이) 순서
1️⃣ /etc/hosts (또는 Windows의 C:\Windows\System32\drivers\etc\hosts)
2️⃣ 로컬 DNS 서버 (조직 내 DNS 서버)
3️⃣ 글로벌 DNS 서버 (인터넷 상의 루트 네임 서버)

🚨 해킹 위험: DNS 스푸핑

  • 로컬 DNS 서버 또는 /etc/hosts 파일을 조작하면 사용자를 가짜 사이트로 유도 가능
  • 예시: /etc/hosts에 www.naver.com 192.168.1.50을 추가하면 사용자가 www.naver.com을 입력해도 해커 서버로 접속됨 → 피싱 공격 가능

2️⃣ 로컬 DNS 서버(BIND)란?

**BIND (Berkeley Internet Name Domain)**는 리눅스에서 가장 널리 사용되는 DNS 서버 소프트웨어다.
내부 네트워크에서 DNS 서비스를 제공
정방향(도메인 → IP) 및 역방향(IP → 도메인) 조회 가능
캐싱 및 권한(Authoritative) 네임 서버로 동작 가능

DNS 서버가 수행하는 주요 기능

  • A 레코드: 도메인을 IP 주소로 변환 (www.kahn.edu → 192.168.100.100)
  • PTR 레코드: IP 주소를 도메인으로 변환 (192.168.100.100 → www.kahn.edu)
  • NS 레코드: 해당 도메인의 DNS 서버 지정
  • MX 레코드: 이메일 서버 지정 (mail.kahn.edu)
  • SOA(Server Of Authority): 도메인의 공인 DNS 서버 정보

DNS 서버에서 사용되는 프로토콜 및 포트

역할 프로토콜 포트

DNS 서버끼리 영역전송(Zone Transfer) TCP 53
클라이언트가 DNS 서버에 요청(Query) UDP 53

🚨 보안 위험: DNS 영역 전송(Zone Transfer) 취약점

  • 예전에는 누구나 영역 전송을 요청 가능했으나, 현재는 특정 IP만 허용하여 보안 강화
  • 해커가 영역 전송을 통해 조직의 도메인 정보를 모두 얻어낼 수도 있음

3️⃣ BIND 설정 예시

📌 예제: kahn.edu 도메인을 로컬 DNS 서버로 설정

🔹 1. BIND 설치

📌 Ubuntu/Debian

sudo apt update
sudo apt install bind9 -y

📌 CentOS/RHEL

sudo yum install bind bind-utils -y

🔹 2. 정방향 조회 설정 (도메인 → IP 변환)

📌 파일 경로: /var/named/forward.kahn.edu.zone

$TTL 86400
@   IN  SOA     ns1.kahn.edu. root.kahn.edu. (
        2024032401  ; Serial
        3600        ; Refresh
        1800        ; Retry
        604800      ; Expire
        86400 )     ; Minimum TTL
;
@   IN  NS      ns1.kahn.edu.
ns1 IN  A       192.168.100.1
www IN  A       192.168.100.100
ftp IN  A       192.168.100.200

🔹 3. 역방향 조회 설정 (IP → 도메인 변환)

📌 파일 경로: /var/named/reverse.kahn.edu.zone

$TTL 86400
@   IN  SOA     ns1.kahn.edu. root.kahn.edu. (
        2024032401  ; Serial
        3600        ; Refresh
        1800        ; Retry
        604800      ; Expire
        86400 )     ; Minimum TTL
;
@   IN  NS      ns1.kahn.edu.
100 IN  PTR     www.kahn.edu.
200 IN  PTR     ftp.kahn.edu.

4️⃣ 설정 적용 및 테스트

🔹 1. BIND 설정 파일 검증

named-checkconf
named-checkzone kahn.edu /var/named/forward.kahn.edu.zone
named-checkzone 100.168.192.in-addr.arpa /var/named/reverse.kahn.edu.zone

🔹 2. BIND 서비스 재시작

sudo systemctl restart named
sudo systemctl enable named

🔹 3. 클라이언트에서 DNS 테스트

정방향 조회

nslookup www.kahn.edu 192.168.100.1

역방향 조회

nslookup 192.168.100.100 192.168.100.1

 

반응형

'Linux' 카테고리의 다른 글

NFS & Samba  (0) 2025.03.25
Web Server  (1) 2025.03.25
쉘 스크립트 기초 개념 및 활용 정리  (0) 2025.03.21
쉘 스크립트 완벽 정리: 개념부터 활용  (0) 2025.03.20
Puppet  (0) 2025.03.20