0. 서버 hostname 설정하기
FQDN = hostname 서버이름 + domainname 도메인네임
ex. www.naver.com, mail.naver.com, cafe.naver.com
naver.com = 도메인 이름
www, mail, cafe 는 서버 이름
hostname의 분류 : static (고정), transient(일시적인), pretty(기호나 한글 사용가능한)
명령어
hostname : 호스트네임 확인
hostnamectl : 호스트네임 확인
hostnamectl set-hostname server.rich-developer.com : 호스트 설정 static으로
cat /etc/hostname 에 저장된다.
예제
//hostname 설정하기
[admin@localhost ~]$ hostnamectl set-hostname whynot_jung.com
//hostname 확인
[admin@localhost ~]$ hostname
whynot_jung.com
//hostname 확인
[admin@localhost ~]$ hostnamectl
Static hostname: whynot_jung.com
Icon name: computer-vm
Chassis: vm
Machine ID: fafdaf9226ec4d439afa7b06f46dcdcb
Boot ID: 0ab69508ca534476978af38584c9d609
Virtualization: kvm
Operating System: CentOS Linux 7 (Core)
CPE OS Name: cpe:/o:centos:centos:7
Kernel: Linux 3.10.0-1127.el7.x86_64
Architecture: x86-64
// /etc/hostname 파일 확인 --> 재부팅 시 적용됨
[admin@localhost ~]$ cat /etc/hostname
whynot_jung.com
// 바로 적용하려면 bash 쉘을 다시 실행해주기
[admin@localhost ~]$ /usr/bin/bash
//hostname 적용됨
[admin@whynot_jung ~]$
1. OpenSSH
SSH 프로토콜을 사용하여 원격접속할 수 있게 도와주는 서비스.
텔넷(telnet)이나 리모트쉘(rsh)이 평문 전송으로 이루어지는 반면, SSH는 모든 데이터를 암호화해서 전송한다. 따라서 원격접속 시 더욱 안전하게 사용 가능하다.
1) ssh
클라이언트에서 SSH를 사용하여 원격 접속을 할 때 ssh명령을 사용한다. 이후 패스워드를 입력해야 한다.
ssh [user-name]@address
user-name은 접속하고자 하는 사용자 이름. 이를 생략하고 address만 입력하면 현재 로그인된 사용자와 동일하게 접속된다.
address에는 접속하려는 시스템의 DNS이름 또는 IP 주소
-X 옵션 사용시 그래픽 도구 사용 가능!
ex. admin@172.0.0.1
ssh의 구성 파일
[admin@whynot_jung ~]$ ls /etc/ssh
moduli sshd_config ssh_host_ecdsa_key.pub ssh_host_ed25519_key.pub ssh_host_rsa_key.pub
ssh_config ssh_host_ecdsa_key ssh_host_ed25519_key ssh_host_rsa_key
moduli | Diffie-Hellman 알고리즘에 사용되는 파라미터 포함 |
ssh_config | open ssh 클라이언트 설정에 필요한 파일 |
sshd_config | open ssh 서버 설정에 필요한 파일 |
ssh_host_암호화알고리즘이름_key | 해당 알고리즘의 개인 키 |
ssh_host_어쩌구~알고리즘이름_key.pub | 해당 알고리즘의 공개키 |
2) ssh-keygen
ssh 원격 접속시 아이디 패스워드로 접속해도 되지만, 키 기반 인증으로 접속하면 패드워드 매번 안써도 됨.
키를 직접 가지고 있어야 하기 때문에 아이디-패스워드처럼 유출? 될 염려가 적음
ssh-keygen 명령어로 생성 가능하다. 아래와 같다. 엔터 엔터 치면 금방 생성된다.
[hyeonjeong@localhost ~]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hyeonjeong/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/hyeonjeong/.ssh/id_rsa.
Your public key has been saved in /home/hyeonjeong/.ssh/id_rsa.pub.
The key fingerprint is:
b1:62:b8:a5:c2:bb:8f:d4:c3:ff:06:eb:7e:16:55:19 hyeonjeong@localhost.localdomain
The key's randomart image is:
+--[ RSA 2048]----+
| Eo |
| o |
| . . |
| . o. |
| . + S. |
| . o =... |
| + * o . |
| . + o. + |
| +o.o+=. |
+-----------------+
[hyeonjeong@localhost ~]$
읽어보면 알겠지만, public rsa key 와 private ras key 한 쌍을 생성한다. 이는 홈 디렉터리의 ./ssh 에 저장된다.
[hyeonjeong@localhost ~]$ ls .ssh
id_rsa id_rsa.pub
passphrase 를 입력하라고 나오는데 이를 입력하면, key 인증 시 패스워드를 입력해야 한다. 그냥 엔터를 쳐서 넘겼다.
-t 옵션을 사용하면 암호화 알고리즘을 지정할 수 있다.
ssh-keygen -t ecdsa
3) 키 파일 중 공개키를 접속하고자 하는 시스템에 전달!
사용자가 생성한 키 중 공개키를 접속하고자 하는 시스템에 전달해야 한다. 이 때 ssh-copy-id 명령을 사용한다.
옵션을 주지 않을 경우 사용자의 홈 디렉터리의 .ssh 디렉토리에서 id_rsa.pub를 전달한다.
ssh-copy-id [user-name]@address
# 파일 보내기
[root@whynot_jung ~]# scp fileA user10@localhost:/home/user10
fileA 100% 23 30.3KB/s 00:00
# 파일 가져오기 //디렉터리 복사시 -r 옵션 사용
[root@whynot_jung /]# scp -r user10@localhost:/home/user10/dirA /root
fileA 100% 0 0.0KB/s 00:00
fileB 100% 0 0.0KB/s 00:00
fileC 100% 0 0.0KB/s 00:00
[root@whynot_jung /]# sftp user10@localhost
Connected to localhost.
sftp> ls
README dirA fileA
sftp> pwd
Remote working directory: /home/user10
sftp> cd dirA/
sftp> ls
fileA fileB fileC
sftp> get fileC /
Fetching /home/user10/dirA/fileC to /fileC
sftp> exit
[root@whynot_jung /]# ls
backup bin boot dev etc fileC home lib lib64 media
mnt opt proc project1 root run sbin srv sys tmp usr var
2. NTP 서버 관리 (Network Time Protocol)
NTP(Network Time Protocol) 는 컴퓨터의 시스템 시간을 동기화 할 때 사용하는 프로토콜이다.
인터넷에 연결되어 있는 시스템은 NTP 프로토콜을 사용하여 NTP 서버와 시간을 동기화 할 수 있다.
NTP 서버는 1부터 15까지 단계(Stratum)로 구분되어있는데, 아래 그림과 같다. 숫자가 작을수록 시간이 정확하다.
chrony 서비스를 이용하여 시간 동기화 수행.
chronyd : chrony 서비스 데몬
chronyc : chronyd를 제어하기 위한 사용자 명령
/etc/chrony.conf 파일에서 설정 가능 혹은 chronyc 대화형 명령 프롬프트 사용도 가능! chronyc 치면 프롬프트 뜸!
# 동기화 시간 정보 확인
chronyc tracking
# 시간 소스 정보 확인 -v 옵션을 사용하면 더 자세한 정보 확인 가능
chronyc sources
chronyc sourcestats
3. 방화벽 관리
firewalld
- 실행(runtime) 중 설정과 영구(permanent) 설정이 있음. 실행중 설정은 재부팅 혹은 서비스 재실행 하면 사라짐.
저장할 거면 permanent 로 해놓기
firewalld에는 영역(zone) 개념이 있는데, 연결 설정을 그룹처럼 묶어서 처리한다. 윈도우 방화벽에 가면 기본적으로 in- bound 규칙과 out-bound 규칙으로 나뉜 것처럼 firewalld 도 사전에 정의된 영역과 기본 영역이 있다.
block (변경 X) | 모든 패킷 거부(reject) 내부에서 외부 반환 패킷은 허용 |
dmz | 내부로 들어오는 패킷 거부 (reject) 외부로의 연결, ssh 서비스 허용 |
drop (변경 X) | 내부로 들어오는 모든 패킷 폐기 (drop) ICMP (ping) 에러도 폐기 외부로 연결만 허용 |
external | 내부로 들어오는 패킷 거부 (reject) 외부로의 연결, ssh 서비스 허용 IP Masqueranding 활성화 |
home | 내부로 들어오는 패킷 거부(reject) dhcpv6, ipp-client, mdns, samba-client, ssh 허용 |
internal | 내부로 들어오는 패킷 거부(reject) dhcpv6, ipp-client, mdns, samba-client, ssh 허용 |
public | Default Zone 시스템에 인터페이스가 추가되면 인터페이스 규칙이 추가됨 내부로 들어오는 패킷 거부(reject) dhcpv6-client, ssh 허용 |
trusted (변경 X) | 모든 패킷 허용 |
work | 내부로 들어오는 패킷 거부(reject) dhcpv6, ipp-client, ssh 허용 |
firewall-cmd를 통해 커멘트라인에서 방화벽 관리를 할 수 있다.
#사전 정의된 영역 확인
[admin@server ~]$ sudo firewall-cmd --get-zones
work drop internal external trusted home dmz public block
#사전 정의된 서비스 확인
[admin@server ~]$ sudo firewall-cmd --get-services
....
#활성화된 영역 확인
[admin@server ~]$ sudo firewall-cmd --get-active-zones
public
#설정된 규칙 확인
[admin@server ~]$ sudo firewall-cmd --list-all --zone=home
home
...
# default zone 설정
[root@whynot_jung ~]# firewall-cmd --set-default-zone=external
success
# default zone 확인
[root@whynot_jung ~]# firewall-cmd --get-default-zone
external
# 각각 옵션 사용시 --permanent 를 써야 영구적으로(서비스 껐다켰을때도) 사용 가능함.
영역에 연결된 인터페이스 변경 : --change-interface=enp0s8 --zone=home
출발지 주소 추가 --add-source=[address] --zone=[zone]
출발지 주소 삭제 --remove-source
서비스 추가 --add-service (정의된 http: tcp/80)
서비스 삭제 --remove-serivce
포트 추가 --add-port=포트번호/프로토콜
포트 삭제 --remove-port=포트번호/프로토콜
--add-port=tcp/80
--add-port=tcp/4000
프로토콜 추가 --add-protocol
프로토콜 삭제 --remove-protocol
--add-procotol=icmp
리치규칙(rich rule)세부적으로 규칙을 설정하는 것
firewall-cmd --add-rich-rule='rule RULE'
리치 규칙에 사용되는 문법
family | IPv4 와 IPv6 결정 family={ipv4 | ipv6} |
source | 출발지 주소 설정 source address='IP/MASK' |
destination | 도착지 주소 설정 destination address='IP/MASK' |
service | 서비스 규칙 service name='SERVICE' |
port | 포트 설정 port port='PORT' |
protocol | 프로토콜 설정 protocol value='PROTOCOL' |
forward-port | 포트포워딩 설정 forward-port port='PORT' protocol='TCP|UDP' to-port='PORT' to-addr='IP' |
log | syslog 기록 log PREFIX='TEXT' level='PRIORITY' |
audit | audit log 기록 audit |
accept | 허용 |
reject | 거부 |
drop | 폐기 |
위 문법을 사용하여 작성한 리치 규칙설정 예이다.
firewall-cmd --zone=work --add-rich-rule='rule family="ipv4"
source address="192.168.0.0/24" service name="http" accept'
work 영역에 ipv4 192.168.0.0/24 에서 출발한 http서비스 패킷을 허용하는 리치 규칙을 추가해라.
여기까지 배우고 지난 시간~이번 시간 복습을 위한 퀴즈를 풀었다.
원래 매일 한 두시간씩 남아서 공부하다가 갔는데, 오늘은 그냥 6시에 집에 갔다.
최근 며칠 간 늦게잤더니 피곤하고 어지럽고 해서 ㅠ.ㅠ
진짜 커리큘럼 빡세다. 여기에 학교 졸업을 위해 여름 계절학기 C프로그래밍실습과목도 듣고있다. 그거 과제까지 하느라 늦게 잔다. 열심히 해서 좋은 개발자 || 보안 전문가가 될거다! 물론 돈도 많이 벌거고 ㅋㅋㅋㅋㅋ 홧팅
'[혁신성장 청년인재] 인공지능을 활용한 보안전문가 양성과정' 카테고리의 다른 글
Day11: 리눅스 관리자 | DNS 서버 구성| DNS 조회 | nslookup | dig | host | DNS 서버 관리 (0) | 2020.07.21 |
---|---|
Day10: 리눅스 관리자 복습 & 깃허브 특강 (0) | 2020.07.19 |
Day8: 리눅스 관리자 | 부트 프로세스| RPM | YUM | 네트워크 관리 (0) | 2020.07.16 |
Day7: 리눅스 관리자 | 논리 볼륨 관리 | Systemed | 로그 관리 (0) | 2020.07.15 |
Day6: 리눅스 관리자 | 디스크 관리 | 파일시스템 및 스왑 메모리 (0) | 2020.07.13 |