태그 Archives: CentOS7

AWS – AMI 리전 복사

AWS 에서 생성하여 운영중인 EC2 를 AMI(Amazon 머신 이미지) 를 생성하여 다른 Region 으로 복사 할 수 있다.

즉 서버 이동이 리전을 이동하여 생성할 수 있기 때문에 많이 쓰이지는 않겠지만…

 

사용된 OS 는 CentOS 7 이고 AMI 복사 및 인스턴스 시작은 문제 없이 진행이 되었다.

리전간 복사한 AMI를 이용하여 인스턴스를 시작할 경우 SSH로 로그인을 할수 없는 경우가 발생 하였다.

2018-06-18_120712

발생한 사유는 selinux 의 fcontext 가 리전간 복제 후 인스턴스를 시작할때 풀려버리는 문제가 있다.

Server refused our key

Disconnected: No supported authentication methods available.

 

정상 값 ssh_home_t

비 정상 값 default_t

 

해결 방법은 아래와 같이 해결이 가능할 것으로 보인다.

  1. 원본 서버에서 selinux 를 disabled 시킨다. ( vi /etc/sysconfig/selinux )
  2. AMI를 생성 한다.
  3. AMI를 다른 리전으로 복사 한다.
  4. 복사된 AMI를 이용하여 인스턴스를 새롭게 띄운다.
  5. selinux 를 enforcing 시킨다.

 

아울러서 복사전에 다음과 같이 authorized_keys 파일의 컨텍스트를 선언해 두는것도 도움이 될 수 있다.

 

graylog 를 통한 syslog 통합 감사(audit)

graylog 는 syslog 처리를 위한 빅데이터 분석 솔루션이다. 기본적으로야 syslog 를 한곳에 적재하여 로그 감사를 하는 목적으로 사용한다.

물론 syslog 뿐만 아니라 웹로그등을 수집하여 분석하는것 역시 가능하다.

Mongodb + elasticsearch + java 를 사용하여 운영 되며 노드를 추가하여 다중 노드에서의 분석 처리가 가능하다.

2018-05-18_111423 위와 같이 대쉬보드를 만들어 한눈에 볼수 있으며 alert 설정을 통해 중요 특정한 이벤트 발생시 손쉬운 확인이 가능 하다.

graylog 의 권장 사항은 4GB의 램을 필요로 하나 구축테스트를 해본 결과 1GB 에 2GB 수준의 swap 으로 정상적인 운영이 가능했다.

오픈소스이기 때문에 유료 프로그램인 kiwi syslog의 라이선스 비용 대비 40% 수준이면 클라우드에 구축하여 운영할 수 있다.
(t2.micro / 1 core – 1GB RAM) CentOS7 에서 graylog 를 설치 하는 방법을 설명한다.

 

1. 가상 서버를 준비하고 기본적인 업데이트 및 hostname 지정 등을 한 뒤에 리부팅 한다.

 

2. 시스템 메모리 및 네트워크 튜닝값을 적용 한다.

 

3.  swap 을 생성한다.(aws-centos7 의경우 swap 설정되어 있지 않다.)

  • 프로그램 초기 설치시 selinux 충돌을 방지 하기 위해 임의 setenforce 0 명령어로 selinux 를 permissive 모드로 변경 후 진행 한다.

  • 재부팅 후에 swap 이 자동 적용 될수 있게 fstab 을 수정한다. ~]# vi /etc/fstab

 

4. elasticsearch 설치

 

5. mongodb 설치

 

6. mongodb 설정

  • mongdb 의 data 파일을 /free/mongo_data 에 적재할 예정 이기 때문에 conf 파일을 수정 하고 selinux 설정을 추가 한다.

 

7. graylog 설치

 

8. graylog 설정

  • conf 파일을 수정하기 전에 pwgen 을 이용하여 secret 값을 생성 하고 shasum 을 이용하여 관리자 패스워드 값을 생성한다.

~]# vi /etc/graylog/server/server.conf     ## 각 값을 찾아서 수정한다.

 

9. graylog 시작 및 systemd 등록

 

10. nginx 설치

  • 여기서는 손쉬운 http/2 구축과 brotli 이미지 압축 등을 위해 codeit – nginx 을 설치 한다.

 

