정보통신공학과 노선변경기
리눅스 관리 6일차 find OpenSSH NTP Firewall 방화벽(firewall-config, firewall-cmd) 본문
리눅스 관리 6일차 find OpenSSH NTP Firewall 방화벽(firewall-config, firewall-cmd)
HEONPOLI 2021. 5. 18. 09:295.17 vol1 마저 끝내기
find, locate : 리눅스내 파일 검색 명령어
*find 명령어
모든 디렉토리 직접접근 하면서 검색
옵션을 이용해 다양한 기준으로 검색
장점: 새로만든, 다운로드한 파일 어떤 종류든 언제든지 바로 검색가능
단점: locate에 비해 속도가 느리다.
find [검색하고자하는 위치(생략가능)] [method] [추가적 command]
path 어떤작업방식 print / ls / exec / rm
print = 기본값
ls = 더 자세한 정보 find / -name fileA -ls
exec = 추가작업시 사용
find / -name fileA -exec ls -l {} \;
{} == find 검색한 결과물을 넣어주는 것
find / -name fileA -exec cp {} /tmp \; => 검색한 결과물을 /tmp밑으로 복사
find / -name fileA -exec rm {} \; => fileA 이름의 모든 파일 삭제
EX) 파일이름으로 찾기
find / -name fileA
/밑으로부터 fileA이름을 갖는 파일을 찾는다. 에러 무시= find / -name fileA 2> /dev/null
EX2) 파일 사이즈로 찾기
find / -size 10k == 10k 검색
단위를 붙이면 소수점 신경안쓴다. 반올림해서 검색한다. 9.8K도 10K검색의 결과로 나온다.
find / -size +10k == 10k 이상 검색
find / -size -10k == 10k 이하 검색
**다른 조건
권한으로 검색 -perm, 사용자로 검색 -user, 시간으로 검색 -ctime
*locate 명령어
현재 시스템에 어떤 파일들 읽어와서 데이터베이스로 저장해두고 필요한 경우 가져와서 동작시키는 것,
사전에 준비된 데이터베이스에서 검색하는 방식
장점: 검색속도가 빠름
단점: 기존에 없던, 새로만든 파일 검색 불가능
한계점: 파일 이름으로만 검색가능
*openssh
ssh는 데이터암호화 한다. 비대칭키 암호화, 대칭키 암호화 알고리즘 사용
대칭키 암호화 알고리즘: 암호화할 때와 복호화할 때 같은 키, 비밀키 사용
개인키: 비대칭키 - 나만 갖는 키 => 전달받은 비밀키를 해독하는 용도
공개키: 비대칭키 - 공유해주는 키 => 클라이언트가 비밀키를 암호화 하는 용도
비밀키: 대칭키 - 양쪽 다 갖는 키
**ssh 명령어
ssh root@localhost == ssh 사용자이름@접속할 시스템이름 혹은 ip주소
/etc/hosts 밑에 localhost 주소 있다. cat /etc/hosts로 확인
ssh root@localhost
공개키 내용을 복사해서 저장 == ~/.ssh 의 known_hosts 파일에 저장
known_hosts 파일이 있다면 공개키를 수신하겠냐는 경고안뜸
X11 포워딩, 그래픽도구사용
ssh -X 옵션 사용
원격으로 명령실행
ssh root@localhost hostname
*openssh 구성파일
**ssh 관련 디렉토리
# /etc/ssh/
key파일 = 개인키, 사용자만 읽고쓰기, group은 읽기
pub파일 = 공개키, 사용자만 읽고쓰기, group은 읽기, other도 읽기만
# /etc/ssh/sshd_config
키파일관련설정
로그관련설정
인증관련설정 = PasswordAuthentication 패스워드 인증 사용 유무 결정
no 로 설정하면 키 기반 인증 ssh-keygen 도 안됨, 다시 yes로 바꿔주고 해야함
PermitRootLogin 루트사용자 원격접속 시도 허용여부 설정
*키 기반 인증
장점: 일반 패스워드보다 더 복잡
사용자의 편의를 제공, passwd 없어도 접속가능하게 한다. (키 등록을 위해서는 패스워드 알아야함)
**명령어
ssh -keygen = 키 파일 생성 , 하고나면 개인키(600권한), 공개키(644권한) 파일이 생성된다.
ssh-copy-id = 접속하고자 하는 시스템에 전달
user04@localhost => user04에게 내 개인키 공개키를 복사해준다. (파일자체X, 내용인 키 값O)
키 파일 생성을 해서 갖고있는 사용자로부터 user04 로그인시에는 키 기반으로 접속을 할 수 있다.
passphrase : 키 파일에대한 암호값이라 생각, 그냥 엔터를 치면 키 파일만으로 인증
*****실습******
가상머신을 하나 추가(2개준비)
1.nmcli 명령어로 각 가상머신 ip설정 192.168.122.0/24 대역에서
server: 10 / client:20 으로 ip설정
2.사용자 추가: user01 / user02 , passwd 설정(나는 유저네임=비밀번호)
3.ssh 접속 테스트
- client( user01 ) -> server( root )
- client( user01 ) -> server( user02 )
- 키 기반인증 구성 : C( user01 ) -> S( user02/root)
- 다시 1,2 확인 (아마 패스워드 없이 접속가능)
- 설정값(/etc/ssh/sshd_config 들어가서 패스워드X, 키로만 접속가능하게
C( user01 ) -> S( user02 )
C( user02 ) -> S( user02 )
C( user01 ) -> S(모두 다)
C( user02 ) -> S( 모두 다)
- ROOT 접속을 제한
C->S (root) : 결과는 접속이 안되어야한다
- ROOT 접속을 키 기반 인증만 허용(without-password)
C->S (root) : 결과는 접속이 되어야한다
**************************************************************
내가 한것
1.nmcli modify [연결된 ethernet] ipv4.192.168.122.10/24 SERVER
nmcli modify [연결된 ethernet] ipv4.192.168.122.20/24 CLIENT
gateway, dns, method 모두 설정해주고 con up
2.useradd user01 user02
3.접속테스트
- 됨
- 됨
- user01 접속해서 ssh-keygen 하면 개인키 공개키 생성.
user01 안에서 ssh-copy-id user02@192.168.122.10
user01 안에서 ssh-copy-id root@192.168.122.10
키 기반인증 구성 완료
- 비밀번호 없이 키로 접속됨
- 서버에서 접속에 관한 설정을 바꿔줘야하므로 Server 에서 구성파일 /etc/ssh/sshd_config들어간다. 키로만 접속 = PasswordAuthenticaion no 로 바꿔준다.
키기반으로만 접속 가능할것, 패스워드는 접속 안돼,
C( user01 ) -> S( user02 ) 키로만 됨
C( user02 ) -> S( user02 ) 키 기반 없어서 안돼
C( user01 ) -> S(모두 다) user02, root 됨(키 기반인증 구성 해줬으니까), user01
키 기반인증 구성 안해줬으니 안돼
C( user02 ) -> S( 모두 다) 패스워드 없이는 다 안됨
- 루트 접속제한 = PermitRootLogin no 로 바꿔준다
systemctl restart sshd 해줘야 적용
client의 user01에서 server의 root 접속안됨
- 루트 키 기반인증만 허용 = PermitRootLogin without-password 로 바꿔준다
user02는 키 생성도 안하고 복사도 안했으므로 안되고
uesr01은 키 기반 구성 해줬으므로 접속된다
<<<*권장방식: root 접속은 모두 제한을 두고
sudo 권한이 있는 사용자만 키기반 인증 설정
키 기반만 접속 허용 => 불편하지만 안전한 방식>>>
*원격파일전송
cp : 로컬 파일 복사
scp: cp + ssh 결합된 명령어
sftp: ftp + ssh
**scp 사용법: scp [option] [원본파일들] [목적지]]
원격일 때: 사용자이름@주소:/PATH
ex) user01@192.168.122.10:/etc/passwd 이런식으로 작성
*NTP 서버관리
Network Time Protocol, 네트워크 이용 정확한 시간정보 받으오는 방식
시스템의 시간 동기화할 때 사용, 서버 구성할 때 사용
사용목적: 시스템의 정확한 시간이 필요할 때
시스템간의 시간을 동기화 할 때
NTP서버의 단계구분
stratum 0 => 1번 계층으로만 시간정보제공, 가장 정확한 시간정보 제공
stratum 1 => 0번 계층으로부터 시간정보수신, 과도한요청= 부하 올라감, 2번서버에게만 제공
stratum 2 => 1로부터 시간동기화, 높은 정확도
같은서버로 연결해야 딜레이가 발생하더라도 같은 딜레이가 발생하여 문제발생의 여지가 없다.
*chrony서비스
NTP 서비스 이용을 위한 ntp 도구
chronyd 가 돌아가고 있음 systemctl status chronyd
설정파일 /etc/chrony.conf
server : 시간 동기화 할 때 서버에서 시간을 받아와서 쓸거다..라는 뜻ㄹ
0,1,2,3 숫자까지 0.centos.pool.ntp.org 주소이다.
iburst: 동기화를 빠르게 해주는 역할
클라이언트의 입장에서 설정해줘야 하는것
*chronyc
chronyd 제어하는 명령어, 상태정보 및 설정 값 확인하고 변경
chronyc sources 어떤 서버에 연결되었는지 확인 가능
chronyc sources -v 로 자세한 용어확인 가능
*직접설정
system-config-date
*수동 시간 설정
시간설정을 동기화하거나 수동으로 바꾸고싶을 때
timedatectl 로컬시간뿐만아니라 chrony서비스에서 NTP서버에서 받아와서 쓸 수도 있다.
NTP 사용이유 = 리소스끼리 연결해줄 때 데이터를 불러온다. 시스템간의 시간을 동기화 하려할 때, chronyd 서비스로 구성
*방화벽 관리
외부시스템에서 내부 시스템으로의 접근중 인가되지 않은 네트워크 패킷을 차단해주는 보안 솔루션
**iptables : netfilter라는 커널 모듈 제어 하는 도구였는데
현재는 firewalld 를 리눅스 기본 방화벽 서비스로 제공한다
규칙 변경할 때마다 서비스 중지 후 재시작 해야한다 => 단점
오픈스택 or 가상화 환경에서 제약이 있다.
**firewalld :
장점 =
1.규칙 변경때마다 서비스 재시작될 필요없다.
2.미리 서비스이름에 서비스 포트를 매핑 해둔다
/etc/firewalld/services or /usr/lib/firewalld/services 밑에 서비스이름을 xml파일 형태로 만들어서 방화벽 관리해준다. port 나 protocol 기억 못하더라도 방화벽 설정 가능(xml 안에 다 들어있음)
3. 영역을 정의하여 영역마다 별도로 규칙을 설정할 수 있다.
**firewalld 특징
runtime 설정, permanent 설정은 따로따로 규칙을 정의해야한다
d-bus 인터페이스 사용, 서비스나 어플리케이션 방화벽 규칙 설정용이
**firewalld 사전에 정의된 영역
네트워크 연결에 대한 신뢰도를 정의
trusted : 모든 패킷 허용
block: 모든 패킷거부, 거부하지만 이유를명시함, 규칙수정 불가
dmz: 내부로 들어오는 패킷 거부, 변경가능
drop: 내부로 들어오는 모든 패킷 폐기, 이유를 명시X, 성능에 영향O, 규칙수정 불가
public: 운영체제 처음 설치시 기본영역, 기본적 인터페이스 규칙, Default Zone
기본영역 = 인터페이스 추가할 때 인터페이스에 대한 방화벽 규칙을 기본영역의 규칙으로 할당
**firewalld 동작원리
외부의 192.168.0.100 으로부터 firewalld가 설정된 시스템으로 ssh접속을 시도할 때..
1.접속을 요청받은 firewalld는 출발지에 해당하는 네트워크 규칙을 포함한 영역을 확인
만약 없다면 default 영역인 public영역으로 전달, public은 ssh서비스를 기본적으로 허용하므로 접속허용된다.
2.192.168.0.0/24 대역을 home영역에 추가하였을 대
접속을 시도 -> 출발지의 네트워크 대역을 포함한 영역확인 -> home에 해당 -> home은 http규칙 존재하지 않으므로 해당접속 거절
*firewall-config
*firewall-cmd
--add 규칙 추가할 때 사용
--change 규칙 변경할 때 사용
--get 확인할 때 사용(기본값 확인할 때 사용)
--list 영역별로 세팅되어있는 규칙들을 확인할 때 사용
--zone zone 생략시 public에 적용, --zone=work 이런식으로 work영역에 규칙추가 가능
--permanent firewall-cmd --add-service=http --permanent 이런식으로 붙여줘야 영구적용
--reload runtime 설정했던 것 다 지우고 permanent 설정했던 것을 runtime으로 덮어씌운다
firewall-cmd --state 실행상태확인
firewall-cmd --get-zones 사전정의 영역확인
firewall-cmd --get-services 사전에 정의된 서비스 확인
firewall-cmd --get-active-zones 활성화된 영역 확인
firewall-cmd --get-default-zone 기본영역 확인
firewall-cmd --list-all
firewall-cmd --list-all --zone=home home영역의 설정된 규칙 확인
*추가 변경
기본 영역 설정 => firewall-cmd --set-default-zone=home
인터페이스 추가 => firewall-cmd --add-interface=ens37 --zone=home
인터페이스 변경 => firewall-cmd --change-interface=ens37 --zone=home
--add-service, --add-port, --add-source
*리치 규칙(Rich Rule)
firewall-cmd --add-rich-rule 형식
firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.122.0/24 service name=ssh accept'
ssh접속을 저 대역에서의 접근 허용하겠다.
****실습*****
rich 규칙 실습 1235 리치룰로 설정
1) http 서비스를 모두 허용하도록 설정
2) nfs 서비스를 허용(단, 192.168.122.0/24에만)
3) work 영역에 samba 서비스를 거부하면서 syslog 를 분당
3개 씩 info 레벨로 기록하도록 설정하세요.
4) 내 시스템의 2000/tcp 포트로 접근하면 모두
192.168.122.20번 시스템의 2000/tcp 포트로 전달하도록 설정
5) 192.168.122.1 시스템에서 내 시스템의 3000/tcp 포트로
접근하면 모두 192.168.122.20번 시스템의 2021/tcp 포트로
전달하도록 설정
******************************
내가 한 것
1) firewall-cmd --add-rich-rule='rule family=ipv4 source address=0.0.0.0/0 service name=http accept'
2) firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.122.0/24 service name=nfs accept'
3) firewall-cmd --zone=work --remove-rich-rule='rule service name="samba" log prefix="reject" level=info limit value="3/m" reject'
4) firewall-cmd --zone=work --add-rich-rule='rule forward-port port=2000 protocol=tcp to-port=2000 protocol=tcp to-addr=192.168.122.20'
5) firewall-cmd --zone=work --add-rich-rule='rule family=ipv4 source address=192.168.122.1 forward-port port=3000 protocol=tcp to-port=2021 to-addr=192.168.122.20'
강사님 답
1)
# firewall-cmd --add-service=http
# firewall-cmd --add-rich-rule='rule service name=http accept'
2)
# firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.122.0/24 service name=nfs accept'
3)
# firewall-cmd --add-rich-rule='rule service name=samba log prefix=abc level=info limit value=3/m reject' --zone=work
4)
# firewall-cmd --add-forward-port=port=2000:proto=tcp:toaddr=192.168.122.20
5)
# firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.122.1/32 forward-port port=3000 protocol=tcp to-port=2021 to-addr=192.168.122.20'
******실습***********
1. 가상머신에 인터페이스 추가
1) 그냥추가
2) default-zone 변경 후 추가
2. 인터페이스 영역 변경
1) change 옵션으로
2) remove/add 옵션으로
3. 접근 규칙 설정
1) ssh 서비스를 허용X
2) ssh 설정파일에서 다른포트로 변경 후 ssh 서비스 등록
3) ssh에 대해 포트번호로 접근 허용등록
4) 가상머신에서만 원격접속가능하게 주소로 접근제어
*************************************
내가한것 add, remove, change 할 때 zone 지정 안해주면 default zone에 수정 삭제 추가가 된다
1.
1) 추가함 ens15
2) firewall-cmd --set-default-zone=home 하고 ens16추가
firewall-cmd -get-default-zone 으로 확인
2.
1) firewall-cmd --change-interface=ens15 --zone=public
2) firewall-cmd --remove-interface=ens16 --zone=home
firewall-cmd --add-interface=ens16 --zone=public
3.
1) firewall-cmd --remove-service=ssh 하면 원격접속 못함
2) setenforce 0 (selinux, 나중에 다룸) 하고 systemctl restart sshd
3) /etc/ssh/sshd_config 들어가서 port 57로 수정해줌
firewall-cmd --add-service=ssh
firewall-cmd --add-port=57/tcp
원격접속 => ssh user@192.168.122.20 -p 57 포트번호 지정하여 원격접속
4) firewall-cmd --add-source=192.168.122.0/24 특정대역 접근허용격
가상머신을 특정하려면 firewall-cmd --add-source=
*******실습************
1. public을 기본영역으로 설정
2. eth0 - public | ens12 - work | ens13 - internal 에 할당
3. public 영역에는 ssh, dns, nfs, ntp 만 허용(ssh, dns는 영구)
4. work 영역에는 ssh로 192.168.0.0/24에서만 접근허용
5. internal 영역에는 192.168.10.10/32 에서의 모든 패킷 허용
*************************
내가한것
1. firewall-cmd --set-default-zone=public
2. firewall-cmd --change-interface=ens12 --zone=work
2.1. firewall-cmd --change-interface=ens13 --zone=internal
3. firewall-cmd --add-service=ssh --permanet
3.1. firewall-cmd --add-service=ssh --permanet
3.2. firewall-cmd --add-service=dns --permanet
3.3. firewall-cmd --add-service=nfs --permanet
3.4. firewall-cmd --add-service=ntp --permanet
4. firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.0.0/24 service name=ssh accept' --zone=work
5. firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.10.10/32 accept' --zone=internal
'Sub3_리눅스 관리' 카테고리의 다른 글
리눅스 관리 8일차 NFS (0) | 2021.05.21 |
---|---|
리눅스 관리 7일차 SELinux, semanage (fcontext, port) context type 중심, 포트레이블(Port Label) (0) | 2021.05.18 |
리눅스 관리 5일차 로그관리 journalctl 로그규칙 yum (0) | 2021.05.14 |
리눅스 관리 4일차 systemd systemctl 부트프로세스 네트워크관리(nmcli) (0) | 2021.05.13 |
리눅스 관리 3일차 swap, 볼륨관리, fstab 작성, LV, PV, VG 관련명령어 (0) | 2021.05.12 |