iptables가 아웃바운드 메일을 차단하지 않는 것 같습니다.

iptables가 아웃바운드 메일을 차단하지 않는 것 같습니다.

exim을 실행하는 CentOS 상자가 있습니다. 아웃바운드 이메일을 하나의 도메인(domain.com이라고 가정)으로만 제한하고 다른 모든 도메인으로의 메일은 차단하려고 합니다. domain.com(행 번호 6,7 및 8)으로의 아웃바운드 메일을 허용하는 특정 규칙을 추가했으며 출력 체인에 대한 기본 작업은 차단입니다. 그러나 여전히 메일은 Gmail, Yahoo 및 기타 도메인으로 전송됩니다. 내 iptables 규칙에 어떤 문제가 있나요?

아웃바운드 규칙은 다음과 같습니다.

    root@host1 [/tmp/logd]# /sbin/iptables -L OUTPUT -n --line-number -v
    Chain OUTPUT (policy DROP 0 packets, 0 bytes)
    num   pkts bytes target     prot opt in     out     source               destination
    1        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            192.x.x.x      /* test */
    2     3455  420K ACCEPT     tcp  --  *      *       0.0.0.0/0            23.x.x.x      tcp dpt:443
    3        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            104.x.x.x       tcp dpt:80
    4        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            104.x.x.x       tcp dpt:80
    5      0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            104.20.5.21         tcp dpt:80 /* www.spamhaus.org */
    6      0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            216.x.x.x      tcp dpt:25 /* allow mails to domain.com */
    7     69 16484 ACCEPT     tcp  --  *      *       0.0.0.0/0            216.x.x.x      tcp dpt:25 /* allow mails to domain.com */
    8     68 10803 ACCEPT     tcp  --  *      *       0.0.0.0/0            173.x.x.x      tcp dpt:25 /* allow mails to domain.com */
    9   800K  826M LOCALOUTPUT  all  --  *      !lo     0.0.0.0/0            0.0.0.0/0
    10      0     0 ACCEPT     tcp  --  *      !lo     0.0.0.0/0            0.0.0.0/0           tcp dpt:53
    11      0     0 ACCEPT     udp  --  *      !lo     0.0.0.0/0            0.0.0.0/0           udp dpt:53
    12      9   536 ACCEPT     tcp  --  *      !lo     0.0.0.0/0            0.0.0.0/0           tcp spt:53
    13   2147  313K ACCEPT     udp  --  *      !lo     0.0.0.0/0            0.0.0.0/0           udp spt:53
    14  11324   17M ACCEPT     all  --  *      lo      0.0.0.0/0            0.0.0.0/0
    15   797K  826M INVALID    tcp  --  *      !lo     0.0.0.0/0            0.0.0.0/0
    16   797K  826M ACCEPT     all  --  *      !lo     0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
    17      0     0 ACCEPT     icmp --  *      !lo     0.0.0.0/0            0.0.0.0/0           icmp type 0
    18      0     0 ACCEPT     icmp --  *      !lo     0.0.0.0/0            0.0.0.0/0           icmp type 8
    29      0     0 ACCEPT     icmp --  *      !lo     0.0.0.0/0            0.0.0.0/0           icmp type 11
    20      0     0 ACCEPT     icmp --  *      !lo     0.0.0.0/0            0.0.0.0/0           icmp type 3
    21    372 25376 LOGDROPOUT  all  --  *      !lo     0.0.0.0/0            0.0.0.0/0

답변1

이 상자에 IPv6도 있는지 모르겠습니다. 그렇다면 exim은 IPv4로 대체되기 전에 기본적으로 IPv6를 통해 전송을 시도합니다. 하지만 여기서 문제는 iptable 자체가 아니라 해당 도메인을 처리하고 조회하는 방식에 있다고 생각합니다. 대기업은 대기 시간을 줄이고 트래픽이 도메인으로 라우팅되는 방식을 줄이기 위해 다양한 라우팅 및 BGP 트릭을 사용하므로 IP 주소를 기반으로 필터링하는 것은 거의 불가능합니다.

대신 허용된 발신 도메인으로만 이메일을 보내도록 exim4를 구성한 다음 다음과 같은 다른 도메인으로 삭제하는 것이 좋습니다.exim에서 일부 사용자에게 보내는 메일 차단

답변2

나는 이것을 수행하는 방법에 대한 일반적인 생각이 잘못되었다고 생각합니다. 이러한 주제는 일반적으로 책을 가득 채우고 있지만 간단히 설명하겠습니다.

아마도 메일 서버가 자신 domain.com과 동일한 IP 주소에 있다고 가정할 것입니다 domain.com. 이는 일부(또는 많은) 경우에 우연히 사실일 수도 있지만 일반적으로 사실은 아닙니다.

오히려 도메인의 메일을 처리하는 서버(IP 주소)를 결정하는 도메인의 DNS 레코드 항목이 있습니다. 다음과 같은 DNS 레코드를 이미 본 적이 있을 것입니다.

domain.com.        1H MX 50    mail.domain.com
domain.com.        1H IN A     2.3.4.5
mail.domain.com    1H IN A     1.2.3.4

이는 의 메일 서버(예: mail.domain.com)가 자신 domain.com과 다른 IP 주소에 있을 수 있음 을 의미합니다 domain.com.

이제 이메일 소프트웨어 프로그램(MUA - 메일 사용자 에이전트라고도 함)에서 이메일을 보내면 MUA가 메시지를 Exim에 전달합니다. Exim은 메시지를 수신자에게 릴레이하려고 할 때 먼저 수신자의 도메인에 대한 메일을 처리할 메일 서버를 찾은 다음 해당 서버에 연결하여 메시지를 전달하려고 시도합니다.

이는 다음을 의미합니다.귀하의 방법으로 인해 전송이 차단될 수도 있습니다.어느이메일.domain.com은(는) 로 확인되지만 1.1.1.1의 메일 서버는 domain.com로(또는 확인) 있다고 가정합니다 2.2.2.2. 방화벽이 트래픽을 에만 전달하도록 허용하므로 1.1.1.1에도 이메일을 보낼 수 없습니다. domain.com에 대한 이메일은 domain.com에 전달되어야 하기 때문입니다 2.2.2.2.

이는 목표를 달성하기 위해 방화벽을 사용해서는 안 되는 다양한 이유 중 하나일 뿐입니다. @Fredrik Lundhag가 말했듯이 대신 Exim을 적절하게 구성해야 합니다.

관련 정보