강좌
클라우드/리눅스에 관한 강좌입니다.
해킹&보안 분류

메일서비스 허용을 위한 iptables 필터링 규칙 설정

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

메일서비스 허용을 위한 iptables 필터링 규칙 설정





 

이번에는 SMTP, POP3 등 메일 서비스에 대해 알아보자.

 

 

SMTP서비스

 

SMTP, POP3등에 대해 알아보기 전에 메일이 전송되는 절차를 통해 SMTPPOP3의 작동방식을 알아보자.

 

user@xyz.co.kr를 사용하는 A 유저는 e-mail 주소가 id@abc.co.kr인 자신의 친구인 B에게 메일을 작성하여 발송하였다고 가정하면 메일은 다음과 같은 절차를 통해 전달될 것이다.

 

 

 

 

 

 

(1) A 유저가 작성한 메일은 메일 프로그램에서 지정한 SMTP 서버(보내는 메일서버) smtp.xyz.co.kr로 발송되었다.

 

 

 

 

 

(2) smtp.xyz.co.kr 서버에서는 A 유저가 보낸 메일을 메일 큐에 임시 저장한 후 수신 메일 주소가 abc.co.kr인 것을 보고, abc.co.krMX 질의 후 이 도메인의 메일 수신 서버가 mail.abc.co.kr인 것을 확인하여 이 서버로 메일을 발송하였다.

 

 

 

 

 

(3) id@abc.co.kr을 사용하는 B 유저는 아웃룩과 같은 메일 프로그램을 실행하여 받는 메일서버인 mail.abc.co.kr에 접속하여 자신에게 온 메일을 받는다.

 

 

 

 

 

 

daeea7d35d35fe5cbd9b166f8071af6f_1682916329_5804.png
 

[그림] SMTP작동 방식

 

통상적으로 SMTP는 메일을 발송하는 클라이언트 유저입장에서 보내는 메일서버라고 알려져 있지만 SMTP 서버 입장에서 보면 클라이언트 유저가 보내는 메일을 받아서 다른 메일서버(여기에서는 mail.abc.co.kr)에 접속하여 보내는 역할까지 하게 된다.




이때 mail.abc.co.kr 입장에서 smtp.xyz.co.kr가 보낸 메일을 받는 과정 역시 다소의 차이는 있지만 smtp.xyz.co.kr에서 클라이언트가 보낸 메일을 받는 것과 같이 SMTP의 기능이라 할 수 있다.




 

A 유저가 작성한 메일을 smtp.xyz.co.kr에서 허용하기

 

$IPTABLES -A INPUT -p tcp ! --sport 0:1023 --dport 25 -m state --state NEW -j ACCEPT

$IPTABLES -A OUTPUT -p tcp --sprot 25 --dport 1024: -m state --state ESTABLISHED -j ACCEPT

 

 

A유저 1024: ------------------>25 smtp.xyz.co.kr

       1024: <----------------- 25

첫 번째 룰은 smtp.xyz.co.kr 입장에서 위의 (1)번 절차를 생각하면 된다.

 

 

 

 

A 유저가 소스 포트로 1024 이후의 임의의 포트이면서 목적지 포트는 SMTP25번 포트로의 접속 시도 패킷을 허용하였다.

 

 

 

 

이때 서버의 상태추적 메모리에는 이와 관련된 패킷이 없이 첫 tcp 접속 요청이므로 상태는 NEW가 된다.

 

 

 

 

물론 접속 요청 패킷이므로 --syn이 추가되면 좀 더 구체적인 룰이 될 것이다.

 

 

 

 

여기에서 소스 포트를 0:1023이 아니라고 하였으므로(! --sport 0:1023) 1024이후의 포트라는 말, 1024:65535와 같은 의미가 된다.

 

 

 

 

그리고 두 번째 룰에서는 이에 대한 응답으로 소스 포트가 25가 되고 목적지 포트는 INPUT 룰의 소스 포트인 1024이후의 포트가 되며 상태는 요청에 대한 응답이므로 ESTABLISHED가 된다.

 

 

 

 

다음은 이의 프로세스를 tcpdump로 잡은 것을 보여주고 있다.

 

13:50:47.296585 eth0 < client.com.55951 > smtp.xyz.co.kr.smtp: S 3147867426:3147867426(0) win 5840 <mss 1460> (DF) [tos 0x10]

13:50:47.296849 eth0 > smtp.xyz.co.kr.smtp > client.com.55951: S 3147831648:3147831648(0) ack 3147867427 win 5840 <mss 1460> (DF)

 

 

