プロが教える店舗&オフィスのセキュリティ対策術

ウェブ公開に先立ち、必要最小限のiptablesの設定を行っているところです。
普段の運用として、スクリプトがこけた時にスマホにメールを送る処理があるのですが、これを許可するための設定をいろいろ試して、最終的に次の4行の追加で送信できるようになりました。
iptables -A OUTPUT -p tcp --sport 25 --dport 1024:65535 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 1024:65535 --dport 25 -j ACCEPT
iptables -A INPUT -p tcp --sport 1024:65535 --dport 25 -j ACCEPT
iptables -A INPUT -p tcp --sport 25 --dport 1024:65535 -j ACCEPT
しかし、この設定だとメールを送るのに10秒ぐらいかかります。
iptablesを停止すると一瞬で送れます。
あと書き方も何か冗長な感じがします。もっとスマートに2行ぐらいで行けそうな気もするのですが、いかがなものでしょうか。
やりたい事はsendmailでドコモのスマホにメールを送るだけのいたって単純な処理です。

質問者からの補足コメント

  • どう思う?

    blesの設定は冗長だなと感じていました。
    まあ2重の防御になるので、念のためここまで頑張って設定してきました。
    しかしルーターの内側にいるので外から攻撃される事はまずないと仮定して試しにiptablesなしで公開してみるのもアリだと思いました。

      補足日時:2022/06/07 10:57

A 回答 (6件)

No.4です。



>よってDNSに関する許可設定は問題なさげでしょうか。

そうですね、ありがちだったので例示してみましたが、別の原因のように思えます。ちなみに、メールでは大きなDNSパケットを扱うこともままありますので、TCPは通しておいた方がいいです。

本格的な診断が必要になりますが、少なくとも簡単に通る、通らない状況を再現できるとのことですので、tcpdumpコマンドなどを使ってパケットダンプを取って、上手くいく場合と行かない場合を比較してみるとわかると思います。もしくは、iptablesのログを取るようにする(DROPとかREJECTの箇所に仕掛ける)とかですね。具体的な方法は、ある程度トライアンドエラーが必要になる場合があるためここではこれ以上突っ込んだ説明はしませんが、真剣に原因を究明し解決したいけど自分の力では難しいということであれば、専門家に調査してもらうことをお勧めします。
    • good
    • 0
この回答へのお礼

できました!
tcpdumpは実行すると目にも留まらぬ速さでダンプデータがずっと流れ続けます^^
見るとこれはほぼSSH接続のパケットであることが分かり、SSHを介しての解析はしんどいと、いったん中断。
続いてiptablesのログを取ってみました。
するとポート113番の通信が行われていることが分かり、これをヒントにテストを重ねた結果、次の4行の設定を追加することで遅延なく即座にメールが送れるようになりました。
iptables -A OUTPUT -p tcp -s 127.0.0.1 --sport 1024:65535 -d 127.0.0.1 --dport 113 -j ACCEPT
iptables -A INPUT -p tcp -s 127.0.0.1 --sport 1024:65535 -d 127.0.0.1 --dport 113 -j ACCEPT
iptables -A OUTPUT -p tcp -s 127.0.0.1 --sport 113 -d 127.0.0.1 --dport 1024:65535 -j ACCEPT
iptables -A INPUT -p tcp -s 127.0.0.1 --sport 113 -d 127.0.0.1 --dport 1024:65535 -j ACCEPT

ポート113番はメールを送る時に何らかの認証を行うシステムだそうですが、ここで認証に失敗したとしてもメールの拒否はしないという意味不明な仕組みです。

DNSのTCPパケットについて少し調べました。
昔は512バイトを超える通信時にUDPだと失敗し、TCPで再リクエストするという手続きだったようですが、今はUDPで容量制限なく通信できるためTCPは使われていないとの事で、あえて開けなくて良いのかなと思ったのですが、どんなもんでしょう。

お礼日時:2022/06/09 13:17

