AWS Cloud School 13기 44일차

Forever 김·2026년 3월 3일

AWS Cloud School

목록 보기
40/97

TIL

배운 내용

1. SSH (Secure SHell)

  • 원격 접속 프로토콜인 telnet(23)은 평문으로 메세지를 전송. SSH는 암호화를 통해 원격 접속하여 메세지를 송수신 하는 프로토콜
  • 22번 포트, tcp

ubuntu의 mint os를 사용하였다.

알아야할 개념
1. 인증 방식

  • ID/PW
  • 공개키 방식(키페어 사용)
  1. 키페어(Key pair)
  • Private Key(개인키)
  • Public Key(공개키)
  1. 암호화(AES)
  • 메세지를 어떻게 암호화 / 복호화 할지

명령어

sudo passwd root
# sudo : 관리자 권한으로 실행
# passwd : 계정암호 설정 명령

su root
# root 계정으로 로그인

ubuntu 계열에서는 apt가 패키지 관리자이다.

openssh-server(sshd)는 보통 root 로그인을 허용하지 않는다.

 vi /etc/ssh/sshd_config
 
 :set nu를 하고
 34번째 줄에
 #PermitRootLogin prohibit password -> PermitRootLogin yes로 변경

다시 접속하면 잘된다.


서버 방화벽 설정

  • 흔히 말하는 ‘well known’ 포트는 암묵적인 약속일뿐이지 꼭 반드시 해당 포트(L4,4계층)로 서비스를 제공해야 하는 것을 뜻하진 않는다. 즉, 내가 원하면 서비스(L7,7계층)의 포트를 변경할 수 도 있다. 즉, 포트는 일종의 통로 역할을 할 뿐이다.
[root@web-srv ~]# yum install -y httpd
# 웹서버 설치

[root@web-srv ~]# echo test > /var/www/html/index.html
# 인덱스 파일 생성

[root@web-srv ~]# systemctl enable --now httpd
# 서버 동작

[root@web-srv ~]# curl localhost
test
#웹서버는 기능적으로 잘동작함/ 외부에서 url을 통해 잘 동작함을 확인

[root@web-srv ~]# systemctl restart firewalld
[root@web-srv ~]# curl localhost
test
# 방화벽 이후에도 기능적으로는 문제가 없다 하지만 url을통해 접속은 불가하다.

내부에서 httpd라는 데몬이 동작을 하고 있고, 심지어 80번포트로 서비스(7계층)를 제공하도록 구성되어있지만, 방화벽을 활성화하면 외부에서는 80번 포트로 접근이 불가능하다. 방화벽에 의해 물리적인 포트(4계층)가 막히기 때문.

[root@web-srv ~]# firewall-cmd --list-all

public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens32
  sources: 
  services: dhcpv6-client ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

방화벽을 켜도 ssh 접속이 가능한 이유 = 방화벽에서 ssh라는 서비스(7계층)를 허용 해놓은 상태.

여기서 80번포트로 web서비스를 제공하고 싶으면 정책을 추가한다.

[root@web-srv ~]# firewall-cmd --permanent --add-port=80/tcp
# --permanent : 재부팅되어도 정책 유지.

[root@web-srv ~]# firewall-cmd --reload
# 변경사항 반영

