ウェブサイト検索

Linux でサービスへのリモート アクセスを有効にするために Iptables ファイアウォールをセットアップする方法 - パート 8


Linux Foundation 認定プログラムの紹介

この LFCE (Linux Foundation Certified Engineer ) シリーズのパート 1 – Iptables について、ファイアウォールとは何か、つまり管理するメカニズムについて基本的に説明したことを思い出してください。ネットワークに出入りするパケット。 「管理する」とは、実際には次のことを意味します。

  1. 特定のパケットのネットワークへの出入りを許可または禁止するため。
  2. 他のパケットをネットワークのあるポイントから別のポイントに転送するため。

あらかじめ決められた基準に基づいて。

この記事では、基本的なパケット フィルタリングを実装する方法と、ファイアウォールに使用されるネイティブ カーネル モジュールである netfilter のフロントエンドである iptables を使用してファイアウォールを構成する方法について説明します。

ファイアウォールは広大なテーマであり、この記事は、ファイアウォールについて知っておくべきことをすべて理解するための包括的なガイドを目的としたものではなく、このトピックをより深く研究するための出発点であることに注意してください。ただし、このシリーズのパート 10 では、Linux でのファイアウォールの具体的な使用例をいくつか検討するときに、この主題を再検討します。

ファイアウォールは、旅客機がほぼ 24 時間年中無休で行き来する国際空港と考えることができます。個人のパスポートの有効性や出身国(いくつかの例を挙げると)などの多くの条件に基づいて、特定の国への入国または出国が許可される場合と許可されない場合があります。

同時に、空港職員は、税関を通過する必要がある場合など、必要に応じて空港内のある場所から別の場所に移動するように人々に指示することができます。

このチュートリアルの残りの部分では、空港の例えが役に立つかもしれません。先に進むときは、次の関係に留意してください。

  1. 人=パケット
  2. ファイアウォール=空港
  3. 国 #1=ネットワーク #1
  4. 国 #2=ネットワーク #2
  5. 職員による空港規制=ファイアウォールルール

Iptables – 基本

低レベルでは、チェーンまたはセンテンスにグループ化されたルールに基づいてパケットをどう扱うかを「決定」します。これらのチェーンは、パッケージが指定された条件に一致する場合に実行するアクションを定義します。

iptables が実行する最初のアクションは、パケットをどう処理するかを決定することです。

  1. 受け入れますか (ネットワークに通過させますか)?
  2. 拒否しますか (ネットワークへのアクセスを禁止します)?
  3. (別のチェーンに) 転送しますか?

このツールがなぜiptables と呼ばれているのか疑問に思われた方のために念のために言っておきますが、これはこれらのチェーンがテーブルに編成されており、フィルター テーブル が最もよく知られており、 3 つのデフォルト チェーンを使用してパケット フィルタリングを実装するために使用されます。

1. INPUT チェーンは、ネットワークに着信するローカル プログラム宛てのパケットを処理します。

2. OUTPUT チェーンは、ローカル ネットワークで発信され、外部に送信されるパケットを分析するために使用されます。

3. FORWARD チェーンは、(ルーターの場合のように) 別の宛先に転送する必要があるパケットを処理します。

これらのチェーンごとにデフォルト ポリシーがあり、パケットがチェーン内のルールのいずれにも一致しない場合にデフォルトで行うべきことを決定します。次のコマンドを実行すると、各チェーンに作成されたルールとデフォルトのポリシーを表示できます。

iptables -L

利用可能なポリシーは次のとおりです。

  1. 同意 → パケットを通過させます。チェーン内のどのルールにも一致しないパケットは、ネットワークへの侵入を許可されます。
  2. ドロップ → パケットを静かにドロップします。チェーン内のルールに一致しないパケットはネットワークに入ることができません。
  3. REJECT → パケットを拒否し、情報メッセージを返します。特にこれはデフォルトのポリシーとしては機能しません。代わりに、パケット フィルタリング ルールを補完することを目的としています。

どのポリシーを実装するかを決定する際は、上で説明したように、 各アプローチの長所短所を考慮する必要があります。万能の方法はないことに注意してください。 -すべての解決策。

ルールの追加

ファイアウォールにルールを追加するには、次のように iptables コマンドを呼び出します。

iptables -A chain_name criteria -j target

どこ、

  1. -A は Append (現在のルールをチェーンの最後に追加) を表します。
  2. chain_name は INPUT、OUTPUT、または FORWARD のいずれかです。
  3. ターゲット は、この場合に適用するアクションまたはポリシー (ACCEPT、REJECT、または DROP) です。
  4. 基準 は、パケットを検査するための一連の条件です。これは、次のフラグの少なくとも 1 つ (おそらくは複数) で構成されます。縦棒で区切られた括弧内のオプションは、互いに同等です。残りはオプションのスイッチを表します。
[--protocol | -p] protocol: specifies the protocol involved in a rule.
[--source-port | -sport] port:[port]: defines the port (or range of ports) where the packet originated.
[--destination-port | -dport] port:[port]: defines the port (or range of ports) to which the packet is destined.
[--source | -s] address[/mask]: represents the source address or network/mask.
[--destination | -d] address[/mask]: represents the destination address or network/mask.
[--state] state (preceded by -m state): manage packets depending on whether they are part of a state connection, where state can be NEW, ESTABLISHED, RELATED, or INVALID.
[--in-interface | -i] interface: specifies the input interface of the packet.
[--out-interface | -o] interface: the output interface.
[--jump | -j] target: what to do when the packet matches the rule.

