ステートフル・パケットインスペクション:iptablesテンプレート集 改訂版(2)(3/3 ページ)
この連載では、初心者にとってハードルの高いiptablesの設定を、テンプレートを用いながら紹介していきます。「習うより慣れよ!」の精神でまず試してみてはいかがでしょう。(編集部)
テンプレート4
サーバから送信されるパケットや
それに対する受信パケットは無条件で許可
・受信パケットは破棄。ただしステートフル性を確認し、サーバから送信されたパケットに関連するものは許可(1)
・送信パケットは基本的にすべて許可(2)
・ループバックアドレスに関してはすべて許可(3)
・メンテナンスホストからのping、メンテナンスホストへのpingを許可(4)
・メンテナンスホストからのssh(TCP 22)を許可(5)
・すべてのホストからのHTTP(TCP 80)を許可(6)
・サーバからのDNS問い合わせ(UDP 53)を許可(7)
テンプレート1〜3までは一貫して、サーバから送信されるパケットをすべて破棄してきました。そのためDNS問い合わせの例(テンプレート2)のように必要なものは、その都度、許可ルールを追加していました。厳密にパケット・フィルタリングを実施するならば、このように必要なサービスに対してのみ許可ルールを設定すべきです。
しかし今回は利便性を考え、サーバから送信されるパケットや、サーバからのリクエストに対する受信パケットは無条件で通過できるようにします。
テンプレート4の解説
テンプレート4ではデフォルトルールを見直し、サーバから送信されるパケットは無条件に通過を許可します。
17 /sbin/iptables -P OUTPUT ACCEPT
サーバが受信するパケットはステートフル性を確認し、サーバからのリクエストに対する受信パケットなら許可します。
35 /sbin/iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
新規接続パケットはsshやHTTPサービスに対するもので、それがSYNパケットなら受け入れます。ほかのサービスを公開したい場合は、サービスポート番号を変えるなど、同じ手順でルールを追加します。
39 /sbin/iptables -A INPUT -p tcp --syn -m state --state NEW -s $trusthost -d $myhost --dport 22 -j ACCEPT ... 43 /sbin/iptables -A INPUT -p tcp --syn -m state --state NEW -s $any -d $myhost --dport 80 -j ACCEPT
送信パケットは、UDP/TCPを問わず通過が許可されていますが、受信パケットに関してはデフォルトルールが破棄(DROP)となっています。TCPを使用する受信パケットは、ステートフル性を確認することでフィルタリングを行っていますが、UDPには3ウェイハンドシェイクのようなセッションを確立する手順がありません。そのため、使用するサービスごとにルールを追加する必要があります。
47 /sbin/iptables -A INPUT -p udp -s $any --sport 53 -d $myhost -j ACCEPT
改造のヒント:送信パケットでもステートフル性を確認する
サーバが送信するパケットに対しても、ステートフルインスペクションでフィルタリングを実施することができます。テンプレート4を基に修正を加えましょう。
送信パケットのデフォルトルールを破棄(DROP)に戻し、ステートフル性を確認し、NEW・ESTABLISHED・RELATEDの状態にあるパケットだけ通過を許可します。
/sbin/iptables -P OUTPUT DROP .... /sbin/iptables -A OUTPUT -p tcp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
TCPはステートフル性を確認することで不正なパケットを遮断できますが、UDPはステートフル性を確認できないため、必要なものだけ送信を許可するよう、その都度ルールを追加する必要があります。例えば、UDPを使用するDNSリクエストを送信できるようにするには、次のようにiptablesを実行します。
/sbin/iptables -A OUTPUT -p udp -s $myhost -d $any --dport 53 -j ACCEPT
次回予告
2回にわたり、iptablesのfilterテーブルを使ったパケットフィルタリングの例を紹介しました。
次回はnatテーブルを使ったNAT機能を取り上げます。NAT機能を使えばパケットのIPアドレス情報を書き換え、市販のブロードバンドルータと同じような働きをLinuxで実現できます。
Copyright © ITmedia, Inc. All Rights Reserved.
Linux & OSS 記事ランキング
- Linux Foundation、Chromiumエコシステムの開発を促進する「Supporters of Chromium-Based Browsers」を設立
- Sysdig、「クラウド版Wireshark」をうたう「Stratoshark」をオープンソースで公開
- Microsoft、WSLのアップデートを発表 新しい提供方式、tarベースのWSLディストリビューションアーキテクチャとは
- 「Llama2」やXの「Grok」などが不合格になったOSIの「オープンソースAIの定義 1.0」、その中身とは? 合格したAIは?
- Linux 6.8カーネル採用の「Ubuntu 24.04 LTS」リリース
- Linuxディストリビューション「Ubuntu 24.04.1 LTS」公開 新機能は? サポート期間は?
- 生成AIの採用率が高い組織ほどオープンソースへの依存度が高い? Linux Foundationが調査レポートを発表
- オープンソース技術に基づくべき生成AIのコンポーネントは何か Linux Foundation Japanが調査レポートを発表
- ドイツの州、3万台の自治体PCを「Linux」「LibreOffice」に移行すると発表
- 企業アプリケーションで最も広く使われているnpmパッケージとは? Linux Foundationとハーバード大学が調査