반응형

Hi, Ropez

넌 이제, 리눅스에서 iptables 사용법도 알고, 방화벽 룰 세팅 원리도 이해하고 있는데,

AWS의 기능으로 특정한 외부 IP를 차단하는 방법을 모른다고 했지?

AWS EC2 로 리눅스 등의 서버를 사용하고 있다면, 서버 OS내에서 iptables로 ip deny 하면 되겠지.

너가 말한 것처럼, AWS의 Console에서 VPC를 제어하는 Security Group 사용법을 배웠겠지만,

Security Group에서는 왜 안되나,

Security Group의 기본 구조는 White List 방식, 즉 기본적으로 모든 것을 막아두고, 일부만 지정하여 허용한다는 구조라서, http/https 서비스를 하는 환경으로 Security Group을 만들어 둔 상태에서, 특정 IP의 http/https 액세스를 막지는 못해. 최근에 이렇게 바뀐것 같은데, 허용하는 기능만 있고, 차단하는 기능은 없는게 Security Group의 특징이라서 그래.

예를 들어, EC2 instance에 리눅스 서버로 웹서비스를 구성하고, Security Group을 만든다면,

아래와 같이 http/https를 외부( source) ip를 all로 지정해서, 해당 프로토콜&포트번호&Source IP를 허용해준다는 뜻인데, 보통 이렇게 하쟌니? (다른 방법도 있을려나? 있다면 알려줘~)

위와 같이 설정한 상태에서,

외부(source)의 특정 IP에서 우리 시스템을 공격하는 것을 차단하기 위해, 특정 IP를 막는 룰을 쓸 수가 없지.

그러면, 어떻게 할까...

첫번째 방법은,

EC2에 설치된 서버 OS에서 iptables 같은 방화벽 기능으로 특정 IP를 deny 설정할 수 있지. 이 방법이 서버 엔지니어에겐 가장 편한 방법이겠지만, iptables의 list가 너무 많아지면 OS 응답성능에 영향을 상당히 준다는 건 알고 있겠지? 그리고, 모든 서버들의 iptables에 IP deny 설정을 다 해줘야되서, 관리의 불편함이 있지.

두번째 방법은,

VPC의 Security 기능 중에, Security Group말고, Network ACLs 라는 기능이야. Network ACLs는 물리적 인프라에서 방화벽과 같은 기능이야. Security Group과는 반대 개념으로, Black List 방식으로 동작해. 즉, 모든 것은 열어두고, 지정한 것만 막아주지. 외부의 특정 IP가 우리 VPC내의 어떤 것에도 액세스하지 못하게 막을 수 있지.

 IP 대역, Protocol, tcp/udp port range, deny/allow 선택이 가능해.

아래 화면의 규칙 80번과 같이, VPC를 선택하고, 인바운드규칙(Inbound rule)에서 규칙을 작성하면 되.

주의 할 점 두가지가 있는데,

첫번째 주의사항은,

규칙 번호 # 숫자가 작은 규칙이 먼저 적용된다는 점이야. 일반적인 방화벽과 동일한 구조니까.

how to use Network ACL in VPC of AWS

 

두번째 주의사항은,

  '휘발성 포트' 라는 기법인데, 위의 예제와 같이 인바운드 및 아웃바운드의 100번 규칙이 모든 트래픽을 ALLOW하고 있다면 관계없지만, 좀 더 디테일하게 ACL 룰을 설정한다면, 서비스 유형별로 아웃바운드의 응답 포트에 대한 고려를 해줘야해.
  좀 복잡하지만, 이 링크를 열어서 공부해두자구. https://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/vpc-network-acls.html

정리하자면, Network ACL의 장점은,

VPC내 모든 리소스에 적용되니까, 여러 서버에 세팅할 필요없지.

반대로 생각해보면, 모든 리소스에 영향을 미치는 정책이니 신중하게 결정하고 적용해야겠지? 그건 네 판단의 몫이야.

저장을 누르기 전에 한번 더 생각해보고 적용하도록 해~ 

직접하기 불안하면 사람 불러~ call me~

그럼, bye~

 

반응형

+ Recent posts