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 ルールをチェーンと番号で削除するには、次の手順を実行します。
-
行番号付きのルールを一覧表示するには、次のコマンドを実行します。
sudo iptables -L --line-numbers
-
ルールを削除するには、次のコマンドを実行します。
sudo iptables -D example_chain example_number
**注:**example_chain と example_number を、使用しているチェーンの名前とルール番号に置き換えてください。
-
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、22、80 をご使用のポート番号に置き換えてください。
現在のルールを表示するには、次のコマンドを実行します。
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 インスタンスへの接続に関する問題のトラブルシューティング