haproxy 로 DDoS 방어하기

이전에 봤던 내용인데 급히 보고 싶을때 링크를 못찾아서 메모용 으로 작성.  https://www.haproxy.com/blog/application-layer-ddos-attack-protection-with-haproxy/ 모든 상황에 100% 대응 할 수 있는 방법은 아니지만 WAF나 ALB, Route53의 GeoLocation Routing등과 같이 다른 서비스와 병용 함으로서 어느 정도의 효과를 얻을 수 있을 듯 하다.

aws ec2 접속시 개인유저를 할당

 aws 는 기본적으로 amazon linux 가 시작될떄 ec2-user 가 설정되고, 지정한 keypair 의 public key를 cloud-init가 ec2-user의 .ssh 디렉토리에 배치한다. 이로서 ec2-user 의 private key를 가지고 있는 모든 유저가 ec2-user로서 ssh 접속이 가능해진다.

하지만 ISMS나 PCI DSS등 여러 시큐리티 규약에서 공용계정을 배제해야 한다는 요구사항이 들어 있다. 여러 솔루션을 조사 했지만 비용이 많이 들어가거나 유지보수가 어려운 등 적절한 게 없어서 고민하다가 aws-ec2-ssh 라는 패키지를 이용해서 스크립트를 조금 수정하는 것으로 어느정도 원하는 유저관리 시스템을 구축 할 수 있게 되었기 때문에 여기에 메모형식으로 남긴다.

aws-ec2-ssh

https://github.com/widdix/aws-ec2-ssh

  • IAM user를 추가하여 그룹을 지정
  • IAM user는 code commit 용 public key를 upload
  • sshd_config를 수정하여 지정한 유저의 public key로 인증
  • import_user.sh 를 실행하면 지정한 IAM group의 유저리스트를 이용하여 user를 추가
특별한 문제 없이 잘 작동하는 것 까지 확인은 했지만 문제는 한 유저에 지정가능한 그룹수에 제한이 있기 때문에 한 유저에 대해 지정가능한 어카운트 지정이 한계가 있다는 거다. 확인해 본 결과 iam user를 등록할 수 있는 group수는 변경할 수 없는 항목이니 이걸로는 좀 부족하다 느꼈다.

import_user.sh 를 뜯어 보니 아래와 같이 그냥 group의 유저리스트를 확인 하는 것 뿐이다.


for group in $(echo ${IAM_AUTHORIZED_GROUPS} | tr "," " "); do 
 aws iam get-group \ 
 --group-name "${group}" \ 
 --query "Users[].[UserName]" \ 
 --output text \ 
 | sed "s/\r//g" done


그래서 생각해 낸 방법이 해당 ec2에 접속을 허가할 iam user 리스트를 파일로 작성하여 s3에서 다운로드 하도록 하는 방법이다. 그리고 s3는 bitbucket 이나 github, gitlab 등을 이용하여 리뷰 및 승인 플로우를 넣어 놓으면 문제 없을 듯.

스크립트를 아래와 같이 수정한 후 정상적으로 작동하는 것을 확인하였다.


108: for group in $(echo ${IAM_AUTHORIZED_GROUPS} | tr "," " "); do 
109:  #aws iam get-group \ 
110:  #--group-name "${group}" \ 
111:  #--query "Users[].[UserName]" \ 
112:  #--output text \ 
113:  #| sed "s/\r//g" 
      aws s3 cp s3://bucketname/listfile -|cat
      echo ""
114: done 


152: #aws iam get-group \ 
153: # --group-name "${group}" \ 
154: # --query "Users[].[UserName]" \ 
155: # --output text
      aws s3 cp s3://bucketname/listfile -|cat
      echo ""

스크립트를 일부 수정하면 /etc/aws-ec2-ssh.conf 에 bucket name을 지정하는 것도 가능하다. 그외 ssm document 를 이용한 운영도 하고 있지만 개인 메모용이니 여기까지만.

댓글

이 블로그의 인기 게시물

curl 명령어 옵션

CISCO 2960s 초기화 후 기본 설정

AWS에서 zabbix를 이용한 autoscaling ec2 자동등록/자동삭제