Docker Lab #5

반영환·2023년 6월 26일
0

Docker

목록 보기
14/18
post-thumbnail

Docker Week 4

iptables

iptables란 프로토콜 상태 추적, 패킷 검사, 속도 제한, 필터링 정책 등을 리눅스에서 기본적으로 제공하는 기능이다.

주로 패킷 필터링NAT 역할을 수행한다.

Docker에서 외부 네트워크와 통신하는데 중요한 역할을 한다.

Docker0가 여기에 등록되며 외부 네트워크가 Docker0로 찾아갈 수 있도록 iptables에 데몬을 등록한다.

패킷 처리

패킷은 먼저 외부 네트워크에서 우리 리눅스 서버 라우터에 도달한다. 이 구간에서 공인IP를 사설IP로 바꾸어 주어 패킷을 우리 서버 내부에서 사용할 수 있도록 한다.

NAT를 사용하는 이유

NAT란 IP 패킷에 적힌 소켓 주소의 포트 숫자와 소스 및 목적지의 IP 주소등을 재기록하면서 라우터를 통해 네트워크 트래픽을 주고 받는 기술이다.

NAT를 쓰는 이유는 여러 대의 호스트가 하나의 공인 IP 주소를 사용해 인터넷에 접속하기 위한 경우가 첫 번째이다.
외부에서 사설 네트워크의 IP주소를 모르기 때문에 직접적인 네트워크 공격을 하기 어려워진다.

두 번째는 첫 번째와 비슷한 이유로 부족한 IPv4주소 체계에서 다양한 노드를 네트워크에 연결하기 위해 사설망을 사용할 때 게이트웨이로 사용하기 위함이다.


Stateful Packet Filter Firewall 설정

iptables <-t 테이블이름> 명령어 룰 <타켓>

테이블 이름 : 어떤 기능을 서비스하냐에 따라 filter, nat, mangle

filter : 기본으로 적용되는 테이블로 INPUT, OUTPUT, FORWARD라는 세가지 체인을 가지는데, 모든 패킷은 이 세가지 체인을 통과한다.

  • INPUT : 외부에서 방화벽으로 들어오는 모든 패킷. inboud

  • OUTPUT : 방화벽에서 나가는 모든 패킷. outboud

  • FORWARD : 방화벽내의 다른 서버로 패킷을 전달

nat : NAT에는 POSTROUTING과 PREROUTING이라는 두 가지 체인을 사용한다.

  • POSTROUTIN : 방화벽 내부의 사설 IP를 사용하는 호스트의 패킷을 공인 IP 주소로 변 환하여 외부로 전달하는 공유기 역할

  • PREROUTING : 외부에서 방화벽으로 들어오는 패킷을 내부네트워크의 사설IP 주소를 사용하는 서버로 전달. 사설망에서 인터넷 서버를 운영할 경우 사용.

룰 설정 옵션

  • -p : protocol, tcp, udp, icmp 등을 지정. !를 이용해 특정 프로토콜을 제외

  • -s : source IP 주소나 네트워크의 IP 대역

  • -d : destination IP 주소나 네트워크의 IP 대역

  • -i : 패킷을 받는 네트워크 인터페이스

  • -o : 패킷이 나가는 네트워크 인터페이스

  • --{s,d} port : 패킷의 source port 또는 destination port --icmp-type : ICMP 패킷의 type을 설정

  • --limit : DoS 공격을 차단할 목적으로 사용되며 특정 시간동안 최대 미칭 회수를 정의함. 지정시간 은 second, minute, hour, day등이 있으며 10/minute인 경우 분당 최대 10회의 매칭을 의미

  • -m state : 상태추적을 할 때 사용. state에는 NEW ,ESTABLISHED, RELATED, INVALID를 지정할 수 있음.

    	- NEW : 새롭게 연결을 설정할 때의 상태
    	- ESTABLISHED : 이미 연결되어 있는 상태
    	- RELATED : 연결은 되었으나 중간에 포트가 바뀌는 상태(FTP)
    	- INVALID : 연결이 설정되지 않는 상태

Target : 롤에 매치되는 패킷을 처리하는 방법. jump를 의미하는 -j와 함께 사용.

  • ACCEPT : 패킷을 받아들임
  • DROP : 패킷을 버림(패킷이 전송된 적이 없던 것처럼) REJECT : 패킷을 버리고 이와 동시에 적절한 응답 패킷을 전송
  • LOG : 패킷을 syslog에 기록
  • RETURN : 호출 체인내에서 패킷 처리를 지속함




profile
최고의 오늘을 꿈꾸는 개발자

0개의 댓글