• 締切済み

postfixでメール送信できません

postfixでメール送信ができなくて困っています。 送信方法はmailコマンドです。 iptablesを切って実行すると送信できるので、iptablesの設定が原因だと想定しています。 解決できるようどうかお力添えをお願いします。 メールサーバの構築は以下のサイトを参考にしました。 http://morizyun.github.io/blog/postfix-centos-sakura-vps-aws/ ■環境 CentOS6.6 ■/etc/sysconfig/iptables (1)# mail以下を追加しました。 (2)IPアドレスはマスクをかけています。 # Generated by iptables-save v1.4.7 on Mon Mar 16 16:02:28 2015 # xxx.xxx.xxx.xxx/32 : localhost # yyy.yyy.yyy.yy/28 : company # zzz.zzz.zzz.zzz/32 : firewall *filter :INPUT DROP [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :LOGGING - [0:0] -A INPUT -i lo -j ACCEPT -A INPUT -s zzz.zzz.zzz.zzz/32 -d xxx.xxx.xxx.xxx/32 -p icmp -m icmp --icmp-type 8 -j ACCEPT -A INPUT -s yyy.yyy.yyy.yy/28 -d xxx.xxx.xxx.xxx/32 -p icmp -m icmp --icmp-type 8 -j ACCEPT -A INPUT -s zzz.zzz.zzz.zzz/32 -d xxx.xxx.xxx.xxx/32 -p icmp -m icmp --icmp-type 0 -j ACCEPT -A INPUT -s yyy.yyy.yyy.yy/28 -d xxx.xxx.xxx.xxx/32 -p icmp -m icmp --icmp-type 0 -j ACCEPT -A INPUT -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP -A INPUT -s zzz.zzz.zzz.zzz/32 -d xxx.xxx.xxx.xxx/32 -p tcp -m state --state NEW,RELATED,ESTABLISHED -m tcp --dport 53022 -j ACCEPT -A INPUT -s yyy.yyy.yyy.yy/28 -d xxx.xxx.xxx.xxx/32 -p tcp -m state --state NEW,RELATED,ESTABLISHED -m tcp --dport 53022 -j ACCEPT -A INPUT -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP -A INPUT -d xxx.xxx.xxx.xxx/32 -p tcp -m state --state NEW,RELATED,ESTABLISHED -m tcp --dport 443 -j ACCEPT -A INPUT -p udp -m state --state NEW,RELATED,ESTABLISHED -m udp --sport 53 -j ACCEPT -A INPUT -s 210.188.224.14/32 -p udp -m udp --sport 123 -j ACCEPT -A INPUT -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP -A INPUT -d xxx.xxx.xxx.xxx/32 -p tcp -m state --state NEW,RELATED,ESTABLISHED -m tcp --sport 80 -j ACCEPT # http -A INPUT -p tcp --dport 80 -j ACCEPT # mail -A INPUT -m state --state NEW -m tcp -p tcp --dport 25 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 110 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 587 -j ACCEPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A INPUT -m limit --limit 1/s -j LOG --log-prefix "[iptables INPUT] : " -A INPUT -j LOGGING -A OUTPUT -o lo -j ACCEPT -A OUTPUT -s xxx.xxx.xxx.xxx/32 -d zzz.zzz.zzz.zzz/32 -p icmp -m icmp --icmp-type 0 -j ACCEPT -A OUTPUT -s xxx.xxx.xxx.xxx/32 -d yyy.yyy.yyy.yy/28 -p icmp -m icmp --icmp-type 0 -j ACCEPT -A OUTPUT -s xxx.xxx.xxx.xxx/32 -d zzz.zzz.zzz.zzz/32 -p icmp -m icmp --icmp-type 8 -j ACCEPT -A OUTPUT -s xxx.xxx.xxx.xxx/32 -d yyy.yyy.yyy.yy/28 -p icmp -m icmp --icmp-type 8 -j ACCEPT -A OUTPUT -s xxx.xxx.xxx.xxx/32 -d zzz.zzz.zzz.zzz/32 -p tcp -m tcp --sport 53022 -j ACCEPT -A OUTPUT -s xxx.xxx.xxx.xxx/32 -d yyy.yyy.yyy.yy/28 -p tcp -m tcp --sport 53022 -j ACCEPT -A OUTPUT -s xxx.xxx.xxx.xxx/32 -p tcp -m tcp --sport 443 -j ACCEPT -A OUTPUT -s xxx.xxx.xxx.xxx/32 -p udp -m udp --dport 53 -j ACCEPT -A OUTPUT -s xxx.xxx.xxx.xxx/32 -d 210.188.224.14/32 -p udp -m udp --dport 123 -j ACCEPT -A OUTPUT -s xxx.xxx.xxx.xxx/32 -p tcp -m tcp --dport 80 -j ACCEPT # http -A OUTPUT -p tcp --sport 80 -j ACCEPT # mail -A OUTPUT -m state --state NEW -m tcp -p tcp --dport 25 -j ACCEPT -A OUTPUT -m state --state NEW -m tcp -p tcp --dport 110 -j ACCEPT -A OUTPUT -m state --state NEW -m tcp -p tcp --dport 587 -j ACCEPT -A OUTPUT -m limit --limit 1/s -j LOG --log-prefix "[iptables OUTPUT] : " -A OUTPUT -j LOGGING #-A LOGGING -m limit --limit 3/hour -j LOG --log-prefix "DROP:" -A LOGGING -j DROP COMMIT

みんなの回答

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.2

