検索
連載

ステートフルパケットフィルタを使ったサービスの公開習うより慣れろ! iptablesテンプレート集(1)(4/6 ページ)

初心者にとって、iptablesは設定が最も困難な機能の1つである。そこで、学習の第1歩としてテンプレートを自分の環境に合わせて修正することから始めよう。(編集部)

Share
Tweet
LINE
Hatena

テンプレート3
ssh接続のステートフル性を確認(テンプレート1の改良)

・外部からの接続パケットは基本的にすべて破棄
・内部からの接続パケットは基本的にすべて破棄
・ループバックアドレスに関してはすべて許可
・メンテナンスホストからのping、メンテナンスホストへのpingを許可
・メンテナンスホストからのssh(TCP 22)を許可
・ただし、最初の接続時にSYNで始まらない接続パケットは破棄
・サーバからメンテナンスホストへのsshは許可しない

 iptablesの特徴であるステートフルパケットフィルタを使用し、より厳密なチェックを行います。ステートフルパケットフィルタとは、パケットの時間的な前後関係まで判断し、接続状態の追跡を行うパケット制限です。受信したパケットが既存の接続の一部なのか、新しい接続の最初のパケットなのかを見極めることができます。

図 3ウェイハンドシェイク
図 3ウェイハンドシェイク

 テンプレート3の想定環境においては、メンテナンスホストからサーバにsshで接続することはあっても、サーバからほかのホストへsshで接続する必要はありません。すると、接続の最初のパケットであるにもかかわらず、TCP接続の3ウェイハンドシェイクの状態であるSYN、SYN/ACK、ACKのうち、SYNでない状態「! --syn」が無効であることが自明となります。

 

テンプレート3の解説

 そこで、36行目では接続の最初のパケットであるにもかかわらずSYNでないパケット(つまり最初のパケットがSYN以外のパケット)を破棄しています。次の37行目で、パケットの状態が、

  • 新規(NEW)
  • 接続済み(ESTABLISHED)
  • 関連性(RELATED)

のもの(つまりINVALID:無効でないもの)で、メンテナンスホストから来たパケットを許可します。

36  iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
37  iptables -A INPUT -p tcp -m state --state NEW,ESTABLISHED,RELATED -s $trusthost -d $myhost --dport 22 -j ACCEPT

! --sync パケットにSYNフラグがない(「!」は否定を表す)
-m state --state NEW 新たな接続を開始するパケットか否かのチェック

 OUTPUTチェインは、そのままです。

38  iptables -A OUTPUT -p tcp -s $myhost --sport 22 -d $trusthost -j ACCEPT

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る