오늘은 먼저 라우팅 통신과정에 대해 알아보겠다.
client | server | |
program_# of port | ftp_3000 | vsftpd_21 |
IP | 1.1.1.2 | 2.1.1.2 |
MAC | A | B |
기본 정보가 위와 같다면 라우터가 통신되는 과정은 다음과 같다.
Client Program을 ftp를 3000번 포트로 지정해서 사용하고, 메시지를 생성한다. 이 메시지가 TCP로 이동하게 되어 포트넘버 정보를 헤더로 갖게 되어 전송층에서 M | 21 | 3000로 구성 된다. 이를 Segment라고 한다.
Segment는 네트워크층에서 S | 2.1.1.2 | 1.1.1.2로 구성된다. 이를 Datagram이라고 한다. Datagram은 링크층에서 D | A | R1로 구성되는데 이것이 Frame이다. 여기서 R1은 라우터의 안에 1.1.1.1을 가진 포트의 MAC주소이다. 네트워크가 연결되었을때 IP주소는 알고 MAC주소는 알 수 없을때 사용한다. 왜냐하면 사용자도 통신상에서 다른 네트워크의 MAC은 알수없다. ARP방식으로 라우터의 MAC어드레스를 알기 위해 flooding한다.
이 네트워크의 네트워크주소는 1.1.1.0이고 서브넷은 24가 된다. 이제 Frame을 전송할 차례인데 네트워크 통신은 같은 네트워크 안에서만 가능하므로 외부로 보낼 수 없다. 이때 라우터를 사용하게 되면 1.1.1.1로 지정한 포트에 MAC주소를 이용해서 데이터를 보낸다. 이때 중요한 점은 통신은 라우터로 보내는것이 아니라 게이트웨이로 보낸다고 해야 맞는 표현이다.
그런 후에 라우터에서 패킷 해제 및 재조립이 시작되는데 목적지 IP주소로 보낼 네트워크의 정보를 찾아내고 그 네트워크의 게이트웨이로 데이터를 내보내게 된다. 즉, 1.1.1.0/24네트워크의 게이트웨이에서 2.1.1.0/24네트워크의 게이트웨이로 데이터를 전송시키는것을 라우터안에서 계산한다. 따라서 그 정보를 이용해 찾아넨 게이트웨이로 네트워크를 보내는데 이때 나오는 Frame의 구성은 D | R2 | B가 되는것이다. 이제 이 프레임이 디 멀티 플랙싱을 하면서 S | 2.1.1.2 | 1.1.1.2로 M | 21 | 3000로 변하고 21번 포트를 사용하는 vsftpd라는 Server Program에서 데이터를 받게 되는것이다.
여담을 ftp 잘 안쓰는 이유는 서버 프로그램이 포트를 2개 사용해서 리소스를 많이 차지 하기 때문이다. ftp같은 데몬은 background에서 작동한다.
-----------------------------------------------------------------------------
스케쥴관리를 하는 프로그램을 알아보겠다.
cron은 리눅스에 있는 주기적으로 작업하는 내용을 스케쥴링하는 프로그램이다.
/etc/에서 cron이라고 적힌 dir나 file을 찾으면 된다.
crond.service =>ntsysv에 있다.
crontab 시간이 반드시 필요하다. /etc/cron.allow, /etc/cron.deny는 /usr/bin/crontab을 허용되거나 거부한다.
Crontab 옵션 으로 사용이 가능하다
옵션중-r도 있긴 하지만 vi편집기에서 생서 및 삭제가 가능하니 굳이 사용하지 않는다.
7이상의 버전은 동시간 설정하면 됬다 안됬다 하는 경우가 생긴다. 확실하지 않다.
a-b처럼 범위로 정해줄 수 있다.
/c로 루프범위를 정해줄수있다. => 예를 들어 a-b/c하면 a에서b까지 c마다 실행된다.
a- b=a-b/1로 인식할수있다
범위는 각 단위마다 중복해서 사용할수있다
각 단위에 *를 쓰면 모든 수이다.
분에 *쓰면 매분, 시에 *쓰면 매시간, 일에 *쓰면 매일 등이된다.
실행확인은 /var/log/cron이다
백업과 연관된 rsync라는 데몬에 대해 알아보자.
rsync는 데이터를 동기화 하는 데몬인데 시스템은 아래와 같다.
원본 저장 시스템 (서버) -> 백업본 저장 시스템(클라이언트) : restore
원본 저장 시스템 (서버) <- 백업본 저장 시스템(클라이언트) : copy
예를 들면 어제밤 백업본을 생성하고, 오늘 10시 데이터 손상되었다. 이때 어제밤 백업본으로 복원하게 되면 어제밤 백업했던 상태가 된다. 즉, 어제밤~오늘 10시 데이터 사라지는 것이다. 사실상 동기화 보다는 복사에 가까움. 만약 DB라면 복구가 가능하다.
cf)restore vs recovery = 시점이동(데이터가 손상되기 이전의 시점으로 이동) vs 복구
사용자를 end user, network에 연결되 사용하는 pc를 end라고 불림
rsync 데몬구동방식은 standalone방식과xinetd방식이 있는데 이 글의 뒤에서 설명하겠다.
rsync 설치 확인은 yum list rsync을 입력하게 되면 뒷부분에 Installed Packages라고 되어있으면 설치되어있는것이다.
관련 파일으로는 데몬, 관리 스크립트, 백업 설정파일이 존재하는데 위치는 아래와 같다.
데몬 : /usr/bin/rsync
관리 스크립트 : /usr/lib/systemd/system/rsyncd.service
백업 설정 파일 : /etc/rsyncd.conf
데몬을 실행하는 명령어는 다음과 같다
systemctl 옵션 rsyncd.service
start, stop, restart, status : 시작, 중지, 재시작, 상태
를 실행이나 확인하는 옵션이다.
설정파일을 확인하려면 cat /etc/rsyncd.conf를 치면 된다
나오는 내용은 다음과 같다.
[서비스 명] : 리소스 식별자, client에서 이용한다.
path : 백업 경로 //이 경로에만 파일 upload한다.
comment : 주석
uid : 전송자 UID
gid : 전송자 GID
use chroot : rsync 경로를 외부에서 / 로 인식한다. => path로 지정한 디렉토리를 최상위 디렉토리로 인식한다.
read only : 읽기 전용으로 접근한다. yes로 되어있다면 다운로드 불가능하다.
hosts allow : 접속 허용할 호스트 (클라이언트만 지정한다.)
max connections : 동시 접속자 수
timeout : 휴지시간 없애기 위해 존재한다.(초단위로 적는다.)
rsync를 사용하는 명령어는 다음과 같다.
rsync 옵션 보내는곳 받는곳
rsync -avz [--delete] IP::[서비스명] [백업 디렉토리]
rsync -avz [--delete] [백업 디렉토리] IP::[서비스명]
rsync 명령에 사용한 옵션은 다음과 같다.
-v : 작업내역 출력
-a : archive mode 작업 (심볼릭 링크, 권한 등 모든 내용을 보존한다. )
-z : 파일을 압축 전송한다.
--delete : source에서 지워진 파일을 destination에서도 지워준다.(완전 동기화 옵션)
이 실습은 이해만 제대로 했다면 간단하다.
하지만 작성자는 여러가지 실수를 했는데 하나씩 확인해보도록하자. 그전에 실수한것을 찾아보고 아래에 실수한 내용을 적어보겠다.
<내용 풀이>
첫번째 사진은 rsync를 수행하려고 해놓고 ftp로 파일전송을 진행하려고 했다.
두번째 사진은 적용을 하지 못하게 코드를 전부 주석처리 했다.
세번째 사진은 권한이 계속 거부되어 permittion을 777로 정하고 진행했는데 버그인지 한번 송신이 이루어지고 나중에 다시 세팅하면서 수신이 한번 이루어졌다. 물론 여기서는 모르겠지만 selinux가 enforcing되어 있는 상태였다.
selinux는 보안 강화 리눅스(Security-Enhanced Linux, SELinux)다. 자세한 내용을 알고싶다면 아래의 selinux해제 참조 링크를 따라가 읽어보는것을 추천한다.
아무튼 elinux가 enforcing되어 있었기 때문에
rsync: failed to set permissions on "/." (in BACKUP): Permission denied (13)
rsync: mkstemp "/.afile.txt.PZQvTe" (in BACKUP) failed: Permission denied (13)
이 에러가 계속 발생했다. vi /etc/sysconfig/selinux 에서 selinux가 enforcing되어 있다면 disable로 설정
해결됨<selinux해제 참조>
Local System 내에 동기화 (동기화 보다는 복사에 가깝다)
rsync –avz /home/httpd/ /backup/httpd/
rsync 명령을 cron에 등록한다.
• 매일 새벽 1시에 백업 수행
00 1 * * * rsync -avz 192.168.10.31::backup /backup
-----------------------------------------------------------------------------------------------------------------
동기화 방식은 두가지가 있다. 클라우드 동기화은 시간 순서에 따른 동기화하는 것으로 최신파일로 유지되는 반면, 서버 동기화는 무조건 백업할 파일을 올리는 방식이다.
이때 자동백업의 위험성이 발생한다. 만약 데이터의 이상유무 확인 안하고 백업 / 백업본이 잘못된 데이터로 덮어씌워질 가능성이 생기기 때문이다. 따라서 시스템이 손상되었을때 복구를 사용해야한다.
백업은 가용성문제에 대응하기 위해 필요한데, 백업은 사람의 개입성이 필요하다.
보안에서 위험성을 얘기하는 부분은 다음 3가지 이다.
가용성 : 사용하고싶은 시간과 양을 사용하지 못하는문제
기밀성 : 권한이 없는 사람한테 정보 흘러감(정보노출)
무결성 : 잘못된 정보 확산 또는 저장
리스크(위협)분석은 어렵다. 따라서 조직이 용인할만큼 위험을 줄이는 것으로 상한선을 정한다.
그 위험성을 줄이는 것은 두가지 인데 위험회피는 위험 사업 하지 않는방식인데 이는 통제 가능 위험일때 사용할 수 있고, 위험이 너무 크면 위험통제불가방식으로 통제불가능하다.
-----------------------------------------------------------------------------
데몬 구동방식 기본적으로 1:1 매칭이며 임의의 시점에서 background process로 시작되어 사용자나 프로게스에 서비스를 제공하는 방식이다. CentOS의 경우 ~6버전에서는 데몬, 7버전~에서는 서비스라고 부른다.
구동방식은 2가지가 있다.
1. standalone
직접 메모리를 계속 감시하는것(=listen)으로 서비스 요청 즉시 응답한다. 서비스요청이 드물거나 idle한 경우 메모리를 낭비하게된다. 여기서 idle은 휴지(≒대기)를 의미하고 보통 idletime이라고 한다.
2.xinetd
직접 listen은 하지 않고 xinetd가 대신 listen한다. 메모리에 상주하지 않으며 서비스가 요청될시 xinetd에 의해 호출된다. 예전에는 메모리가 부족했을때는 idle에 대한 부담감을 줄이려고 사용했지만 현재는 메모리가 충분히 많기 때문에 거의 사용하지 않는다.
데몬의 설정을 설정하거나 확인하는 명령어는 아래와 같다.
systemctl list-unit-files : 모든 서비스의 상태 확인
systemctl -옵션 서비스명
is-enabled : 자동 실행 등록 여부
is-active : 현재 실행 여부
enable : 등록
disable : 등록 해제
start : 실행
restart : 재실행
stop : 종료
try-restart : 실행, 재실행, 종료
Reload : 설정 재구동
status : 상태 확인
실질적으로는 try-restart나 Reload는 거의 사용하지 않는다. 왜냐하면 start나 stop, restart로 충분히 그 역할을 하기 때문이다. 또 만약 disable을 하게되면 systemctl 목록에서 사라진다.
ntsysv도 서비스를 활성화혹은 비활성화 시키는 툴이다.
시스템 초기에 필요한 서비스는 다음과 같다.
network : 네트워크 활성화
crond.service : 스케쥴 관리
display-manager.service : Xwindow 필수
gdm.servicesshd.service : Xwindow 필수
sshd.service : ssh통신을 위해 필요
부팅을 할때의 시작할 시스템레벨을 선택할 수 있다. run level과 target 두가지 방식이 있고 각 방식의 설정은 다음과 같다.
○run level
0 : shutdown
1 : 싱글유저모드로서, 시스템 손상된 것을 수정할때 진입한다.
2 : 없다
3 : 다중사용자모드로 콘솔모드이다. putty처럼 프롬포트로 시작한다.
4 : 없다
5 : xwindows모드로 일반적 부팅상황이다.
6 : reboot
○target
multi-user.target은 init3으로 run level 3과 같다.
graphical.target은 init5로 run level 5과 같다.
rescue.target은 init1, single user mode이고, ≒ emergency.target은 응급 복구 모드로 run level 1과 같다.
제공되는 target 확인하는 코드는 'systemctl list-units --type target --all'이다.
Default target을 성정하는 방법은 'systemctl set-default 타켓'으로 하면된다.
타겟변경은 시스템 관리나 장비 손상 등이 발생했을때 사용하며 'systemctl 타겟'으로 지정하면 된다.
이때 복구나 수정을 위해 접근해야 하기 때문에 타겟에는 rescue나 emergency모드를 설정해야하며
rescue은 'rescue.target', emergency은 'emergency.target'으로 설정한다.
위의 내용들은 booting configurtion 변경이므로 재부팅해야 적용되니 주의해야 한다.