弊社のテスト環境

最初の 2 つに次のテスト環境を使用して、これらすべてを 3 つの古典的な例にまとめてみましょう。

Firewall: Debian Wheezy 7.5 
Hostname: dev2.gabrielcanepa.com
IP Address: 192.168.0.15
Source: CentOS 7 
Hostname: dev1.gabrielcanepa.com
IP Address: 192.168.0.17

そしてこれが最後の例です

NFSv4 server and firewall: Debian Wheezy 7.5 
Hostname: debian
IP Address: 192.168.0.10
Source: Debian Wheezy 7.5 
Hostname: dev2.gabrielcanepa.com
IP Address: 192.168.0.15
例 1: DROP ポリシーと REJECT ポリシーの違いの分析

まず、ファイアウォールへの入力 ping 用のDROP ポリシーを定義します。つまり、icmp パケットは静かにドロップされます。

ping -c 3 192.168.0.15
iptables -A INPUT --protocol icmp --in-interface eth0 -j DROP

REJECT 部分に進む前に、INPUT チェーンからすべてのルールをフラッシュして、パケットがこの新しいルールによってテストされることを確認します。

iptables -F INPUT
iptables -A INPUT --protocol icmp --in-interface eth0 -j REJECT
ping -c 3 192.168.0.15

例 2: dev2 から dev1 への SSH ログインの無効化/再有効化

送信トラフィックを処理するときに、OUTPUT チェーンを扱います。

iptables -A OUTPUT --protocol tcp --destination-port 22 --out-interface eth0 --jump REJECT

例 3: NFS クライアント (192.168.0.0/24 から) による NFS4 共有のマウントの許可/禁止

NFSv4 サーバー/ファイアウォールで次のコマンドを実行して、すべての種類のトラフィックに対してポート 2049 と 111 を閉じます。

iptables -F
iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 2049 -j REJECT
iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 111 -j REJECT

それでは、これらのポートを開いて何が起こるかを見てみましょう。

iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 111 -j ACCEPT
iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 2049 -j ACCEPT

ご覧のとおり、トラフィックをオープンした後、NFSv4 共有をマウントできました。

ルールの挿入、追加、削除

前の例では、INPUT チェーンと OUTPUT チェーンにルールを追加する方法を示しました。事前定義された位置に挿入したい場合は、代わりに -I (大文字の i) スイッチを使用する必要があります。

ルールは次々に評価され、DROP または ACCEPT ポリシーが一致すると評価が停止 (またはジャンプ) することに注意してください。そのため、必要に応じてチェーン リスト内でルールを上下に移動する必要がある場合があります。

これを説明するために簡単な例を使用します。

次のようなルールを設けてみましょう。

iptables -I INPUT 2 -p tcp --dport 80 -j ACCEPT

INPUT チェーンの位置 2) (したがって、前の #2 を #3 に移動)

上記の設定を使用すると、ポート 2049 をチェックする前に、トラフィックがポート 80 に送信されているかどうかがチェックされます。

あるいは、ルールを削除し、残りのルールのターゲットを REJECT に変更することもできます (-R スイッチを使用)。

iptables -D INPUT 1
iptables -nL -v --line-numbers
iptables -R INPUT 2 -i eth0 -s 0/0 -p tcp --dport 2049 -j REJECT
iptables -R INPUT 1 -p tcp --dport 80 -j REJECT

最後に、重要なことですが、ファイアウォール ルールを永続的にするには、ファイアウォール ルールをファイルに保存し、起動時に自動的に復元する必要があることを覚えておく必要があります (選択した優先方法、またはファイアウォール ルールを使用する方法を使用します)。配布可能です)。

ファイアウォール ルールの保存:

iptables-save > /etc/iptables/rules.v4		[On Ubuntu]
iptables-save > /etc/sysconfig/iptables		[On CentOS / OpenSUSE]

ルールの復元:

iptables-restore < /etc/iptables/rules.v4		[On Ubuntu]
iptables-restore < /etc/sysconfig/iptables		[On CentOS / OpenSUSE]

ここでは、上記のデフォルト ファイルの代わりに iptables.dump というダミー ファイルを使用して、同様の手順 (ファイアウォール ルールを手動で保存および復元する) を確認できます。

iptables-save > iptables.dump

これらの変更をブート後も永続的にするには:

Ubuntu: iptables-persistent パッケージをインストールします。これにより、/etc/iptables/rules.v4 ファイルに保存されたルールがロードされます。

apt-get install iptables-persistent

CentOS: 次の 2 行を /etc/sysconfig/iptables-config ファイルに追加します。

IPTABLES_SAVE_ON_STOP="yes"
IPTABLES_SAVE_ON_RESTART="yes"

OpenSUSE: /etc/sysconfig/SuSEfirewall2 に、許可されたポート、プロトコル、アドレスなどをカンマで区切ってリストします。

詳細については、大量のコメントが付けられているファイル自体を参照してください。

結論

この記事で説明する例は、iptables の機能をすべて網羅しているわけではありませんが、受信トラフィックまたは送信トラフィックを有効または無効にする方法を説明することを目的としています。

ファイアウォールのファンの方は、このLFCE シリーズのパート 10 で、より具体的なアプリケーションを使用してこのトピックを再検討することに留意してください。

ご質問やご意見がございましたら、お気軽にお知らせください。