> mailコマンドはiptablesを設定しているサーバーで実行しました。 > iptablesを設定したサーバーから外へメールを送れない状況です。 なるほど、(そのサーバーから見ると)メール送信だね。 「だからメールの送信が出来ないと質問に書いてるだろぼけ」と思うなかれ。「メールが送れません」というQAをやる時にはまずそこの認識を全員で合わせるのがベストな初動だ。 で、そのサーバーからインターネットへのメール送信(私はこれをアウトバウンドメールと呼んでいる)が出来ない理由だけど、試してないので漏れがあるかも知れないし、余計な(=誤った)指摘があるかも知れない。思いついたのは以下の2つ。 ・OUTPUTの ESTABLISHEDに対するルールがない -A OUTPUT -m state --state NEW -m tcp -p tcp --dport 25 -j ACCEPT この行でTCPがハンドシェイクする前の、つまりそのサーバーからインターネットの25番に対するTCP接続要求は通るけどお互いがSYN/ACKを送信した後のOUTPUTパケットがドロップされているのではないだろうか。 ただ、私はOUTPUTに--state ESTABLISHEDなんてやった事ないのでそれができるかどうか分からない。TCPだからいけるような気はするんだけどね。ぜひ試してみていただきたい。 ・INPUTにこちらのポートは不定(任意)、あちらのポートが25であるパケットに対するルールがない そのサーバーがインターネットに対してSMTPクライアントになる場合、INPUTに--sport 25であるパケットの許可が必要だ。 なんだけど、ひょっとしたらこれは間違いかも。がちがちにルール盛り込んだサーバー作った事あるけどそこでもこんなルール書いたことないし。 ~~~~ ここから蛇足 ~~~~ iptablesのルール全般についてなんだけど、正直意味(意図)が不明なルールが多いのが気になる。UDPにstateがあるとか、ポート番号110番と587番の扱いとか、 -A INPUT -d xxx.xxx.xxx.xxx/32 -p tcp -m state --state NEW,RELATED,ESTABLISHED -m tcp --sport 80 -j ACCEPT の後でDROPなどの他のターゲットをはさむことなく -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT がきているとか。RELATEDとESTABLISHEDは基本許すなら上はNEWだけにすべきだしWebサーバーからのパケットは基本許すなら上はそもそもstateを指定する意味が分からない。逆に言うとNEWとRELATEDとESTABLISHED以外のパケットはこのルールにヒットしないがそれをどういう意図で行っているかが分からない。ステートにはNEWとRELATEDとESTABLISHED以外に何があってなぜそれをヒットさせたくないか説明できるだろうか。 (iptablesの)ルールを書く前にExcelか何かで行いたい設定をまとめてみるといいんじゃないかな。 それと、近くのiptablesに詳しい技術者に一度ルールを見てもらって指南してもらうといいと思う。

kaishaingotanda
質問者

お礼

返事が遅くなりまして申し訳ありません。 いろいろとご教示いただきありがとうございました。 結果的には以下が原因でした。 >・OUTPUTの ESTABLISHEDに対するルールがない 今回質問させていただいた背景として、以下のようなことがありました。 ・質問者のiptablesの知識は単純なポートの開閉ができる程度 ・設定は前任者から引き継いだが、詳細までは引継ぎできていない ・とりいそぎメール送信をできるようにしたかった 近くにiptablesに詳しい技術者がいなかったので、こちらで質問させていただいた次第です。 回答いただいたことにより、それぞれの意図を理解しないとダメだということが分かりました。 今回の件を参考に勉強していこうと思います。

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

おかしいのは -A INPUT -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP -A INPUT -s zzz.zzz.zzz.zzz/32 -d xxx.xxx.xxx.xxx/32 -p tcp -m state --state NEW,RELATED,ESTABLISHED -m tcp --dport 53022 -j ACCEPT -A INPUT -s yyy.yyy.yyy.yy/28 -d xxx.xxx.xxx.xxx/32 -p tcp -m state --state NEW,RELATED,ESTABLISHED -m tcp --dport 53022 -j ACCEPT -A INPUT -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP -A INPUT -d xxx.xxx.xxx.xxx/32 -p tcp -m state --state NEW,RELATED,ESTABLISHED -m tcp --dport 443 -j ACCEPT -A INPUT -p udp -m state --state NEW,RELATED,ESTABLISHED -m udp --sport 53 -j ACCEPT -A INPUT -s 210.188.224.14/32 -p udp -m udp --sport 123 -j ACCEPT -A INPUT -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP -A INPUT -d xxx.xxx.xxx.xxx/32 -p tcp -m state --state NEW,RELATED,ESTABLISHED -m tcp --sport 80 -j ACCEPT この辺のどこかなんだけど、これらの設定の意図はなんだべ? 一行一行目的(何を許可するルールなのか)を説明してくれないか。 --dport 53022が含まれる行については説明不要というかこんな設定内容をインターネットにさらしたら駄目じゃろ。 出来ないならそれはいいのでこの下についてだけ補足説明をいただきたい。 後、mailコマンドを入力したコンピューターとこのiptablesを設定しているサーバーは同じなのかな? ←本当に必要な補足情報はこちら。こちらの情報がないとどこが悪いのか確実には判断できない。つまり、そのiptablesを設定したサーバーから外へメールを送るのが出来ないのか、外からそのiptablesを設定したサーバーへメールを受け取る事ができないのかをはっきりさせた方がいい。一応前者だと受け取っているのだがそれで問題ないだろうか。

kaishaingotanda
質問者

補足

mailコマンドはiptablesを設定しているサーバーで実行しました。 iptablesを設定したサーバーから外へメールを送れない状況です。