11. nginx 설정

  • DH 파라메터파일을 생성 한다.

  • /etc/nginx/nginx.conf 파일을 수정한다.

  • /etc/nginx/conf.d/default.conf 파일을 수정한다.

 

12. let’s encrypt 를 이용하여 인증서 발급을 진행하였음.  ( https://www.enteroa.com/2016/03/12/lets-encrypt-설치-및-운용centos )

  • nginx 에서 location 으로 let’s encrypt 설정을 /var/www 으로 했기 때문에 아래와 같은 명령어로 인증서 발급이 가능 하다.

 

13. selinux 설정

 

14. graylog 설정

  • graylog 서비스가 모두 정상적이라면 웹접근을 통해서 로그인을 할 수 있다. 2018-05-18_140231
  • 로그인 한 뒤에 먼저 대시보드를 생성한다.
    2018-05-18_142706
  • 이후 input 생성을 하기위해 아래와 같이 설정 진행을 한다. 2018-05-18_140445
  • 기본적으로 아래 다섯 항목을 설정 한다.
    2018-05-18_140416
  • 설정을 하게 되면 input 이 생성되고 곧 running 상태가 된다.2018-05-18_141255

 

15. linux – rsyslog 설정 (UDP 설정)

  • ~]# /etc/rsyslog.conf 파일의 맨밑에 삽입 한다. ( @=UDP / @@=TCP )

  • rsyslog 을 재시작 한다.

 

16.  생성된 input 의 show recived messages 버튼으로 이동하면 아래와 같은 화면을 볼 수 있다. (검색 화면과 같다.)

  • 검색 일자를 선택하고 대쉬보드 추가를 할 수 있다.
    2018-05-18_143141

 

17. L3 – syslog 설정 (cisco)

  • cisco 스위치의 경우 input 생성을 할때 RAW/Plaintest UDP 를 선택해서 진행해야 한다. ( RFC3414 표준이 아님 )
  • 아울러 스위치는 일반적으로 분배의 목적으로 한개의 gateway 밑에 존재하므로 각 스위치마다 별도의 input 을 만든다
  • input 을 만들때 override source 옵션을 통해 특정된 port 에 들어온 메세지의 소스 호스트 네임을 알기 쉽도록 Office-L3 와 같이 설정한다.
  • 일반적인 switch 장비의 log 설정 방법은 아래와 같다.

 

취약점 패치 CVE-2017-5715, CVE-2017-5753, CVE-2017-5754

Intel cpu 의 Meltdown,

Intel, AMD, ARM 등 대부분의 cpu 취약점인 Specter 가 발견 되어 운영 중인 모든 컴퓨터 ( PC, 서버, 핸드폰 등등 ) 의 업데이트가 필요 하다.

시스템의 느려짐 ( 특히 I/O 속도 ) 이 발생한다고 하나..

간단한 자바스크립트 정도로 cpu의 시스템 에서 생성한 정보확인이 가능하다고 하니 꼭 진행하는 편이 좋다.

 

  • 서버 ( centos, ubuntu )

리눅스의 경우 커널 업데이트 이기 때문에 커널 업데이트 후에 시스템 재시작이 필요하다.

1.CentOS

2. Ubuntu

2018-01-10_14-35-57

위 스크린샷 화면은 ubuntu 설치할때 업데이트 설정에 따라 나오지 않을수도 있습니다.

 

  • 윈도우

1. 윈도우 10 사용자는 자동 패치 (KB4056892) 가 된다.

2018-01-10_15-48-59

2. 윈도우7 :  http://www.catalog.update.microsoft.com/Search.aspx?q=KB4056897

3. 윈도우8 :  http://www.catalog.update.microsoft.com/Search.aspx?q=KB4056898

 

PS. 아이폰의 경우 IOS 11.2.2 버전이 관련 패치 이며 가급적 패치 진행을 하는것이 좋을듯 ‘ㅅ’a

kernel 의 change log 를 확인하여 패치가 되었는지 확인한다.

openDMARC 설치

기존에 구글에 대량메일을 보내기 위한 opendkim 설치 및 운용 방법을 올렸었다.

DMARC (Domain-based Message Authentication, Reporting & Conformance)

