CentOS ボックスで exim を実行しています。送信メールを 1 つのドメイン (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 自体ではなく、それらのドメインの処理方法と検索方法にあると思います。大企業では、レイテンシを短縮し、トラフィックをドメインにルーティングするためのさまざまなルーティングと BGP トリックがあるため、IP アドレスに基づいてフィルタリングすることはほぼ不可能です。
代わりに、次のような方法で、許可された送信ドメインにのみ電子メールを送信するように 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 がメッセージを受信者に中継しようとすると、まず受信者のドメインのメールを処理するメール サーバーを検索し、次にそのサーバーに接続してメッセージをそこに配信しようとします。
この意味はあなたの方法は送信を妨げる可能性がありますどれでもEメール。がdomain.com
に解決されます1.1.1.1
が、 のメール サーバーdomain.com
は にあります (または が に解決されます) 2.2.2.2
。ファイアウォールは へのトラフィックのみを通過させるため1.1.1.1
、 への電子メールは に配信される必要があるdomain.com
ため、domain.com
にさえ電子メールを送信できません2.2.2.2
。
これは、目的を達成するためにファイアウォールを使用すべきではないさまざまな理由の 1 つにすぎません。@Fredrik Lundhag が言ったように、代わりに Exim を適切に構成する必要があります。