[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-users:24982] Re: ipchains のログ機能



こんにちは。張です.
ちょっと解説いたします.

 >こんにちは。松田陽一@三鷹です。
 >
 >> こんばんわ.張と申します.
 >
 >どうもです。^^
 >
 >> 内部からの要求に対する外部からの応答と,外部からの要求とを区別する
 >> 方法としては,UNIXでは1〜1023のポートは特権ポートとなっていて,通常
 >> のアプリケーションがそこから発呼することはないですから,乱暴に言えば
 >> 1〜1023のポートへのパケットは外部からの接続要求,1024以上のポート
 >> へのパケットは内部からの要求に対する応答とみなすことができます.
 >
 >え?
 >ということは、例えば smtp ならば、ポート25番は接続要求の時だけに
 >使って、それに対する返答、その後の通信は1024番以上の別のポート番
 >号を使う、というのでしょうか?

たとえば,ホスト foo から  %telnet hoge  としてから  %netstat  を実行してみると,
  tcp      0     27   hoge:telnet   foo:1046   ESTABLISHED
のように出ると思います.つまりクライアントfooの1046番ポートから,サーバhogeの
telnet(23)ポートに接続しているということですが,そうするとこの両者の間を流れる
パケットは,
                      source              destination
  foo  → hoge      foo:1046              hoge:23
    hoge → foo       hoge:23               foo:1046

のようになります.何が言いたいかというと,

・サーバ hoge の側からみると,
  外部からの接続要求は,サービスデーモンがlistenしているポート
  (通常,1〜1023のwell known portと呼ばれるポート)にきます.
  その後の通信も,このポートを通して行われます.

・クライアント foo の側からみると,
  外部(この場合なら hoge)への接続要求は,自分が発信したポート
  (この場合は 1046 )に向かって戻ってきます.

ご質問の smtp 接続についていえば,自分の MUA/MTA が外部の MTA へ
通信する場合,自分の側の1024番以上のポートを使って外部の25番ポート
へ接続します.このとき,外部からの応答は,自分の発信した1024番以上
のポートに返ってきます.
 逆に自分の MTA に向けて外部から接続してくる場合,これは自分の
25番ポートが呼ばれて,その後の外部からのパケットもすぺて25番ポート
にやってきます.
 ですから,自分から要求したセッションのパケットは1024番以上の
ポートに戻ってきて,外から要求してくるセッションのパケットは1023
番以下のポートにやってくる,とみなせるわけです.
(注:たしかに昔のsendmailなどは,自分から外部へ接続するときにも
   25番ポートから発呼していたような気もしますが,現在では
   セキュリティのため,あえて設定しない限り1024番以上から発呼
   するようになっているはずです・・・(要確認)
   もちろん ntpd のように,現在でも低位ポートから発呼するもの
   もないではないですが,いまでは例外的だと思います.)

 ですので,自分の側の1023番以下のポートをブロックすると,自分側
から外部への接続は自由に通過できるが,外部から自分への接続要求は
ブロックできる,ということになって,あと許可したいポートだけ
ルールを追加していく,ということにしております.

 >
 >> これをコーディングすると,
 >> 
 >>   #ipchains -A input -i eth2 -j inet-in
 >>    ・・・・(中略)・・・・
 >>   #ipchains -A inet-in -d 0.0.0.0/0 1024:65535 -p tcp -j ACCEPT
 >>   #ipchains -A inet-in -d 0.0.0.0/0 1024:65535 -p udp -j ACCEPT
 >>   #ipchains -A inet-in -d 0.0.0.0/0 smtp -p tcp -j ACCEPT
 >>   #ipchains -A inet-in -d 0.0.0.0/0 domain -p udp -j ACCEPT
 >>   #ipchains -A inet-in -d 0.0.0.0/0 http -p tcp -j ACCEPT
 >>       ・・・・(許可するポートを列挙)・・・・
 >
 >確認したいのですが、ここで「許可するポート」とは、
 >「『外部に対して』許可するポート」で良いのでしょうか?

そうですね.内部から外部に接続したときに,外部から戻ってくるパケット
は,こちらが呼び出しに使ったポート(通常,1024以上)に向けて戻って
きますから,ルール1,2ですでに許可されています.

-----------------------------------------------------
京都大学大学院医学研究科
感覚運動病態学講座 形成外科学領域     張 弘富