CloudETC 리눅스 기본 명령어가 너무 길어져서 리눅스 실습만을 위한 파일을 따로 준비함
작성은 무조건 실습중심(Starter Pack)
# Starter Pack
yum -y install epel-release
yum install -y vim net-tools curl wget git tree nfs-utils httpd && yum update -y && poweroff
yum install -y squid # proxy 서버용
yum install -y nfs-utils # nfs용(기본)
yum install -y haproxy # load-balaner용
yum install -y httpd # 클론용(기본)
주의사항
1. shellcheck 한번 돌리고 시작하기
2. 일단 복제할거에서 실행해서 설치할거 다 설치한다음에 clone 하기
yum install -y epel-release
yum install ShellCheck
sed -i "s/\r//g" *.sh #from window
shellcheck *.sh
#!/bin/bash
# Starter Pack
yum install -y vim net-tools curl wget git tree nfs-utils httpd
yum install -y squid # proxy server
yum install -y nfs-utils # nfs (basic)
yum install -y haproxy # load-balaner
yum install -y httpd # wev-server (basic)
yum groupinstall "x window system" "gnome desktop environment" # startx
# alias
echo "alias vi='vim'" >> ~/.bashrc
# hostname
host_src=localhost
host_dst=lbdns
sed -i "s/${host_src}/${host_dst}/g" /etc/hostname
# ip address
ENS32_src=192.168.8.100
ENS33_src=192.168.1.100
ENS34_src=192.168.2.100
ENS32_dst=192.168.8.100
ENS33_dst=192.168.1.100
ENS34_dst=192.168.2.100
sed -i "s/${ENS32_src}/${ENS32_dst}/g" /etc/sysconfig/network-scripts/ifcfg-ens32
sed -i "s/${ENS33_src}/${ENS33_dst}/g" /etc/sysconfig/network-scripts/ifcfg-ens33
sed -i "s/${ENS34_src}/${ENS34_dst}/g" /etc/sysconfig/network-scripts/ifcfg-ens34
# firewalld
systemctl stop firewalld
systemctl disable firewalld
# SELinux
setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
# last dance
yum update -y && reboot
개념
웹 동작원리
1. 클라이언트가 http://www.test.com 에 접속
2. 클라이언트의 NIC에 저장된 DNS 서버인 8.8.8.8에게 www.test.com 의 주소를 물어본다.
3. DNS 서버는 www.test.com의 의 주소가 192.168.8.100이라고 알려준다.
4. 클라이언트는 192.168.8.100으로 웹접속하면 Load Balancer는 해당 연결을 일시적으로 대기시킨다.
5. backend 서버쪽으로 LB가 연결한다. 첫번째 연결은 BE의 첫번째 서버로 두번째 연결은 두번째 BE 서버로 연결된다.
6. BE에 있는 웹서버에게 index.html 파일을 요청하고 해당 내용을 lb에게 대기하고 있는 클라이언트에게 제공한다.
7. lb로 부터 index.html 내용을 전달받은 클라이언트는 해당 내용을 자신의 브라우저에 띄운다.
VMWARE 설치과정
- NIC(Network Interface Card) 가상화 방법(0112)
NIC(Network Interface Card) 가상화 방법
1. 브릿지 : 진짜 PC의 NIC을 공유해서 사용하는 방식 = 같은 NIC 쓰는 방식
2. NAT : VM들이 가상 NAT에 연결되어 진짜 PC를 타고 인터넷으로 나감
3. Host-Only : VM끼리만 연결된 방식
- 설치(중요한것만)
Virtualize Intel VT-x/EPT or AMD-v/RVI : 가상머신에서 가상화 기술 이용
네트워크 옵션에도 Bridged(NIC 공유) / NAT(자동 NAT 탐색) / Host-only(고립) / Custom(네트워크 선택) 등이 있다.
이 부분에서 Base Environment를 뭐로 고를지가 중요
디스크 선택지는 두가지가 있다.
1. Local Standard Disks : 그냥 컴퓨터에 꽂힌 디스크 쓰는거(클라우드에서는 잘 안씀)
2. Specialized & Network Disks : Storage의 공간(볼륨)을 원격지에 연결하는 방법 -> AWS에서의 EBS(Elastic Block Storage)를 boot disk로 사용한다. 이때 DB 서버를 여러대 두는 것을 보고 Clustering이라고 부른다.
Other Storage Options : 파티셔닝 관련이다.
자동으로 하거나 내가 정하는 방법 두가지가 존재한다. 만약 내가 파티션닝을 하고자 한다면 /boot 폴더는 반드시 1GB 이상으로 설정해서 만들어놓자
네트워크 카드 중요
왼쪽에서 Automatically connect to this network는 반드시 해놓자
오른쪽에서 VMWare의 Default Gateway는 무조건 192.168.8.2로 해놓자
CentOS
CentOS 주요 폴더/파일들(Default)
여기에 작성되는것은 아래쪽에서 다루거나 안다룬것들을 포함한 모든 사용될 가능성 있는 폴더들
자세한 설명이 필요하ㄹ면 아래쪽에서 찾기
- 그냥 파일
~/.bashrc : bash를 쓸때의 alias들이 정의되어 있다
~/.zshrc : zsh를 쓸때의 alias들이 정의되어 있다
- var 폴더 관련
/var/log/secure : 컴퓨터 접근정보를 볼 수 있다.
- etc 폴더 관련
/etc/sudoers : sudo의 사용 권한들을 변경할 수 있다
네트워크 인터페이스 이름 변경(0110)
```
vi /etc/default/grup
```
들어가서 GRUB_CMDLINE 뒤쪽에 net.ifnames=0 biosdevname
아마 net interface names = 0, bios device name = 0
NIC이 꼽힌곳에 따라서 이름바꾸는 거 안하겠다. 바이오스의 이름에 따라서 결정하는 것도 안하겠다. 사용자가 정한 이름데로 하겠다는 의미이다.
그럼 이제부터는 ens32, ens33으로 처리되던 NIC이 내가 정한 이름으로 정할 수 있음
```
cd /etc/sysconfig/network-scripts
mv ifcfg-ens32 ifcfg-eth0
```
위와같이 9가지가 가장 중요하다
ip 도 바꾸어 주었다.
ONBOOT : 여기에 적힌 인터페이스를 활성화하겠냐는 건데 yes로 해야 사용가능해진다.
```
grub2-mkconfig -o /boot/grub2/grub.cfg
```
하면 네트워크 구성이 완료되었으니 재부팅해서 적용해보자
사용자와 그룹(0110)
리눅스와 유닉스의 기능으로 MA(MultiAccess)와 MT(Multi-Tasking)이 가능하다.
```
chown user1.dev abc.txt # 파일의 사용자와 그룹 소유권을 변경할 수 있다.
chmod -R 755 abc.txt # 파일 권한 변경
포트포워딩(0110)
위와같이 Host port와 Guest Port를 [DHCP Settings] > [NAT Settings] > [Add Network]로 수정할 수 있다.
포트포워딩을 하는 이유는 결국 보안 때문이다.
SELINUX(0110)
CentOS 내부에 존재하며 리소스에 대한 보안만을 전담하는 작은 보안 리눅스
리소스(cpu, ram), 기본포트, 설치기본디렉토리를 바꿀떄는 SELinux를 꺼야함
명령어
```
setenforce 1 # 재실행
setenforce 0 # 정지
getenforce # SELINUX 상태 확인가능
```
SELinux의 모드 설정
vi /etc/selinux/config 에서 수정
- enforcing : 강제
- permissive : 알림
- diable : 멈춤
enforcing 상태일때
- setenforce 0 : permissive
- setenforce 1 : enforcing
disable 상태일때
- setenforce 0 : disable
- setenforce 1 : disable
FIREWALL(0110)
```
systemctl start firewalld #지금실행
systemctl enable firewalld #자동실행
systemctl status firewalld #상태확인
firewall-cmd --zone=public --list-all #열린 포트확인가능
firewall-cmd --list-ports #열린 포트만확인가능
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=8888/tcp
firewall-cmd --reload #이걸 해야 적용된다.
systemctl restart firewalld #firewall 재실행
```
key-pair(0110)
```
ssh-keygen
```
하면
~/.ssh/id_rsa*
의 키가 생긴다.
sshd(0110)
설정파일
```
vi /etc/ssh/sshd_config
```
접속방법
```
ssh -p 20022 -l root 192.168.8.100
ssh -i id_rsa -p 20022 -l root 192.168.8.100
```
key-pair
보통 연결할때 key-pair을 이용하는데 접속하는 서버에서는 authorized_keys가 따로 존재한다. 이걸 전송하기 위해 두가지 방법을 쓴다.
1. scp id_rsa.pub 192.168.1.103:~/.ssh/authorized_keys
로 ssh로 키를 전달하는 방법
2. 처음부터 복사될 서버에 authorized_keys를 저장해 놓는것
그럼 접근시 그냥
```
ssh -l root 192.168.1.103 ip a | head -3
```
으로 간단하게 접근 가능해짐.
웹서버(apache, nginx - 0110,0111)
- 설정파일
vi /etc/httpd/conf/httpd.conf
- 명령어
```
yum install -y httpd
systemctl start httpd
systemctl restart httpd
systemctl stop httpd
systemctl enable httpd
systemctl disable httpd
systemctl status httpd
```
호스트네임 변경
vi /etc/hostname
기타 명령어들(Default)
- 에러난 곳 찾아내기
journalctl -xe #에러난 곳 찾아내기
- 마운트 확인
mount | grep nfs
- 서비스 포트번호 확인
vi /etc/rpc
여기에서 nfs 확인가능
InfraStructure
- LB - 서버 - NFS
Network
NIC 이 외부와 통신하지 않게 하는 가장 쉬운 방법은 게이트웨이를 적어주지 않는 것이다.
- 네트워크 끄고/키기(0110)
ifdown ens32
ifup ens32
Security
Protocols
Proxy
- PROXY : SQUID(0110)
- 환경 구성
NIC 3개 꽂히고 그 중 2개는 내부망을 위해 DNS랑 게이트웨이 안적음
# Starter Pack
rpm -qa | grep squid
yum install -y vim net-tools curl wget git tree nfs-utils httpd && yum update -y && poweroff
yum install -y squid # proxy 서버용
환경은 startpack 깔린 centos 한개랑 WIN10한개
Caching
Load Balancer(HAProxy)
실습 환경
WebServer
NFS
- server
vi /etc/exports에서 위와같이 사용할 폴더와 ip 그리고 속성을 작성
rw : read,write
sync : client 데이터 입력을 서버가 확인 및 메세지 전송
async : client 데이터 입력을 서버가 미확인
no_root_squash : 클라이언트의 작업도 root가 한 걸로 인정
```
yum install -y nfs-ufils
systemctl stop firwalld
systemctl disable firwalld
systemctl start nfs-server
```
- client
```
mount -t nfs 192.168.8.100:/cloud /test
```
- 로그확인
cat /etc/passwd | grep nfsnobody
위에서 알수없는 사용자를 확인할 수 있다.
- 마운트 확인
mount | grep nfs
- 해당 서버에 마운트 가능한지 확인
showmount -e 192.168.2.103
- nfs 서비스 포트번호 확인
vi /etc/rpc
여기에서 nfs 확인가능
- 재부팅 후에도 마운트 유지
1. ~/.bashrc 에 `mount -t nfs 192.168.8.100:/cloud /test` 를 적어놓기
2. /etc/fstab에 새로운 내용 추가
13번째 줄처럼
ip:/공유폴더 /마운트 위치
nfs : filesystem 방식
defaults : 읽고/쓰고/사용 가능
0 : 마운트되어 있는지 점검안함 (1 : 점검함)
0 : 점검순서 0순위