[root@tomweb ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens32
  sources: 
  services: dhcpv6-client ssh
  ports: 80/tcp
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

다시 url을 통해 들어가면 접속이 잘된다.

[root@web-srv ~]# firewall-cmd --permanent --remove-port=80/tcp
# 정책 제거

[root@web-srv ~]# firewall-cmd --reload

FTP 방화벽 구성
20,21 tcp 포트를 사용한다.

[root@web-srv ~]# yum install -y vsftpd
# ftp 설치

[root@web-srv ~]# echo ftp-test > /var/ftp/test.txt
# 간단한 테스트파일을 ftp의 루트디렉토리에 생성.

[root@web-srv ~]# systemctl enable --now vsftpd

#방화벽이 동작중인 상태.

client를 통해 테스트
centos를 통해 vmnet8에두고, IP:211.183.3.110/24 로 설정

[root@client ~]# yum install -y ftp
# ftp 명령이 없는경우 설치
[root@client ~]# ftp 211.183.3.110
ftp: connect: No route to host
#방화벽으로 인해 접근 불가
[root@web-srv ~]# firewall-cmd --permanent --add-port=20/tcp
[root@web-srv ~]# firewall-cmd --permanent --add-port=21/tcp
[root@web-srv ~]# firewall-cmd --reload
# 20,21/tcp를 열고 설정 반영.
# 파일전송에 실패하는 이유? FTP의 경우는 20,21번 이외에 추가적으로 랜덤하게 포트를 할당해서 파일을 송수신한다. 이건 내가 어떤 포트가 열릴지 모르기때문에 어떤 포트를 열어야할지 모름.

# 이런 경우에는 port를 추가하는게 아니라 방화벽에 서비스를 등록
[root@web-srv ~]# firewall-cmd --permanent --remove-port=21/tcp
[root@web-srv ~]# firewall-cmd --permanent --remove-port=20/tcp
[root@web-srv ~]# firewall-cmd --reload
# 서버쪽에서 허용한 포트를 제거하고,

[root@web-srv ~]# firewall-cmd --permanent --add-service=ftp
[root@web-srv ~]# firewall-cmd --reload
# ftp 서비스 추가후 반영.

[root@web-srv ~]# firewall-cmd --list-all
# 그럼 ftp를 통해 test.txt를 가져올수 있다.

2. ACL(Access Control List)

  • 접근 제어 리스트
  • 표준, 확장 ACL이 존재. 우리가 많이 했었던 ‘access-list 1 permit…’ 표준 ACL

표준(standard) - 출발지 주소(IP)만 제어

<1-99> or <1000-1999>

확장(Extended) - 출발지, 목적지 주소 및 포트까지 제어

<100-199> or <2000-2699>

ex) 내가 확장 ACL을 구성하고 싶다면 ‘access-list 100…’으로 시작을 하면 됨

이런식으로, 번호로 ACL을 구분 가능하기도 하고, 번호뿐만 아니라 정책의 이름으로도 구성이 가능하다.

R1#conf t
R1(config)#int f1/0
R1(config-if)#ip add 10.10.1.250 255.255.255.0
R1(config-if)#no sh

R1(config-if)#int f0/0
R1(config-if)#ip add 10.10.10.100 255.255.255.0
R1(config-if)#no sh


R2#conf t

R2(config)#int f0/0 
R2(config-if)#ip add 10.10.10.200 255.255.255.0
R2(config-if)#no sh

R2(config-if)#int f0/1
R2(config-if)#ip add 10.10.2.250 255.255.255.0
R2(config-if)#no sh

R2(config-if)#ip route 10.10.1.0 255.255.255.0 10.10.10.100
# R2의 라우팅

R1(config-if)#ip route 10.10.2.0 255.255.255.0 10.10.10.200
# R1의 라우팅

# 10.10.1.0 /24 과 10.10.2.0 /24가 서로 통신이 되는걸 확인.

vm들도 각 대역에 두자!

[root@web-srv ~]# systemctl stop firewalld
# 웹서버의 방화벽을 끄고

실습
표준ACL을 통해 10.10.1.0 /24 대역에 대해 웹접속을 차단하는 정책을 만들고 싶다.

  1. 어떤 라우터의 어떤 포트에서 막을지를 선택
    => R2의 f0/0에서 적용
  2. 정책을 세운다.
R2(config)#access-list 1 deny 10.10.1.0 0.0.0.255
# 10.10.1.0/24만 차단하고, 다른 대역은 허용하겠다 라면
R2(config)#aceess-list 1 permit 0.0.0.0 255.255.255.255
  1. 반영
R2(config-if)#ip access-group 1 in
# access-list 1 을 in 방향으로 반영 시키겠다.

오늘의 수업은 SSH와 ACL을 배웠다 원래 시험 풀이도 하였기때문에 작성할려고 하였으나 시험은 따로 작성하는 것이 좋을 것 같기도 하고 또 다음주에 리눅스 마스터 시험도 있어서 공부를 해야해서 추후에 시간 날 때 되돌아보는 시간으로 풀이를 작성하도록하겠다. 이런걸 이제 적어놔야겠다.

profile
나를 한줄로

0개의 댓글