다른 메일 서버로 나가는 메일 허용

 

$IPTABLES -A OUTPUT -p tcp --sport 1024: --dport 25 -m state --state NEW -j ACCEPT

 

$IPTABLES -A INPUT -p tcp ! --syn --sport 25 ! --dport 0:1023 -m state --state ESTABLISHED -j ACCEPT

 

smtp.xyz.co.kr 1024: ------------------>25 mail.abc.co.kr

                 1024: <----------------- 25

 

이번에는 smtp.xyz.co.kr 서버 입장에서 서버의 큐에 임시로 저장된 메일을 다른 외부 서버로 보낼 때의 프로세스를 생각해 보자. (2)번 절차를 생각해 보면 된다.

 

 

 

 

이때에는 smtp.xyz.co.kr 서버가 클라이언트 입장이 되므로 소스포트는 1024 이후의 포트가 되고 다른 서버(mail.abc.co.kr)25번 포트로 접속을 시도하게 된다.

 

 

 

 

상태추적 관점에서 (1)번 프로세스는 소스 및 목적지 정보가 다르므로 (2)번 프로세스와 아무런 관련이 없는 별개의 첫 시도이고 기존의 상태 추적 테이블에 이 프로세스와 관련된 접속이 없으므로 NEW가 된다.

 

 

 

 

그리고 이에 대한 응답이므로 SYN이 아니고(! --syn) 소스 포트는 25이며 목적지 포트는 OUTPUT의 소스포트인 1024 이후의 포트인 inbound 트래픽을 허용하여야 한다.

 

 

 

 

기존의 연결에 대한 응답이므로 상태는 NEW가 아니라 ESTABLISHED가 된다.

 

13:52:39.086239 eth0 > smtp.xyz.co.kr.56901 > mail.abc.co.kr.smtp: S 3262148232:3262148232(0) win 5840 <mss 1460> (DF) [tos 0x10]

13:52:39.086455 eth0 < mail.abc.co.kr.smtp > smtp.xyz.co.kr.56901: S 3290482349:3290482349(0) ack 3262148233 win 5840 <mss 1460> (DF)

 

이 역시 내부에서 외부로 나가는 트래픽이므로 ESTABLISHED가 허용되고 있고 OUTPUT의 기본정책이 허용되어 있다면 별도로 언급하지 않아도 허용된다.

 

pop3 서비스

 

만약 pop3 서비스를 제공한다면 외부에서의 pop3 접속도 허용하여야 할 것이다.

 

 

 

 

 

 

pop3 유저 1024: ------------------>110 mail.abc.co.kr

           1024: <----------------- 110

 

 

외부에서의 pop3 접속허용

 

$IPTABLES -A INPUT -p TCP --sport 1024: --dport 110 -m state --state NEW -j ACCEPT

$IPTABLES -A OUTPUT -p TCP ! --syn --sport 110 --dport 1024: -m state --state ESTABLISHED -j ACCEPT

 

앞의 절차에서 (3)번 프로세스처럼 메일 서버에 저장된 메일을 외부에서 받아갈 수 있도록 즉 pop3를 허용하고자 할 때의 설정이다.

 

 

 

 

첫 번째 룰의 경우 클라이언트는 1024 이후의 비 특권 포트가 사용되고 서버 쪽에서는 tcp 110번이 사용되며 SYN 패킷을 달고 들어오므로 상태는 NEW가 된다.

 

 

 

 

그리고 이에 대한 응답으로 소스 포트는 INPUT의 목적지 포트였던 110번이, 목적지 포트는 INPUT의 소스 포트였던 1024 이후의 비 특권 포트가 된다.

 

 

 

 

그리고 정상적인 요청에 대한 응답이고 이미 상태추적 테이블에는 관련 목록이 있으므로 상태는 ESTABLISHED가 된다.

 

 

 

 

위와 같이 설정할 때에는 모든 곳에서의 pop3 접속을 허용하므로 만약 특정한 IP 또는 IP 대역에서만 메일 확인을 허용한다면

$IPTABLES -A INPUT -p TCP -s 192.168.1.0/24 --sport 1024: 와 같이 특정한 IP 대역을 지정해 주면 보안을 더욱 강화할 수 있다.

 

 

 

 

 

 

같은 방식으로 방화벽이 클라이언트 입장이 되어 외부의 pop3 데몬에 접속하여 메일을 확인하는 프로세스에 대해서는 각자 같은 방법으로 룰을 작성해 보기 바란다.

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,043 명
  • 현재 강좌수 :  35,853 개
  • 현재 접속자 :  112 명