No.5です。



できたようで何よりです。

ちなみに、

>tcpdumpは実行すると目にも留まらぬ速さでダンプデータがずっと流れ続けます^^
>見るとこれはほぼSSH接続のパケットであることが分かり、SSHを介しての解析はしんどいと、いったん中断。

tcpdumpにはフィルタ機能があり、ダンプ対象をホストやポートで絞り込むことも、特定の条件を除外することも可能です。一般的にはフィルタをかけてパケットダンプします。もしくは、今回のように未知のポートの通信による影響があることも考えて、ファイルに出力するといった方法もあります。これなら画面表示がやまびこのようにパケットダンプに乗るといったことも防げるでしょう。
    • good
    • 0
この回答へのお礼

シェルは一般的にSSH接続が前提のためtcpdumpにSSHを除外する機能があるとは思いましたが、そのやり方を調査するのがしんどかったため、先に第二の提案であるiptablesのログを試させてもらいました^^;

普段からアクセスログを見る癖がないため今回やすやすと質問してしまいましたが、この質問でiptablesのログの取り方を学習したため、iptablesの設定に関しては今後おいそれと質問する事は激減すると思います。

お礼日時:2022/06/09 19:13

10秒ぐらいというところからすると、他の通信で引っかかっている可能性があります。

メール送信でありがちなのが、DNSによる名前解決です。たとえばdomainをTCPしか通していなかったりしないでしょうか?

iptablesが動いている状態で、次のコマンドを打ったときに遅ければそれが原因の可能性があります。
$ dig oshiete.goo.ne.jp
    • good
    • 0
この回答へのお礼

DNSの許可は次の2行で設定してありました。
iptables -A OUTPUT -p udp --sport 1024:65535 --dport 53 -j ACCEPT
iptables -A INPUT -p udp --sport 53 --dport 1024:65535 -j ACCEPT
TCPではなくUDPの設定のみでした。
試しにTCPの設定を次の2行で追加して、DNSの許可設定を計4行としました。
iptables -A OUTPUT -p tcp --sport 1024:65535 --dport 53 -j ACCEPT
iptables -A INPUT -p tcp --sport 53 --dport 1024:65535 -j ACCEPT
しかし挙動の変化はなかったため、元の2行の設定に戻しました。

その状態で、
$ dig oshiete.goo.ne.jp
を実行しましたが、レスポンスは即座に返ってきました。

よってDNSに関する許可設定は問題なさげでしょうか。

お礼日時:2022/06/07 14:43

-m state --state NEW


とかつけるモノなんじゃないです?
新規接続に関しては制限掛けて、TCPの接続済みのパケットはそのまま通すものかと思いますが。
あと…TCPは記載されていますが、UDPはどうなんでしょう?
名前解決のパケット通っているんでしょうか??

破棄したパケットのログとか取ってみて、どのパケットが遅くなる原因なのか?を調べるのもアリかと思いますが。
# ただし、結構な量になるかもしれませんけど。

送れている様なので大丈夫なのかも知れませんが…メール送信で25番だけで大丈夫なんです?
認証やら必要でしょうし、INPUTで普通に受け入れているようですが…サーバ動いているなら第三者中継しないように設定されているんですよね??
# まぁ、第三者中継されようとしたらISP側でブロックしているかもしれませんけど。

ブロードバンドルーター(今どきだとWiFiルーター?)の内側にいるのであれば、ファイヤーウォールはそちらに任せるのが妥当だと思いますよ。
VPSで公開するならそうは行きませんけど。
    • good
    • 0
この回答へのお礼

すみませんiptablesについて、ごく断片的な知識しかないため-m state --state NEWなんてものは全然知りませんでした。
調べてみてもよく分かりませんでした。
メールって送信のたびに新規接続するものだと思っていたのですが、TCPの接続済みとはどのような状況を言うのでしょうか。

