🖥리눅스 서버 구축
원격에서 전속하는 Telnet 서버와 원결에서 보안으로 접속하는 SSH 서버 구축하면서 SSH 연결을 이요한 SFTP, HTTPS등과 SSH의 특성을 이용한 PSSH, PSCP와 같은 연결도 알아본다. 또 파일을 전송하는 FTP서버와 이름풀이를 하는 DNS서버, 그리고 Apache 웹 서버와 Ngin-X 서버, Linux머신 끼리 파일을 송수신하는 NFS 서버, Linux와 Windows머신끼리 파일을 송수신하는 Samba 서버, 그리고 Mail 서버와 Proxy서버, 가상화를 지원하는 KVM, IP주소등을 자동으로 배포해주는 DHCP 서버등을 알아보자
보통 어느서버 서비스를 실행시킬 때에는
- 해당 서비스 프로그램 패키지와 필요한 모듈 설치
- 필요하면 해당 서비스의 각종 구성파일 변경
- 방화벽 설정과 SELinux 설정 변경
- 사용자 접근제한 등 부가적인 설정 추가나 변경
- 해당 서비스 실행 및 실행 확인
- 클라이언트 사용자의 접속
- 로그파일 저장, 시스템 모니터링 등 관리작업 수행이 이뤄진다.
📌 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 명령어 사용
파일에 적어주기
- yum -y install iptables-services해주고
- 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해주고 저장한다. - service iptables reload && service iptables restart 하고
- iptables -nL --line-numbers해서 설정을 확인한다.
명령어로 설정하기
- iptables -l INPUT 2 -p tcp -m state --state New -m tcp --dport 23 -j ACCEPT해주고
- service iptables reload && service iptables restart 해준다.
- 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의 주요 역할
- 내부 호스트가 외부 도메인 접속 가능하도록 지원
- www.naver.com에 접속하려는 내부 사용자가 210.89.164.90을 얻을 수 있도록 도움
- 외부에서 내부 도메인 접속 가능하도록 지원
- 외부 사용자가 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 |