スキップしてコンテンツを表示

Amazon EC2 Linux インスタンスへのトラフィックを許可するように iptables または nftables を設定する方法を教えてください。

所要時間3分
0

Amazon Elastic Compute Cloud (Amazon EC2) Linux インスタンスで実行されているアプリケーションまたはインスタンスへのトラフィックを許可するように iptables または nftables を設定したいと考えています。

簡単な説明

iptables と nftables を使用して、Amazon EC2 Linux インスタンスを含む Linux システム上のネットワークトラフィックを管理します。新しいデプロイには nftables を選択し、レガシー環境では iptables を使用してください。iptables について詳しくは、Ubuntu ウェブサイトの「IPTables の使い方」を参照してください。

解決策

iptables の設定

iptables サービスをインストールして有効にするには、次のコマンドを実行します。

sudo yum install iptables-services -y
sudo systemctl enable iptables
sudo systemctl start iptables

**注:**事前設定されたルールを使用して iptables をインストールした場合は、これらのルールをクリアして新しいルールを設定します。ルールを一覧表示するには、次のコマンドを実行します。

sudo iptables -L

すべてのルールをフラッシュするには、次のコマンドを実行します。

sudo iptables -F

特定のポートを開くには、次のコマンドを実行します。

sudo iptables -A INPUT -p tcp --dport example_port -j ACCEPT

**注:**example_port をご使用のポート番号に置き換えてください。

特定のポートのインバウンドトラフィックを特定の IP アドレスまたはサブネットに許可するには、次のコマンドを実行します。

sudo iptables -A INPUT -p tcp -s your_server_ip --dport example_port -j ACCEPT

**注:**your_server_ip を IP アドレスまたはサブネットに置き換え、example_port をポートに置き換えます。

ユースケースに基づいてポートとプロトコルを変更してください。一般的に使用されるポートとプロトコルは次のとおりです。

  • TCP ポート 80--HTTP サーバー
  • TCP ポート 443--HTTPS サーバ
  • TCP ポート 25--メールサーバー
  • TCP ポート 22--OpenSSH (リモート) セキュアシェルサーバー
  • TCP ポート 110--POP3 (ポストオフィスプロトコル v3) サーバー
  • TCP ポート 143--インターネットメッセージアクセスプロトコル (IMAP)--電子メールメッセージの管理
  • TCP/UDP ポート 53--ドメインネームシステム (DNS)

iptables ルールを一覧表示するには、次のコマンドを実行します。

sudo iptables -L

iptables ルールをチェーンと番号で削除するには、次の手順を実行します。

  1. 行番号付きのルールを一覧表示するには、次のコマンドを実行します。

    sudo iptables -L --line-numbers
  2. ルールを削除するには、次のコマンドを実行します。

    sudo iptables -D example_chain example_number

    **注:**example_chainexample_number を、使用しているチェーンの名前とルール番号に置き換えてください。

  3. iptables ルールを保存するには、以下のコマンドを実行します。

    sudo service iptables save

ルールセットは自動的に /etc/sysconfig/iptables に保存され、起動するたびに復元されます。

テーブルの設定

nft コマンドはテーブルとチェーンを自動的に作成しません。テーブルとチェーンは手動で作成する必要があります。nftables の詳細については、Red Hat Enterprise Linux (RHEL) ウェブサイトの「nftables 入門」を参照してください。

nftables をインストールして有効にするには、次のコマンドを実行します。

sudo yum install nftables -y
sudo systemctl enable nftables
sudo systemctl start nftables

nft コマンドを使用してテーブル、チェーン、またはルールを管理する

**前提条件:**以下のタスクを実行するには、sudo 権限を持っているか、ルートユーザーである必要があります。

各テーブルにアドレスファミリーを割り当てる必要があります。アドレスファミリーは、テーブルが処理するパケットタイプを定義します。

アドレスファミリーとそれらが一致するパケットは次のとおりです。

  • ip: IPv4 パケットのみと一致します。
    **注:**アドレスファミリーを指定しない場合、ip がデフォルトです。
  • ip6: IPv6 パケットのみと一致します。
  • inet: IPv4 パケットと IPv6 パケットに一致します。
  • arp: IPv4 アドレス解決プロトコル (ARP) パケットに一致します。
  • bridge: ブリッジデバイスを通過するパケットに一致します。
  • netdev: 入力からのパケットに一致します。

IPv4 パケットと IPv6 パケットの両方を処理できるように inet アドレスファミリーを含むテーブルを作成するには、まず test_rulesという名前のテーブルを作成します。次のコマンドを実行します。

sudo nft add table inet test_rules

受信ネットワークトラフィックを処理する INPUT という名前のベースチェーンを追加するには、次のコマンドを実行します。

sudo nft add chain inet test_rules INPUT '{ type filter hook input priority 0 ; policy accept ; }'

TCP ポート 443、22、80 を許可するルールを INPUT チェーンに追加するには、nft にルールを追加させたい順序で次のコマンドを実行します。

sudo nft add rule inet test_rules INPUT tcp dport 443 accept
sudo nft add rule inet test_rules INPUT tcp dport 22 accept
sudo nft add rule inet test_rules INPUT tcp dport 80 accept

**注:**TCP ポート 443、2280 をご使用のポート番号に置き換えてください。

現在のルールを表示するには、次のコマンドを実行します。

sudo nft -a list table inet test_rules

ハンドル 2 の既存のルールの前にルールを挿入するには、次のコマンドを実行します。

sudo nft insert rule inet test_rules INPUT position 2 tcp dport 8080 accept

**注:**2 を自分の位置に、8080 をポート番号に置き換えます。

ハンドル 2 の既存のルールの後にルールを追加するには、次のコマンドを実行します。

sudo nft add rule inet test_rules INPUT position 2 tcp dport 621 accept

**注:**2 を自分の位置に、621 をポート番号に置き換えます。

ハンドル 3 のルールを削除するには、次のコマンドを実行します。

sudo nft delete rule inet test_rules INPUT handle 3

**注:**3 を自分の位置番号に置き換えてください。

すべてのルールを削除するには、次のコマンドを実行します。

sudo nft flush chain inet test_rules INPUT

ルールセットを保存するには、次のコマンドを実行します。

sudo bash -c "nft list ruleset > /etc/sysconfig/nftables.conf"

関連情報

RHEL ウェブサイトで公開されている一般的な iptables コマンドと nftables コマンドの比較

Amazon EC2 Linux インスタンスへの接続に関する問題のトラブルシューティング

AWS公式更新しました 2年前
コメントはありません

関連するコンテンツ