19/120

김건호·2022년 3월 7일
0

ssh 실습환경을 위해 server 가상환경과 client 가상환경 만들기

복제를 눌러줍니다

새로운 가상머신을 만들기위해 '모든 네트워크 어댑터의 새 MAC 주소 생성'을 선택해줍니다

다음

복제

두번 복제해서 server와 client를 만들어줍니다
서버생성

[root@localhost ~]# hostnamectl set-hostname server.encore.class4
[root@localhost ~]# nmcli con add con-name static9 ifname enp0s9 type ethernet ip4 *.*.*.150/24 gw4 *.*.*.1
연결 'static9' (a675ccef-5e08-4a24-8d45-b5f9b46ab6a9)이 성공적으로 추가되었습니
다.
[root@localhost ~]# nmcli con up static9
연결이 성공적으로 활성화되었습니다 (D-Bus 활성 경로: /org/freedesktop/NetworkManager/ActiveConnection/6)
[root@localhost ~]# ip addr show enp0s9
4: enp0s9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:34:8b:89 brd ff:ff:ff:ff:ff:ff
    inet *.*.*.150/24 brd 192.168.56.255 scope global noprefixroute enp0s9
       valid_lft forever preferred_lft forever
    inet6 fe80::330c:c123:5a6d:e55b/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

클라이언트 생성

[root@localhost ~]# hostnamectl set-hostname client.encore.class4
[root@localhost ~]# nmcli con add con-name static9 ifname enp0s9 type ethernet ip4 *.*.*.200/24 gw4 *.*.*.1
연결 'static9' (8c2d161d-4f05-41bd-b7c5-f2f5ac71ac7c)이 성공적으로 추가되었습니
다.
[root@localhost ~]# nmcli con up static9
연결이 성공적으로 활성화되었습니다 (D-Bus 활성 경로: /org/freedesktop/NetworkManager/ActiveConnection/6)

SSH

secure shell
원격지 호스트 컴퓨터에 접속하기 위해 사용되는 인터넷 프로토콜
과거에는 telnet을 사용했지만 암호화가 되지 않아 평문전송만 가능함 -> 암호화 기능이 있는 ssh 사용

비대칭키 암호화 방식과 대칭키 암호화 방식을 동시에 사용

  • 대칭키 : 데이터 암호화/복호화에 사용하는 키가 같은 알고리즘 (정보 자체에 대한 암호화가 필요할 때)
  • 비대칭키 : 데이터 암호화/복호화에 사용하는 키가 다른 알고리즘 (정보를 송신한 사람에 대한 정보가 필요할 때 사용)
    공개키 - 공개키로 암호화 시, 개인키로 복호화 가능
    개인키 - 개인키로 암호화 시, 공개키로 복호화 가능

SSH 보안접속 과정


1. 클라이언트가 서버에게 접속 요청을 보냄
ㅤ1.1 최초 접속시, 클라이언트에 .ssh/known_hosts파일(서버에서 넘겨준 공개키 파일)이 추가됨, 서버에서는 /etc/ssh/ssh_host_ecdsa_key.pub에 저장되어 있음 -> 끝쪽 내용이 일치하는 걸 확인할 수 있음 -> 파일의 내용이 달라지면 접속 요청이 거부 됨 -> 기존 키를 다시 삭제하고 접속하면 새로 저장 됨
2. 서버는 클라이언트에게 서버의 공개키를 전송
3. 클라이언트는 암호화를 위한 비밀키를 생성
4. 클라이언트는 생성된 비밀키를 서버의 공개키로 암호화하여 서버에 전송
5. 서버는 서버의 개인키로 비밀키를 복호화하여 일치하면 접속 허가

클라이언트에서 ssh root@*.*.*.150 [명령어] => 접속 후 명령어 실행하고 빠져나오기

키 기반 인증 방식 등록

[root@client ~]# ssh-keygen
[root@client ~]# ls .ssh/
id_rsa  id_rsa.pub <-파일 생성 됨  known_hosts

별도의 비밀번호 없이 키를 등록

[root@client ~]# ssh-copy-id root@*.*.*.150

위 과정 진행 후

[root@server ~]# ls .ssh
authorized_keys<- 파일 생성 됨  known_hosts

클라이언트 가진키를 서버에 등록한 것
새로 생성된 두 파일을 확인해보면 내용이 같은 부분이 있는걸 확인할 수 있음

서버의 /etc/ssh/sshd_config에는 PermitRootLogin이라는 항목이 있음, 수정 시 반드시 systemctl restart sshd.service로 재시작 해주어야함

  • 주석처리나 yes가 되어 있으면 root 로그인을 허가
  • without-password 라면 키기반 인증만 로그인을 허가

PasswordAuthentication 항목을 설정하면 공개키 방식으로만 인증하므로 보안이 더 강화 됨

리눅스 방화벽

외부에서 시스템으로 접근하는 패킷을 차단하는 서비스

Zone

