open SSH
- 원격에서 암호화로 서버에 접속하는 클라이언트 프로그램
-> 과거에는 telnet을 이용해서 원격으로 접속했지만 평문으로 접속하기 때문에 보안이 약해서 현재는 사용하지 않는다
암호화 이론 : SSH, SSL(HTTPS)
일방향 암호화 : 암호화는 지원하지만 복호화는 안됨
- 해쉬 : 일방향 암호화되어 나온 암호문
-> 안전하게 패스워드 같은 중요 데이터를 보관하기 위해 해쉬 사용
--> 복호화는 안되지만 암호를 깨는 크랙킹은 가능하기 때문에 완전히 안전하지는 않다
-> 해쉬는 파일이나 데이터의 무결성 검증
📕 md4, md5, sha, sha256, sha512, sha1024 등의 일방향 암호화 알고리즘이 있다
양방향 암호화 : 암호화, 복호화 둘 다 지원된다
- 키가 필요하다
📒 키 : 일정 길이의 문자열 데이터
- 대칭키 암호화 , 비대칭키 암호화 두가지 방식이 있다.
대칭키 암호화
- 세션키 암호화 ,비밀키 암호화 두가지가 있다
- 키가 1개가 사용됨
- 암호화 키 = 복호화 키
- AES 256, AES 512등의 알고리즘이 있다
- 단점 : 키 전달 문제
-> 중간에 해커가 키를 해킹한다면 평문 통신이랑 같다
비대칭키 암호화
- 대칭키 암호화의 키 전달 문제를 해결한 암호화
- 키가 2개가 사용됨
- 암호화키, 복호화키가 따로 있다
- 개인키, 공개키 암호화 두가지가 있다
-> 개인키는 절대 누구에게도 주면 안되는 키, 오직 자기 자신만 소유
-> 공개키는 누구에게도 줄 수 있다. 해커도 공개키를 가질 수 있다.
-> 개인키로 암호화한것은 오직 공개키로만 해독이 가능, 공개키로 암호화한것은 오직 개인키로만 해독이 가능
- '인증' 이라는 또 다른 기능이 있다 = 전자서명 통신
- 단점 1 : 속도가 느림
📒 클라이언트는 대칭키를 만들어서 대칭키를 공개키로 암호화해서 전달하면 전달문제와 속도가 느린 단점을 해결 가능
-> RSA 알고리즘
📒 개인키는 오로지 서버만 가지고 있다
- 단점 2 : 키 신뢰성 문제
-> SSL 알고리즘으로 해결
SSH 실습
-
게스트pc 두대 (client, server) 를 부팅시킨다
-
client에서 ssh root@server의 natip입력해서 server로 접속
📒 GUI를 사용 가능하게하는 옵션 : ssh -X (X포워딩)
-
한번이라도 client에서 server에 ssh로 접속했다면 .ssh 디렉터리에서 known_hosts에 등록되어있는 것을 볼 수 있다
-> 해당 server의 공개키를 믿을 수 있다고 등록 한 것이다
-
server의 /etc/ssh 디렉터리에서 vi sshd_config후 set nu로 번호를 붙여서 본다
- 17번줄은 SSH에서 사용할 포트를 의미, 포트번호를 바꾸면 보안을 강화할 수 있다.
- 19번줄은 sshd 서비스가 대기할 주소다. '0.0.0.0'은 모든 주소에 대해서 대기한다는 의미
- OpenSSH에서 사용할 암호화 알고리즘의 키 파일을 선택
- 현재 rsa, dsa, ecdsa, ed25519 암호화 알고리즘을 사용하는 키 파일을 생성하여 /etc/ssh 디렉터리에 저장하도록 설정되어 있다.
- 32번줄은 로그 파일 생성 시에 해당 로그 파일의 종류를 지정. AUTHPRIV는 인증 관련 로그다. 해당 로그는 /var/log/secure 파일에서 확인 가능
- 33번줄은 로그 파일 생성 시 로그의 우선순위를 지정
- 37번줄은 로그인 실패시 연결을 끊는 시간 설정
- 38번 줄에서 '#' 없애고 yes를 no로 바꾸면 원격으로 ssh접속하는 것을 차단한다
-> 기업에서 보안을 강화하기 위해 설정하기도 한다.
키 기반 인증 (클라이언트에서 실행하는 명령어)
- ssh-keygen : 키 기반 인증을 위한 공개키와 개인키 생성
-> .ssh 디렉터리에 공개키가 생성된 것을 볼 수 있다
- ssh-copy-id 아이디@서버아이피 : 클라이언트가 생성한 공개키를 서버에 등록하는 명령어
-> 서버측에서 .ssh디렉터리에 authorized_keys라는 파일이 생성된 것을 볼 수 있다
-> 이후 클라이언트측에서 ssh root@서버ip로 서버에 접속하면 패스워드 없이도 key를 통해서 바로 접속이 가능하다.
scp실습
- 로컬 -> 원격
- scp 로컬파일위치 계정명@원격호스트:원격파일위치
- ex) scp test root@10.0.2.15:/root/test
-> 클라이언트의 test파일을 서버에 복사한다
- ex) scp root@10.0.2.15:/root/hello ./
-> 서버의 hello파일을 클라이언트의 현재위치로 복사
📒 키를 등록했기 때문에 암호를 입력하지 않아도 된다
방화벽
-
네트워크를 통한 외부의 접속을 차단하려면 방화벽을 사용
-
페도라 19에서는 이전의 iptables대신에 firewall데몬 서비스 제공
-
zone : 네트워크를 신뢰도 수준에 따라 여러 개의 영역으로 구분하여 사용
-
/usr/lib/firewalld/zones 디렉터리에 zone파일 확인가능
-
firewall-cmd --list-all-zones : 모든 zone에 대한 자세한 설정 보기
-
firewall-cmd --get-default-zone : 기본값으로 설정된 zone보기
-
firewall-cmd --info-zone=public : 특정 zone에 대한 정보 보기
-
firewall-cmd --set-default-zone=trusted : default zone 바꾸기
-
firewall-cmd --get-services : firewall에서 지원하는 모든 서비스 보기
-
firewall-cmd --list-services : 현재 zone이 허용하는 서비스 보기
-
curl -L localhost : 로컬호스트로 웹에 접속
일시적으로 포트 / 서비스 추가
- firewall-cmd --list-ports : 열려있는 포트 확인
- firewall-cmd --add-service=http : 서비스 추가
- firewall-cmd --remove-service=http : 서비스 제거
- firewall-cmd --add-port=80/tcp : 포트 추가
- firewall-cmd --remove-port=80/tcp : 포트제거
영구적으로 포트 / 서비스 추가
- firewall-cmd --add-service=http --permanent
-> 당장 runtime내에 적용되지 않는다
-> firewall-cmd --reload를 통해서 현재 runtime에 적용 시킨다
dns 서비스
- docs.google.com = FQDN(fully qualified domain name) = 전체 도메인 이름
- docs : 호스트이름
- google.com : 도메인 이름
- nslookup -> server 입력 : server의 ip 알 수 있다
- nslookup 도메인 : 도메인의 ip를 알 수 있다
dig
- 다른 명령에 비해 기본 출력 정보가 상세한 특징을 가지고 있다.
- 형식 : dig [@server][option] [도메인]
- ex) dig @8.8.8.8 google.com
host
- 도메인에 대한 정보 얻는다.
- 형식 : host [옵션] 도메인 [server]
- ex) host google.com 8.8.8.8
- 옵션 -a : DNS를 조회할 때 모든 타입의 레코드를 조회한다
/etc/hosts 파일
- ip에 해당하는 도메인을 등록하는 파일
- dns에 보다 우선되는 파일로 먼저 /etc/hosts 파일을 우선적으로 확인한다
- ex) vi /etc/hosts 접속해서 서버ip 도메인이름 저장
-> ping 도메인이름 , ssh root@도메인이름 가능
dns과정 velog참조
- 최종적으로 순환쿼리로 찾은 도메인에 해당하는 ip를 재귀쿼리의 결과로 반환된다
dns실습
서비스 구축
1. 소프트웨어 패키지 설치
2. 서비스 환경설정 및 구축
3. 설치한 서비스 실행
4. 방화벽 오픈
캐시 dns서버 구성
- yum -y install bind bind-chroot = named 서비스 = dns 서비스
- vi /etc/named.conf 접속 후 아래 사진처럼 수정한다
- systemctl start named : named 프로그램 실행
- systemctl enable named : named 프로그램 활성화
- firewall-cmd --add-service=dns --permanent : 방화벽 오픈
- firewall-cmd --reload : 방화벽 오픈한거 적용
- 클라이언트에서 dig @서버ip주소 naver.com입력
-> 이전에 설치한 캐시 dns서버에서 캐시테이블을 확인해서 naver.com에 대한 ip정보를 받는다
dns 서버 구축 (primary dns서버 구축)
- 웹 페이지 간단하게 구축
- rpm -qa httpd
- systemctl start httpd
- firewall-cmd --add-service=http
- firewall-cmd --reload
- cd /var/www/html
- vi index.html 접속해서 텍스트 입력
-> 웹에 ip입력하면 웹사이트 접속되서 텍스트 보임
- ip가 아닌 도메인으로 접속하기 위해 dns서버 구축
- vi /etc/named.conf 접속 후 마지막 줄에 아래 사진처럼 입력
- named-checkconf : 오타 체크 명령어
- cd /var/named : 존 파일이 존재한다
- cp named.localhost linux.com.db
- vi linux.com.db 접속 후 아래 사진처럼 저장
- named-checkzone linux.com linux.com.db
- chmod -R 754 /var/named
- systemctl restart named
- 클라이언트에서 vi /etc/resolv.conf 접속후 아래 사진처럼 저장
- 이제 클라이언트에서 firefox키고 해당 도메인 입력하면 접속 된다
- curl -L linux.com 입력했을 때 이전에 웹사이트 구축 시 작성했던 텍스트 나오면 이상없는 것이다
📒 추가로 nslookup -> linux.com, www.linux.com, ns.linux.com에 대한 ip가 잘 나오는지 확인
dns 레코드
- DNS서비스를 구축하거나 DNS서버에 쿼리를 날리기 위함
- NS : 도메인의 네임서버
- MX : 도메인의 메일서버
- A : 호스트의 IP주소
- CNAME : 별칭
- SOA : 도메인의 Start Of Authority, 해당 도메인에 권한이 있다 라는 뜻
- PTR : IP주소에 대한 호스트명
- ANY : 호스트에 관련된 모든 레코드들의 정보
📒 DNS서버에 쿼리를 날렸을때 재귀쿼리의 결과로 얻는 도메인에 대한 IP는 레코드값이 A인 경우이다.