며칠동안 회사의 네트웍을 AWS로 옮기면서 처음에는 쉽게 생각했으나, 알면 알수록 참 할것이 너무 많다는 것을 알게되고 또 시간도 걸리고있다. 하지만 많은 가능성을 피부로 느끼게되어 끝장을 보려고한다.  가장먼저 만나게된 적은 VPC라는 서비스인데 평소에 내트웍에대해서는 기본적인 내용만 알고 있다가 VPC를 구성하려하니 참 네트웍에 대해서 아는게 별로 없다는 생각을 하게된다.

 

VPC를 구축하면서 보지않아도 뻔한것이 보안내용이 좀더 엄격해지면서 개발자 들로부터 듣게될 컴플래인이다.  의사소통도 어려운데 난감한 사항이 될것 같아서 구멍을 찾게 되었는데, 가장먼저 개발자들에게 기본 쿼리툴들을 변경없이 사용하기 위해서는  (AWS RDS Private Subnet 영역에 두게되면 데이터베이스에 Public subnet에 접속후 쿼리를 해야하므로 불편할 것이다.) 뭔가 조치가 필요했다. (일단 개발 환경은 그냥 편하게 쓰라도 열어두었다.)

 

다음은  NAT 서버에서의 iptables 를 조작하여 클라이언트(개발자들)로부터 오는 요청을 NAT서버를 경유하게 하여 내부 사설망으로 RDS에게 요청을 보내고 응답을 받을수 있도록 하는 과정이다.

 

 

.새로운 Policy Rule 적용

 

1. NAT (Located on Public Subnet)서버에 로그인한다.

 

2. NAT 서버에서 iptables를 조작하여 3306 요청을 내부 사설망에 위치한 RDS로 요청을 하도록 한다. 

AWS RDS는 명시적으로 IP Address를 보여주지 않는 것 같다(잘은 모르지만), DS  Endpoint의 도메인 명을 이용하면 어떤 내부 IP를 사용하는지 알수 있다. 

 

** RDS 의 서버 타입(업그래이드 등으로인한)을 바꾸는 경우 IP가 변경되니 주의 하자!

root@prod.nat1:~# iptables -t nat -I PREROUTING -p tcp -i eth0 --dport 3306 -j DNAT --to 10.213.23.243:3306

root@prod.nat1:~# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

root@prod.nat1:~# iptables -t nat -L --line-numbers                                                          

 

위의 세번째 행의 명령은 적용된 룰을 출력하는 명령행이다.

 

3. 데이베이스 접속시 데이터베이스 서버 대신 해당 NAT서버를  Key-in 하면 된다.

 

 

 

. 적용된 Policy Rule 취소

1. 다음 명령으로 현재 적용된 룰을 확인한다.

root@prod.nat1:~# iptables -t nat -L --line-numbers

Chain PREROUTING (policy ACCEPT)

num  target     prot opt source               destination

1    DNAT       tcp  --  anywhere             anywhere             tcp dpt:mysql to:10.213.13.87:3306

 

Chain INPUT (policy ACCEPT)

num  target     prot opt source               destination

 

Chain OUTPUT (policy ACCEPT)

num  target     prot opt source               destination

 

Chain POSTROUTING (policy ACCEPT)

num  target     prot opt source               destination

1    MASQUERADE  all  --  anywhere             anywhere

2    MASQUERADE  all  --  anywhere             anywhere

 

 

2. 확인된 룰을 확인한다음, 체인 타입(여기서는 PREROUTING)과 번호를 파라미터로 넘겨서 삭제 하면 된다.

root@prod.nat1:~# iptables -t nat -D PREROUTING 1

 

*** 물론 NAT서버와 관련된 Security Gorup 이라든가, Network ACL등과 같은 보안설정을 적절하게 설정해줘야한다.

 

 

적용된 Policy Rule 저장

 

iptables 명령과 함께 생성된 규칙은 메모리에 저장되어 있다. iptables 규칙 모음을 저장하기 전에 시스템을 재시작할 경우, 모든 규칙이 삭제됩니다. 시스템 재부팅을 통한 넷필터 규칙은 저장되어야 한다. 넷필터 규칙을 저장하기 위해 root로 다음의 명령을 입력해야 한다.

 

root@prod.nat1:~# /sbin/service iptables save 

      

이는 iptables init 스크립트를 실행하고, /sbin/iptables-save 프로그램을 실행하며 현재 iptables 설정을 /etc/sysconfig/iptables에 기록한다. 기존의 /etc/sysconfig/iptables 파일은 /etc/sysconfig/iptables.save로 저장된다.

 

다음번에 시스템이 부팅할 때, iptables init 스크립트는 /sbin/iptables-restore 명령을 사용하여 /etc/sysconfig/iptables에 저장된 규칙을 재적용한다.

 

/etc/sysconfig/iptables 파일에 커밋하기 전에 새로운 iptables 규칙을 테스트하는 것이 좋지만, iptables 규칙을 이 파일의 다른 시스템의 버전에 있는 파일로 복사하게 될 수 있다. 이는 iptables 규칙 모음을 여러 컴퓨터에 배포하는 지름길을 제공한다.

 

배포, 백업, 또는 기타 다른 목적을 위해 iptables 규칙을 분리된 파일에 저장할 수 있다. iptables 규칙을 저장하기 위해, root로 다음의 명령을 입력해야만 한다.





Posted by Steven J.S Min
,