사용자가 요구하는 정책 허용, 특정 허용, 거부, 특정 거부 등등에 맞게 그룹으로 관리되며, 처음 설정 시 위 명령어를 실행하였을 경우 기본적으로 내장되어 있는 정책들

사전 정의된 zone

나가는 패킷은 모두 허용

  • block : 모든 패킷 거부
  • dmz : 내부로 들어오는 패킷 거부
  • drop : 내부로 들어오는 모든 패킷 DROP 폐기, ICMP 에러도 폐기
    폐기(drop) : 패킷을 받으면 응답 없이 버린다.
    거절(reject) : 패킷을 받으면 거부한다라는 ICMP 패킷을 보내준다.
  • external : 내부로 들어오는 패킷 거부 SSH만 제외
    외부로 나가는 모든 패킷 허용
  • home : 내부로 들어오는 패킷 거부
    SSH, DHCP Client, samba, ...
    외부로 나가는 모든 패킷 허용
  • internal : 내부로 들어오는 패킷 거부
    SSH, DHCP Client, samba, ...
    외부로 나가는 모든 패킷 허용
  • public : Default Zone
    내부로 들어오는 모든 패킷 거부
    SSH, DHCPv6-... 제외
    외부로 나가는 모든 패킷 허용
  • trusted : 내부로 들어오는 모든 패킷 허용
    외부로 나가는 모든 패킷 허용
  • work : 내부로 들어오는 모든 패킷 거부 SSH,DHCPv4, IPP 허용하거나 외부로 나가는 모든 패킷 허용

firewalld

iptables의 단점을 보완. 동적으로 방화벽 설정 변경 가능

# firewalld-cmd [option]

옵션

  • --state : firewalld 실행 상태 확인
[root@server ~]# firewall-cmd --state
running
  • --get-default-zone : 현재 기본 영역 표시
[root@client ~]# firewall-cmd --get-default-zone
public
  • --set-default-zone [zone] : 기본 영역 설정
[root@client ~]# firewall-cmd --set-default-zone=home
success
[root@client ~]# firewall-cmd --get-default-zone
home
  • --get-zones : 사용가능한 모든 영역 나열
  • --get-services : 사용가능한 모든 서비스 나열
  • --get-active-zones : 현재 사용중인 모든 영역과 인터페이스 및 소스정보 나열
  • --add-source=[ip주소] --zone=[zone] : 출발지 주소 규칙 추가
    => '--zone' 옵션을 통해 zone 지정해주지 않으면 자동으로 기본영역에 추가
  • --remove-source=[ip주소] : IP 주소를 지정된 영역에서 제거
[root@client ~]# firewall-cmd --remove-service=http --permanent
success
  • --add-interface=[ifname] --zone=[zone] : 특정 영역에 interface 연결 추가
  • --change-interface=[ifname] --zone=[zone] : 영역에 연결된 interface 변경
  • --list-all --zone=[zone] : 영역에 구성된 모든 인터페이스, 소스, 서비스, 포트 나열
#현재영역
[root@client ~]# firewall-cmd --list-all

#해당영역
[root@client ~]# firewall-cmd --list-all --zone=work
  • --add-service=[service] --zone=[zone] : 해당 서비스 트래픽 허용
# 실시간일때만 적용
[root@client ~]# firewall-cmd --add-service=http
success
[root@client ~]# firewall-cmd --list-services
ssh mdns samba-client dhcpv6-client http
# 영구저장은 되지 않는 모습
[root@client ~]# firewall-cmd --list-services --permanent
ssh mdns samba-client dhcpv6-client
# 재시작시 사라짐
[root@client ~]# firewall-cmd --reload
success
[root@client ~]# firewall-cmd --list-services
ssh mdns samba-client dhcpv6-client

영구저장 하는 법

[root@client ~]# firewall-cmd --add-service=http --permanent
success
[root@client ~]# firewall-cmd --reload
success

or

# 해당 서비스에 대해 포트를 열어줌
[root@client ~]# firewall-cmd --add-port=23/tcp --permanent
success
[root@client ~]# firewall-cmd --reload
success
[root@client ~]# firewall-cmd --list-ports
23/tcp
  • --add-port=[port|protocol] --zone=[zone] : 해당 포트나 프로토콜 트래픽 허용
    + --permanent : 해당 옵션을 사용하지 않으면 현재 설정이 변경되며 영구설정은 지정이 안됨.
  • --reload : 런타임 구성 삭제, 영구 구성 적용
  • --runtime-to-permanent : 실행중 설정을 영구 설정으로 변경

패키지를 설치, 실행, 방화벽(포트열어주기)설정은 한 세트❗

# yum –y install httpd
# systemctl start httpd
# systemctl enable httpd
# firewall-cmd —add-service=http —permanet 
# firewall-cmd —reload

firewall-config

그래픽 모드로 방화벽을 설정

profile
Ken, 🔽🔽 거노밥 유튜브(house icon) 🔽🔽

0개의 댓글