DMARC는 SPF, DKIM의 검사 결과를 기초로 TXT 레코드의 내용에 따라 메일 발송 차단, 혹은 자신의 메일 도메인을 도용한 스푸핑 메일에 대한 보고 등을 설정할 수 있는 유용한 툴 이다.

 

사용법은 opendkim 보다 쉽지만 일부 설정값이 dkim을 필요로 함으로 dkim 과 dmarc 를 같이 진행하는것이 좋다.

 

설정을 위해서는 도메인이 있어야 하며

사전에 메일 발송서버의 IP 와 DNS A 레코드에 정식등록된 서버명이 필요로 한다.

여기서 설명은 서버아이피 123.123.123.123 의 호스트네임 mail01.enteroa.com 을 기준으로 설명 한다.

 

설치는 CentOS7 에서 진행을 하였습니다.

설치는 끝…

 

설치 완료 후 vi 를 이용하여 /etc/opendmarc.conf  파일을 수정 합니다.

 

sendmail.mc 파일의 하단에 opendmarc 필터를 추가합니다. (:8891 = open dkim) (:8893 = dmarc)

make를 하고 sendmail 을 재시작 합니다.

서버 설정이 끝났습니다.

 

다음은 DNS 설정으로 TXT 레코드 등록을 진행합니다. (서버연결롱 A 레코드 및 _dmarc TXT 레코드 입니다.)

 

시작서비스 등록 및 서비스 시작.

 

아울러 지속적인 운영을 위해 suffix 파일을 주기적으로 업데이트 해야 합니다.

 

구글의 DMARC 메뉴얼 입니다.

https://support.google.com/a/answer/2466563?hl=ko

아래는 dmarc wiki 입니다.

https://dmarc.org/wiki/FAQ#When_can_I_expect_to_receive_my_first_aggregate_report.3F

CentOS / ubuntu 계정 잠금 임계값 설정

서버에 접근을 할때 패스워드가 일정 횟수 이상 틀릴 경우 잠깐이라도 해당 계정을 잠금 처리 하는것이 사전 대입 방지(brute force attack) 공격에 대비 할 수 있다.

이방법은 pam.d 에 설정하는것으로 pam.d를 이용하는 모든 접속 서비스 sasl, pop3, smtp,ssh , ftp 에 공통 적용이 된다. (물론 pam.d 설정을 별도로 해서 쓴다면 이야기는 바뀌겠다.)

물론 이러한 사전 공격 대응 방법은 일반적으로 iptables 로직이나 hosts.deny 쪽에서 설정도 가능하지만…

최근 공격 방식은 port scan 이후에 ssh 공격4회 -> pop3 공격4회 -> smtp 공격 4회 -> ftp 공격 4회 의 순서로 이루어 진다.

즉 iptables 로 3 ~ 5회 제한으로 하는경우가 많기 때문에 프로토콜을 바꾸어 가며 로그인을 사전대입 공격을 하고 공격이후 일정시간 interval 이후에 다시 순차 공격을 한다.

때문에 이와 같은 설정을 추가로 한다.

pam_tally2 를 이용하여 CentOS 7 및 ubuntu 14.04 에 설정을 하는 방법이다.

  • CentOS 7

vi /etc/pam.d/system-auth   (2번째 줄은 변경, 13번째 줄은 추가 한다.)

vi /etc/pam.d/password-auth (2번째 줄, 8번째줄을 추가한다.)

  • Ubuntu 14.04 LTS

vi /etc/pam.d/common-auth (16번째줄을 추가한다.)

추가되는 줄의 deny=5 는 몇 회 틀렸을 경우 잠금을 할지 선언하는 부분이다.
unlock_time=600 잠금시간을 설정 한다. (10분=600초)


이후 적용되었는지 다른 세션을 열어 접속시도 및 잘못된 패스워드를 대입하면서 테스트 해볼 수 있다.

로그인 테스트를 하면서 패스워드 임계값 5회 를 초과한경우 아래와 같은 메세지를 볼 수 있다.

잠긴 상태이므로 설정한 10분을 기다린 뒤에 접속을 할수 있으며, 필요시 pam_tally2 명령어로 누적 카운트를 초기화 해줄 수 있다.