UDPはどうなんだろうと思い、単純に4行追加して次の計8行でテストしてみました。
iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT
iptables -A INPUT -p tcp --dport 25 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 25 -j ACCEPT
iptables -A INPUT -p tcp --sport 25 -j ACCEPT
iptables -A OUTPUT -p udp --dport 25 -j ACCEPT
iptables -A INPUT -p udp --dport 25 -j ACCEPT
iptables -A OUTPUT -p udp --sport 25 -j ACCEPT
iptables -A INPUT -p udp --sport 25 -j ACCEPT
しかし挙動は特に変わりませんでした。

ログの見方も良く分からないのですが、ひとまずiptableを停止した時と動かした時にそれぞれメール送信を行った場合に/var/log/syslogへの出力内容がどのように変化するかを監視してみました。
両者の違いはプロセス番号や時刻と、あとは暗号のような良く分からないIDの羅列がありますが、これは毎回変わっている感じなので関係なさげで、あとはドコモのサーバーのIPアドレスでしょうか、これも毎回変わりますがiptablesの設定とは関係なさげです。それ以外の箇所は同一でした。

メール送信が25番だけで大丈夫か私も知りたいです。
送信自体は出来ているので最悪放置でも実害はなさげですが、できれば知りたいです。
認証というのはよく分かりません。
メールサーバーを公開しているわけではなく、やっている事は単に自作スクリプトからメール送信しているだけで、認証を求められたことはありません。

確かにルーターの内側にいるので私も常々ipta

お礼日時:2022/06/07 10:56

なんか、前後の定義がないとはっきりしませんが、全体を晒すとセキュリティ的にアレですしね…


これってもしかしてiptablesが動いているホストとWebサーバーは同一ですか?
であれば、こういう定義でもいいのかも。
iptables -A OUTPUT -s 127.0.0.1 -p tcp --dport 25 -j ACCEPT

ちなみに、例えばメールコマンドで送った場合も同じ症状でしょうか?
https://minory.org/linux-sendmail.html
    • good
    • 0
この回答へのお礼

確かに私も読み返してみてiptablesのほんの一部の設定を抜き出しただけで、ここまで回答してもらってるのが逆にすごいなと思いました。
前後の定義を端折ったのはセキュリティを気にしていた訳ではなく、単に無精な事と、あまり長文だと回答者が減るという理由が主です。
しかし全体を晒すと確かにセキュリティも気になるので、メールに関係なさげな設定は端折らせてもらうとして、とは言っても関係ありそうなのは最初の方で設定している次の2行ぐらいでした。
iptables -P INPUT DROP
iptables -P OUTPUT DROP
さてiptablesが動いているホストとWebサーバーは同一なので、先の4行の設定はやめて、
iptables -A OUTPUT -s 127.0.0.1 -p tcp --dport 25 -j ACCEPT
の1行だけで試してみましたが送信できませんでした。
メールコマンドで送った場合も同じ症状でした。
すなわちiptablesなしだと一瞬で送れて、ありだと10秒ぐらいかかります。

お礼日時:2022/06/07 09:09

1024:65535というレンジの広い判定をさせているからじゃないでしょうか?


内→外の通信もデフォルト拒否なんですかね?
であれば、送るだけなら↓この1行でいいような気がしますが…
iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT

受信もあるなら↓これも追加で。
iptables -A INPUT -p tcp --dport 25 -j ACCEPT
    • good
    • 0
この回答へのお礼

iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT
の1行だと送れませんでした。
受信はありませんが、
iptables -A INPUT -p tcp --dport 25 -j ACCEPT
を追加して計2行でもテストしてみましたが、やはり送れませんでした。
例によってさらに、
iptables -A OUTPUT -p tcp --sport 25 -j ACCEPT
iptables -A INPUT -p tcp --sport 25 -j ACCEPT
を追加して計4行でテストすると、送ることはできます。
が、やはり遅いです。
謎です。

お礼日時:2022/06/07 01:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!