[root@bastion ~]# echo "alias vi='vim'" >> ~/.bashrc
# 'vi' 명령어를 'vim' 명령어로 대체하는 alias를 현재 사용자의 .bashrc 파일에 추가합니다.
[root@bastion ~]# echo "alias vi='vim'" >> /home/user1/.bashrc
# 같은 alias를 user1 사용자의 .bashrc 파일에 추가합니다.
[root@bastion ~]# source ~/.bashrc
# 현재 사용자의 .bashrc 파일을 적용하여 새로운 alias를 즉시 활성화합니다.
[root@bastion ~]# cat /etc/sudoers | grep wheel
# /etc/sudoers 파일에서 'wheel' 그룹에 대한 설정을 확인합니다.
# %wheel ALL=(ALL) ALL: wheel 그룹의 사용자들이 모든 명령을 실행할 수 있도록 허용합니다.
[root@bastion ~]# echo "user1 ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
# user1 사용자에게 sudo를 사용할 때 비밀번호를 묻지 않도록 설정을 추가합니다.
[root@bastion ~]# cat /etc/sudoers | grep NOPASSWD
# /etc/sudoers 파일에서 NOPASSWD 설정을 확인합니다.
# 'user1 ALL=(ALL) NOPASSWD: ALL'이 추가된 것을 확인할 수 있습니다.
[root@bastion ~]# exit
# root 사용자에서 로그아웃하여 user1 사용자로 전환합니다.
logout
# 현재 세션을 종료하고 로그아웃된 상태입니다.
[user1@bastion ~]$ mkdir ~/.ssh && chmod 700 ~/.ssh
# user1 사용자의 홈 디렉토리에 .ssh 디렉토리를 생성하고 해당 디렉토리의 권한을 700으로 설정합니다.
# 700 권한은 해당 디렉토리의 소유자만 접근할 수 있도록 합니다.
[user1@bastion ~]$ ssh-keygen -q -N "" -f lab0312.pem
# SSH 키 쌍을 생성합니다.
# -q: 조용한 모드로, 출력 메시지를 최소화합니다.
# -N "": 패스프레이즈 없이 키를 생성합니다.
# -f lab0312.pem: 생성할 키 파일의 이름을 lab0312.pem으로 지정합니다.
[user1@bastion ~]$ cat lab0312.pem.pub >> ~/.ssh/authorized_keys
# 공개 키(lab0312.pem.pub)를 user1 사용자의 .ssh/authorized_keys 파일에 추가합니다.
# 이로써 이 공개 키를 사용하는 클라이언트가 user1 사용자로 로그인할 수 있게 됩니다.
[user1@bastion ~]$ chmod 600 ~/.ssh/authorized_keys
# .ssh/authorized_keys 파일의 권한을 600으로 설정하여, 해당 파일의 소유자만 읽고 쓸 수 있도록 합니다.
# 보안상 권한을 적절히 설정하는 것이 중요합니다.
[user1@bastion ~]$ sudo vi /etc/ssh/sshd_config
# 'sshd_config' 파일을 수정하여 SSH 서버의 설정을 변경합니다.
# SSH 로그인에서 비밀번호 인증을 비활성화하려는 목적으로 해당 파일을 엽니다.
# (이후에 비밀번호 인증을 비활성화하는 설정을 합니다.)
71 PasswordAuthentication no
# SSH에서 비밀번호 인증을 비활성화합니다.
# 비밀번호 대신 키 기반 인증을 사용하려면 이 항목을 "no"로 설정해야 합니다.
[user1@bastion ~]$ sudo systemctl restart sshd
# SSH 서비스(sshd)를 재시작하여 설정 변경 사항을 적용합니다.
# 새로운 설정이 적용되도록 SSH 서버를 재시작합니다.
[user1@bastion ~]$ sudo systemctl enable sshd
# SSH 서비스를 시스템 부팅 시 자동으로 시작되도록 설정합니다.
# 이 명령은 SSH가 시스템이 부팅될 때마다 자동으로 시작되도록 합니다.
[user1@bastion ~]$ sudo systemctl disable firewalld --now
# firewalld 서비스를 즉시 중지하고, 시스템 부팅 시 자동으로 시작되지 않도록 설정합니다.
# 이 명령은 방화벽을 비활성화하여 SSH 접속에 방해가 없도록 합니다.
[user1@bastion ~]$ sudo setenforce 0
# SELinux(보안 강화 리눅스)의 모드를 **비활성화**합니다.
# setenforce 0은 SELinux의 enforcing 모드를 permissive 모드로 변경합니다.
# 이는 SELinux의 보안 정책을 완화하여 제약을 없앱니다.
[user1@bastion ~]$ sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# SELinux 설정 파일을 수정하여 SELINUX를 완전히 **비활성화**하도록 변경합니다.
# SELINUX=enforcing을 SELINUX=disabled로 바꿔서 시스템을 재부팅 후 SELinux를 완전히 비활성화할 수 있게 합니다.
[user1@bastion ~]$ sudo cat /etc/selinux/config | grep ^SELINUX=
# SELinux 설정 파일에서 SELINUX 설정 값을 확인합니다.
# `grep ^SELINUX=` 명령을 사용하여 SELINUX 항목만 필터링해 출력합니다.
SELINUX=disabled
# SELinux가 비활성화된 상태임을 확인하는 출력입니다.
# 이전에 설정한 내용대로 SELinux가 비활성화되어 있음을 확인합니다.
# [hostname 변경하기]
[root@rocky3 ~]# hostnamectl set-hostname rocky3
[root@rocky3 ~]# vi /etc/hostname
rocky3
# [IP주소 변경하기]
[root@rocky3 ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens160
# [변경된 내용 적용하기]
[root@rocky3 network-scripts]# systemctl restart NetworkManager
[root@rocky3 network-scripts]# ifconfig ens160 down
[root@rocky3 network-scripts]# ifconfig ens160 up
# [IP주소 확인하기]
[root@rocky3 network-scripts]# ip addr show
[root@rocky3 network-scripts]# ifconfig
[root@rocky3 network-scripts]# ip a
[root@rocky3 network-scripts]# hostname -I
# [Default Gateway, IP주소 확인하기]
[root@rocky3 ~]# ip route
R1# config t # 전역 구성 모드로 진입
R1(config)# int f0/0 # FastEthernet0/0 인터페이스를 설정하려고 진입
R1(config-if)# mac-address 9859.7ac1.**** # 인터페이스에 MAC 주소를 수동으로 설정 (윈도우 컴퓨터의 Wi-Fi MAC 주소)
R1(config-if)# ip add dhcp # FastEthernet0/0 인터페이스에 DHCP를 통해 IP 주소를 할당받도록 설정
R1(config-if)# no sh # FastEthernet0/0 인터페이스를 활성화 (no shutdown)
R1(config-if)# int f0/1 # FastEthernet1/0 인터페이스를 설정하려고 진입
R1(config-if)# ip add 10.10.10.1 255.255.255.252 # FastEthernet1/0 인터페이스에 수동으로 IP 주소 설정 (10.10.10.1/30 서브넷)
R1(config-if)# no sh # FastEthernet1/0 인터페이스를 활성화
R1(config-if)# int f1/0 # FastEthernet0/1 인터페이스를 설정하려고 진입
R1(config-if)# ip add 172.16.1.3 255.255.255.0 # FastEthernet0/1 인터페이스에 수동으로 IP 주소 설정 (172.16.1.3/24 서브넷)
R1(config-if)# no sh # FastEthernet0/1 인터페이스를 활성화
R1(config-if)# do show ip int br # 인터페이스 상태 확인 (인터페이스 및 IP 주소, 상태 정보)
Interface IP-Address OK? Method Status Protocol
FastEthernet0/0 192.168.X.Y YES DHCP up up
FastEthernet0/1 172.16.1.3 YES manual up up
FastEthernet1/0 10.10.10.1 YES manual up up
R2# config t # 전역 구성 모드로 진입
R2(config)# int f0/0 # FastEthernet0/0 인터페이스를 설정하려고 진입
R2(config-if)# ip add 10.10.10.2 255.255.255.252 # FastEthernet0/0 인터페이스에 수동으로 IP 주소 설정 (10.10.10.2/30 서브넷)
R2(config-if)# no sh # FastEthernet0/0 인터페이스를 활성화
R2(config-if)# int f0/1 # FastEthernet0/1 인터페이스를 설정하려고 진입
R2(config-if)# ip add 172.16.2.3 255.255.255.0 # FastEthernet0/1 인터페이스에 수동으로 IP 주소 설정 (172.16.2.3/24 서브넷)
R2(config-if)# no sh # FastEthernet0/1 인터페이스를 활성화
R2(config-if)# do show ip int br # 인터페이스 상태 확인 (인터페이스 및 IP 주소, 상태 정보)
Interface IP-Address OK? Method Status Protocol
FastEthernet0/0 10.10.10.2 YES manual up up
FastEthernet0/1 172.16.2.3 YES manual up up
R1(config-if)# ip route 172.16.2.0 255.255.255.0 10.10.10.2 # 172.16.2.0/24 네트워크로 가는 경로를 10.10.10.2를 통해 설정
R1(config)# # 설정 완료 후 전역 구성 모드로 돌아옴
R1(config)# do show ip route # 라우팅 테이블을 확인
출력 내용:
Gateway of last resort is 192.168.0.1 to network 0.0.0.0
172.16.0.0/24 is subnetted, 2 subnets
C 172.16.1.0 is directly connected, FastEthernet0/1 # 172.16.1.0/24 네트워크는 FastEthernet0/1에 연결됨
S 172.16.2.0 [1/0] via 10.10.10.2 # 172.16.2.0/24 네트워크는 10.10.10.2를 통해 라우팅됨
10.0.0.0/30 is subnetted, 1 subnets
C 10.10.10.0 is directly connected, FastEthernet1/0 # 10.10.10.0/30 네트워크는 FastEthernet1/0에 연결됨
S* 0.0.0.0/0 [254/0] via 192.168.0.1 # 기본 경로는 192.168.0.1을 통해 설정됨 (인터넷으로 나가는 경로)
C 192.168.0.0/22 is directly connected, FastEthernet0/0 # 192.168.0.0/22 네트워크는 FastEthernet0/0에 연결됨
R2(config-if)# ip route 0.0.0.0 0.0.0.0 10.10.10.1 # 기본 경로를 10.10.10.1을 통해 설정
R2(config)# # 설정 완료 후 전역 구성 모드로 돌아옴
R2(config)# do show ip route # 라우팅 테이블을 확인
출력 내용:
Gateway of last resort is 10.10.10.1 to network 0.0.0.0
172.16.0.0/24 is subnetted, 1 subnets
C 172.16.2.0 is directly connected, FastEthernet0/1 # 172.16.2.0/24 네트워크는 FastEthernet0/1에 연결됨
10.0.0.0/30 is subnetted, 1 subnets
C 10.10.10.0 is directly connected, FastEthernet0/0 # 10.10.10.0/30 네트워크는 FastEthernet0/0에 연결됨
S* 0.0.0.0/0 [1/0] via 10.10.10.1 # 기본 경로는 10.10.10.1을 통해 설정됨
⇒ bastion, lb ↔ web1, web2 간에는 통신이 가능해야 합니다.
172.16.1.0/24, 172.16.2.0/24 에 있는 호스트(서버)들은 R1 의 fa0/0 에 입력된 공인주소 1개를 이용하여 인터넷을 사용할 수 있어야 합니다.
R1(config)# access-list 12 permit 172.16.1.0 0.0.0.255
! ACL 12를 정의하고, 172.16.1.0/24 네트워크를 허용합니다.
R1(config)# access-list 12 permit 172.16.2.0 0.0.0.255
! ACL 12에 172.16.2.0/24 네트워크를 추가로 허용합니다.
R1(config)# ip nat inside source list 12 int fa0/0 overload
! NAT 설정: ACL 12에 정의된 IP 주소 범위(172.16.1.0/24, 172.16.2.0/24)를
! fa0/0 인터페이스를 통해 외부로 NAT 변환하고, 오버로드를 사용하여 여러 호스트가 하나의 공인 IP를 공유하도록 설정합니다.
R1(config)# int f0/0
R1(config-if)# ip nat outside
! fa0/0 인터페이스를 외부(NAT outside)로 설정합니다. 이 인터페이스는 외부 네트워크와 연결됩니다.
R1(config-if)# int f1/0
R1(config-if)# ip nat inside
! f1/0 인터페이스를 내부(NAT inside)로 설정합니다. 이 인터페이스는 내부 네트워크와 연결됩니다.
R1(config-if)# int f0/1
R1(config-if)# ip nat inside
! f0/1 인터페이스를 내부(NAT inside)로 설정합니다. 또 다른 내부 네트워크 연결을 위해 설정합니다.
R1(config)# ip nat inside source static tcp 172.16.1.101 22 int f0/0 22022
외부 사용자가 공인 IP 주소의 80 포트로 접속하면 로드밸런서에 연결되고, 실제 웹 서비스는 Web1과 Web2에서 제공되도록 설정합니다. 로드밸런서에 대한 접속만 외부에서 가능하도록 Static PAT를 구성합니다.
R1(config)# ip nat inside source static tcp 172.16.1.102 80 int f0/0 8888
! 172.16.1.102 (로드밸런서 IP) 의 80번 포트를 외부에서 8888번 포트로 접근할 수 있도록 설정
! 이 설정은 외부 사용자가 공인 IP의 8888 포트로 접속하면 로드밸런서(172.16.1.102)의 80 포트로 전달됩니다.
로드밸런서에서 HAProxy를 사용하여 웹 서버(Web1과 Web2)로 트래픽을 분배하는 설정입니다. HTTP 프로토콜을 사용하여 round-robin 방식으로 트래픽을 분배하고, 로드밸런서에서의 상태 페이지는 /haproxy?stats로 확인 가능합니다.
[user1@lb ~]$ sudo dnf -y install haproxy
! HAProxy를 설치합니다.
[user1@lb ~]$ sudo vi /etc/haproxy/haproxy.cfg
! HAProxy 설정 파일을 엽니다. 기존 내용을 모두 지우고 새로운 설정을 추가합니다.
global # HAProxy 시스템에 대한 설정값
log /dev/log local0 # 로그를 local0으로 출력
log /dev/log local1 notice # 로그를 local1로 출력
chroot /var/lib/haproxy # HAProxy의 chroot 디렉토리 설정
stats timeout 30s # 상태 페이지에 대한 타임아웃 설정
user haproxy # HAProxy가 실행될 사용자 설정
group haproxy # HAProxy가 실행될 그룹 설정
daemon # HAProxy를 데몬 모드로 실행
defaults
log global # 로깅을 global 설정에 맞게 적용
mode http # HTTP 모드로 로드밸런싱
option httplog # HTTP 요청에 대한 로그 설정
option dontlognull # null 요청을 로그에 기록하지 않음
timeout connect 5s # 서버 연결 타임아웃 5초
timeout client 1m # 클라이언트와의 연결 타임아웃 1분
timeout server 1m # 서버와의 연결 타임아웃 1분
frontend http_front
bind *:80 # 80번 포트에서 들어오는 트래픽을 수신
stats uri /haproxy?stats # 로드밸런서 상태 페이지는 /haproxy?stats 경로에서 확인
default_backend http_back # 기본 백엔드 설정
backend http_back
balance roundrobin # 라운드로빈 방식으로 트래픽 분배
server server_name1 172.16.2.101:8000 check # Web1 (172.16.2.101:8000)
server server_name2 172.16.2.102:8000 check # Web2 (172.16.2.102:8000)
[user1@lb ~]$ sudo systemctl stop haproxy
! HAProxy 서비스를 중지합니다.
[user1@lb ~]$ sudo systemctl start haproxy
! HAProxy 서비스를 시작합니다.
Web1 서버에서 httpd를 설치하고, 웹 페이지를 구성한 후 서비스를 시작하는 과정입니다. 이 두 웹 서버는 HAProxy에 의해 로드밸런싱되어 트래픽을 분배받게 됩니다. Web1은 "WEB1", Web2는 "WEB2"라는 텍스트를 각자의 index.html 페이지에서 제공할 것입니다.
[user1@web1 ~]$ sudo dnf -y install httpd
! Apache HTTP 서버(httpd)를 설치합니다.
[user1@web1 ~]$ sudo vi /etc/httpd/conf/httpd.conf
! Apache 서버의 기본 설정 파일을 엽니다. Listen 8000 으로 변경합니다.
! 이 단계는 웹 서버 설정을 변경할 때 필요한 경우에 수정할 수 있습니다.
[user1@web1 ~]$ echo "WEB1" | sudo tee /var/www/html/index.html
! 웹 페이지의 기본 내용으로 "WEB1" 텍스트를 작성하여 `/var/www/html/index.html`에 저장합니다.
! 이 페이지는 Web1 서버에 접속했을 때 보여집니다.
[user1@web1 ~]$ sudo systemctl restart httpd
! httpd 서비스를 다시 시작하여 변경 사항을 적용합니다.
! 이제 Web1 서버에서 웹 페이지가 제공됩니다.
[user1@web2 ~]$ sudo dnf -y install httpd
! Web2 서버에 Apache HTTP 서버(httpd)를 설치합니다.
[user1@web2 ~]$ sudo vi /etc/httpd/conf/httpd.conf
! Apache 서버의 기본 설정 파일을 엽니다. Listen 8000 으로 변경합니다.
[user1@web2 ~]$ echo "WEB2" | sudo tee /var/www/html/index.html
! 웹 페이지의 기본 내용으로 "WEB2" 텍스트를 작성하여 `/var/www/html/index.html`에 저장합니다.
! 이 페이지는 Web2 서버에 접속했을 때 보여집니다.
[user1@web2 ~]$ sudo systemctl restart httpd
! httpd 서비스를 다시 시작하여 변경 사항을 적용합니다.
! 이제 Web2 서버에서 웹 페이지가 제공됩니다.
확인 > http://192.168.2.92:8888
아래는 .ssh/config 파일에 대한 주석입니다.
# 'bastion' 호스트 설정
Host bastion
User user1 # 'bastion'에 접속할 사용자 계정은 'user1'입니다.
Hostname 192.168.2.92 # 'bastion' 호스트의 실제 IP 주소 (여기서는 f0/0의 공인 주소)
IdentityFile ~/lab0312.pem # 접속 시 사용할 개인 키 파일 지정 (여기서는 lab0312.pem 파일)
StrictHostKeyChecking no # 호스트 키 확인을 하지 않음 (보안을 조금 희생하지만 자동화에 유리)
# 'lb' 호스트 설정 (로드밸런서)
Host lb
User user1 # 'lb'에 접속할 사용자 계정은 'user1'입니다.
Hostname 172.16.1.102 # 'lb' 호스트의 실제 IP 주소
IdentityFile ~/lab0312.pem # 접속 시 사용할 개인 키 파일 지정
StrictHostKeyChecking no # 호스트 키 확인을 하지 않음
ProxyCommand ssh bastion -W %h:%p # 'bastion'을 통해 'lb'에 접속하도록 설정 (중간 서버를 통한 접속)
# 'web1' 호스트 설정
Host web1
User user1 # 'web1'에 접속할 사용자 계정은 'user1'입니다.
Hostname 172.16.2.101 # 'web1' 호스트의 실제 IP 주소
IdentityFile ~/lab0312.pem # 접속 시 사용할 개인 키 파일 지정
StrictHostKeyChecking no # 호스트 키 확인을 하지 않음
ProxyCommand ssh bastion -W %h:%p # 'bastion'을 통해 'web1'에 접속하도록 설정
# 'web2' 호스트 설정
Host web2
User user1 # 'web2'에 접속할 사용자 계정은 'user1'입니다.
Hostname 172.16.2.102 # 'web2' 호스트의 실제 IP 주소
IdentityFile ~/lab0312.pem # 접속 시 사용할 개인 키 파일 지정
StrictHostKeyChecking no # 호스트 키 확인을 하지 않음
ProxyCommand ssh bastion -W %h:%p # 'bastion'을 통해 'web2'에 접속하도록 설정
25.03.18. AWS Security Essentials (0) | 2025.03.18 |
---|---|
25.03.17. AWS Cloud Practitioner Essentials (0) | 2025.03.17 |
Kubernetes에서 Docker 지원 중단 → 컨테이너 관리 도구 (0) | 2025.03.14 |
25.03.14. AWS 구축 (0) | 2025.03.14 |
25.03.13. DHCP 서버 구성, DHCP Relay Agent 설정 및 동적 PAT 구성 예시 (0) | 2025.03.13 |