통합 실습 1 - 윈도우 서버(NAT 서버) + 리눅스 서버(HTTP, DNS, FTP) + SSH 접속
윈도우 서버 NAT 서버로 활용(SNAT, DNAT)해서 리눅스 서버들에 접속할 수 있도록 설정하고, 가상의 외부 인터넷에서 서비스를 접근할 수 있는지 확인하는 실습을 진행한다.
시나리오
SVR1 (Window 2022 서버) => NAT 서버
Ethernet0 (NIC)
IP : 192.168.1.110/24 GW : 192.168.1.2
외부 인터넷에서 모든 서버는 이 주소로 인식함.
Ethernet1 (NIC)
IP : 10.10.10.253/24
내부의 서버들이 외부와 통신할 때 사용하는 게이트웨이
리눅스 서버
CentOS8 => HTTP, FTP 서버
IP : 10.10.10.10/24 GW : 10.10.10.253
FTP
- ID : ftpuser PW : 1234
HTTP
- 접속하면 “Welcome minyeokue.gitblog => centos8”가 출력되도록 한다.
PuTTY를 통해 외부에서 SSH로 접근할 때 22000포트를 사용한다.
위의 사항들은 HTTP FTP 서버 구동 단계에서 진행한다.
CentOS7 => DNS 서버
IP : 10.10.10.20/24 GW : 10.10.10.253
웹 브라우저 주소창에 “www.minyeokue.gitblog”를 입력하면 접속할 수 있도록 한다.
최종적으로 SVR2라는 가상의 외부 IP에서 테스트를 진행하면서 실습을 마칠 것이다.
환경 구성
리눅스 서버 설정
CentOS8을 설정한다.
IP : 10.10.10.10/24 GW : 10.10.10.253 DNS : 8.8.8.8
서버 이름 : web-ftp
위의 사진들과 같이 설정한 뒤, nmcli con up [NIC 이름]
명령어를 통해 NIC를 재활성화해서 입력한 IP 정보들이 적용될 수 있도록 한다.
CentOS7을 설정한다.
IP : 10.10.10.20/24 GW : 10.10.10.253 DNS : 8.8.8.8
서버 이름 : dns
위에서 입력했듯이 hostnamectl set-hostname [변경하고자 하는 이름]
명령어를 입력해 서버의 이름을 바꾸고, nmtui
명령어를 입력해 위의 리스트와 같도록 설정한다.
현재 NAT 서버를 활성화하지 않았다. ping
명령어로는 내부 네트워크의 web-ftp 서버와는 통신이 가능하지만, 게이트웨이가 없고 외부 네트워크와 통신할 수 없다.
통신이 안되는 것이 정상적인 상태이고 기본 설정을 마쳤으니, 이제 윈도우 서버에서 진행한다.
윈도우 서버 설정
윈도우 서버 2022를 부팅하고 로그인하면 자동으로 실행되는 서버 관리자
의 화면이다.
강조된 로컬 서버를 클릭한다.
컴퓨터 이름은 SVR1이며, 현재 랜카드를 2개 장착한 상태이기 때문에, Ethernet0와 Ethernet1이 존재하고, IE 보안 강화 구성이 해제된 상태이다.
빨간 박스로 강조된 Ethernet0와 Ethernet1의 파란 글씨 부분을 클릭한다.
내부 게이트웨이 역할을 수행할 Ethernet1을 설정한다.
1 -> 2 -> 3 -> 4 -> 확인 -> 확인 -> 닫기 순으로 진행한다.
다시 서버 관리자로 돌아와서 다음의 강조된 부분을 주의한다.
관리 메뉴 -> 역할 및 기능 추가를 선택한다.
역할 및 기능 추가 마법사라는 창이 뜰 것인데, 다음 버튼을 누르고, 역할 기반 또는 기능 기반 설치가 체크되어 있는지 확인 후, 다음 버튼을 누른다.
역할 및 기능을 설치할 서버를 현재 서버 -> SVR1로 선택하고 다음 버튼을 클릭한다.
특수한 상황이 아니면 기본으로 선택되어 있다.
서버의 역할을 선택할 때 원격 액세스 체크 박스를 선택하고 다음 버튼을 클릭한다.
다음 버튼을 누르면 나오는 다음 단계에서는 아무것도 선택하지 않고 다음, 다음 버튼 연속으로 2번 누른다.
역할 서비스 선택에서 DirectAccess 및 VPN(RAS)와 라우팅을 선택하면 나오는 팝업창도 기능 추가 버튼을 누른 뒤, 다음 버튼을 누른다.
이제 웹 서버 역할(IIS) 단계일 때와 역할 서비스 단계에서 다음 버튼을 총 2번 누른다.
확인 단계에서 설치 버튼을 선택한다.
설치가 진행되고 프로그레스바가 가득 차서 완료되면 닫기 버튼을 누른다.
역할 및 기능 추가 마법사창을 닫고 나면 알림이 경고 표시가 나오게 된다. 시작 마법사 열기를 선택한다.
시작 마법사 열기를 누르면 잠시 뒤 Remote Access 구성창이 나오게 된다. 맨 아래의 VPN만 배포를 선택한다.
VPN만 배포를 선택하면 라우팅 및 원격 액세스창이 팝업된다. 해당 창에서 SVR1(로컬)을 오른쪽 마우스 클릭으로 눌러서 -> 라우팅 및 원격 액세스 구성 및 사용 메뉴를 선택한다.
라우팅 및 원격 액세스 구성 및 사용을 선택하면 라우팅 및 원격 액세스 서버 설치 마법사창이 팝업된다.
다음 버튼을 누른 뒤, NAT(네트워크 주소 변환) 라디오 버튼을 선택하고 다음 버튼을 누른다.
외부와 연결될 가상의 공인 IP를 가진 네트워크 인터페이스를 선택하고 다음 버튼을 누른다.
만약 어떠한 네트워크 인터페이스도 나오지 않는다면 다음 버튼을 누른 뒤, 나오는 단계에서 마침 버튼을 누르고 다시 SVR1(로컬)을 오른쪽 마우스 클릭하고 라우팅 및 원격 액세스 구성 및 사용 메뉴를 선택한다. -> 지금까지 진행한 과정을 빠트리지 않았다면, 위의 사진과 같게 나올 것이다.
기본 이름 및 주소 서비스 사용 라디오 버튼이 체크되어 있을 것이다. 다음 버튼을 선택한다.
주소 범위 할당 단계에서 윈도우-서버-설정에서 4번째 사진에서 진행했던 설정대로 진행할 것인지 나오게 된다. 다음 버튼을 선택하고, 마침 버튼을 누른다.
설정이 완료되고 SVR1(로컬)에 초록색 화살표가 위로 향하는 아이콘과 함께라면 활성화된 상태이다.
이제 리눅스 서버에 HTTP, FTP, DNS 서버를 구축할 수 있다.
리눅스 서버 HTTP, FTP 서버 구동
필요한 패키지를 설치하기 전에, 외부 인터넷과 통신이 가능한지 ping
명령어로 확인한다.
CentOS8에서 Win2022 NAT 서버를 통해 통신 가능
통신이 가능한지 확인했으니, yum -y install httpd vsftpd vim
명령어를 입력해 CentOS8에 웹 서버와 FTP 서버를 구축하기 위한 패키지들을 설치한다.
설치가 완료되면 echo 'Welcome minyeokue.gitblog => centos8' > /var/www/html/index.html
명령어를 입력해 리디렉션으로 기본 웹 페이지를 저장한다.
/var/www/html
은 HTTP 서비스의 기본 디렉토리이고 해당 디렉토리에 index.html이 없다면 CentOS8 기본 웹 페이지가 출력되게 된다.
/etc/httpd/conf/httpd.conf
에서 약 CentOS8기준 166번 줄에서 정의하고 있는 DirectoryIndex에서 값을 변경하면 기본 파일을 변경할 수 있다.
/etc/httpd/conf/httpd.conf 기본 html 파일 이름 설정
systemctl enable --now httpd
명령어를 입력해 아파치 웹 서버를 구동하면서 컴퓨터를 재부팅해도 웹 서비스 데몬이 실행될 수 있도록 한다.
이제 FTP 서버에 접속할 때 사용할 계정을 생성하자. useradd ftpuser
를 입력하고, 바로 이어서 password ftpuser
를 입력한다.
시나리오에서 설정했듯이 비밀번호는 “1234”로 한다.
systemctl enable --now vsftpd
명령어를 입력해 FTP 서버를 구동하면 CentOS8에서의 설정은 끝났다.
리눅스 DNS 서버 구성 및 구동
DNS 서버 구동을 위해 필요한 패키지를 다음 명령어를 입력해 설치한다.
1
2
3
4
5
6
7
8
9
# 패키지 설치
[root@dns ~]# yum -y install vim caching-nameserver
# ...
# ...
Complete!
# DNS 서버 설정 파일 수정
[root@dns ~]# vim /etc/named.conf
이어서 /etc/named.rfc1912.zones
를 수정한다.
화살표처럼 수정할 수 있도록 한다.
이제 /var/named
로 이동해서 기본 영역 파일을 권한과 함께 복사하도록 한다.
/var/named/minyeokue.gitblog.zone 수정
위와 같이 192.168.1.110으로 준 이유는 외부 인터넷에서 봤을 때 DNS 서버와 HTTP 서버가 192.168.1.110으로 SNAT 되었기 때문이다.
SNAT란 Source NAT의 줄임말로, 단순히 말해서 출발지의 IP를 변경하는 것이다. 공인 IP 주소의 목적지에서 다시 출발지로 응답을 받기 위해서 출발지 IP 주소가 필요한데, 공인 대역에서는 사설 대역으로의 경로를 알 수 없으므로 공인 IP 목적지로 서비스를 요청할 때 출발지에서는 사설 IP를 별도의 공인 IP로 NAT하는 것을 말한다.
이 과정까지 진행되었다면, 이제 방화벽 설정을 수정한다.
systemctl status firewalld
명령어를 입력해 리눅스 OS 방화벽 상태를 확인한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@dns ~]# systemctl status firewalld
# ...
# 활성화 상태 확인
# ...
# 방화벽 상태 확인
[root@dns ~]# firewall-cmd --list-all
# ...
# ...
# DNS 서비스 추가
[root@dns ~]# firewall-cmd --permanent --zone=public --add-service=dns
# ...
# ...
# 방화벽 변경 적용
[root@dns ~]# firewall-cmd --reload
NAT 서버 포트포워딩
DNAT는 Destination NAT의 줄임말로, 단순히 말해서 포트포워딩과 의미가 비슷하다. 공인 IP로 들어온 요청을 사설 IP에 구축된 목적지로 연결하기 위한 서비스이다.
윈도우 서버 설정의 마지막 부분으로 돌아가서 SVR1(로컬)을 확장 -> IPv4를 확장 -> NAT 더블 클릭 -> Ethernet0(공인 IP와 연결)을 오른쪽 마우스 클릭 -> 속성을 누른다.
Ethernet0 속성창에서 필요한 서비스는 FTP, HTTP, DNS인데 먼저 맨 위의 FTP 서버를 선택한다.
이어서 맨 아래 부분으로 스크롤을 내려서 웹 서버(HTTP)를 선택한다.
그리고 DNS 서버인데, DNS는 목록에 없기 때문에 우리가 추가해주도록 한다.
DNS 서버에 질의를 보낼 때 UDP를 사용하고, Zone Transfer나 512Byte를 초과하는 패킷을 보낼 때 TCP를 사용하기 때문에 TCP와 UDP 모두 추가해줘야 한다.
다음과 같이 진행한다.
총 4개의 포트포워딩을 마친 상태이다. 적용 혹은 확인 버튼을 누른다.
테스트
SVR2 -> IP : 192.168.1.120/24에서 테스트를 진행한다. 가상의 외부 인터넷에서 진행한다고 가정할 것이다.
PuTTY로 NAT 서버에 22000번 포트로 접속하면 CentOS8의 22번 포트와 연결시켜보겠다.
보안적으로는 CentOS8의 포트도 22000번으로 바꾸는 것이 좋다.
NAT 서버에서 포트포워딩을 진행한다.
CentOS8에서 SSH로 접속할 때 root 계정으로 접속할 수 없도록 해야하니 수정하도록 한다.
ssh 관련 설정 파일은 /etc/ssh/sshd_config
에서 수정한다.
vim /etc/ssh/sshd_config
명령어를 입력한다.
ssh 관련 설정을 변경했으니 systemctl restart sshd
를 입력하는 것을 잊지 않아야 한다.
이제 ssh 사용자를 위한 계정을 생성하자.
useradd sshuser
, passwd sshuser
명령어를 연달아 입력해서 생성하고 암호를 지정한다. 암호는 1234로 하겠다.
이제 PuTTY로 HostOS에서 접속해보자.
모든 테스트가 완료되었다.