У меня есть CentOS-бокс с exim, я пытаюсь ограничить исходящие письма только одним доменом (скажем, 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 попытается отправить по IPv6 по умолчанию, прежде чем вернется к IPv4. Но я думаю, что проблема здесь не в iptables как таковых, а в том, как эти домены обрабатываются и ищутся. Фильтровать по IP-адресу практически невозможно, поскольку у крупных компаний есть различные приемы маршрутизации и BGP для снижения задержки и маршрутизации трафика на их домены.
Вместо этого я бы предложил вам настроить exim4 для отправки писем только на разрешенные исходящие домены, а затем перейти на что-нибудь еще, например, вот так:Блокировка исходящих писем некоторым пользователям в exim
решение2
Я думаю, что ваше общее представление о том, как это сделать, неверно. Такие темы обычно заполняют книги, но я попытаюсь объяснить вкратце:
Вы, вероятно, предполагаете, что почтовый сервер для domain.com
находится на том же IP-адресе, что и domain.com
он сам. Хотя это может быть правдой в некоторых (или даже во многих) случаях, в общем случае это не так.
Вместо этого есть записи в записях DNS домена, которые определяют, какой сервер (IP-адрес) обрабатывает почту для домена. Вы, возможно, уже видели записи 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 соответствующим образом.