iptables:サーバーを保護するためにLinuxファイアウォールを構成する方法

iptables:Linuxファイアウォールを構成する方法

iptablesは ファイアウォール に使用 Linuxベースのオペレーティングシステム。 近年、デフォルトでnftablesがインストールされていますが、iptables構文を使用して、Debianなどのオペレーティングシステムでファイアウォールを構成できます。 Ubuntu Linuxをベースにしている場合は、ルーターのファイアウォールもあります。 ローカルネットワークを侵入から保護するには、iptablesを知ることが非常に重要です。これは、iptablesを使用すると、必要なトラフィックを許可または拒否できるようになるためです。 今日この記事では、iptablesがどのように機能するか、および高度な使用例について説明します。

iptablesの主な機能

iptablesは、ネットワーク上でファイアウォールまたはファイアウォールとして機能するソフトウェアです。 これはオペレーティングシステムの非常に重要な部分であり、許可されたアクセスを許可し、許可されていないアクセスをブロックするように特別に設計されています。 ファイアウォールは、着信パケットと発信パケットの両方の制御ポイントを確立します。 さらに、ファイアウォールが異なるネットワークを通過するトラフィックから保護することを示すことは非常に重要ですが、同じサブネット内で発生する攻撃からローカルネットワークを保護するわけではありません。 。

iptablesはバージョン2.4以降のLinuxシステムに含まれているファイアウォールであるため、Debian、Ubuntu、Linux Mintなどのシステムにデフォルトで組み込まれていますが、現在はnftablesが内部で使用されています。これは、iptablesが古いと見なされているためですが、現在のiptablesはLinuxシステム管理の世界やネットワーク管理の世界でもまだ広く使用されています。

このファイアウォールには、さまざまなチェーンやルールを追加する可能性を大幅に促進することを目的として、デフォルトでいくつかのテーブルが作成されています。 非常に重要な詳細は、デフォルトですべてが「受け入れる」に設定されていることです。つまり、すべてのトラフィックが許可され、トラフィックを拒否するルールがないため、最初はこのファイアウォールは許可されますが、デフォルトのポリシーを変更できます。簡単かつ迅速に。

主な特徴がわかったら、このファイアウォールの動作とアーキテクチャを紹介します。

操作とアーキテクチャ

このファイアウォールは、次々に導入するルールに基づいており、その動作は、ファイアウォール自体が実行するルールの適用に基づいています。 iptablesは最初は簡単に使用できるように見えるかもしれませんが、高度な方法で使用したい場合は、より複雑になります。 次に、iptablesがどのように機能するかの要約スキームを見ることができます。

iptables構造はテーブルに基づいており、その多くはデフォルトですでに作成されています。 テーブル内には文字列があり、デフォルトで作成された文字列もあります。 最後に、チェーン内には、構成できるさまざまなルールがあります。 次の写真では、ファイアウォールのアーキテクチャがどのようになるかについての小さなスキームを見ることができます。

デフォルトでは、合計XNUMXつのテーブルがあります。

  • フィルターテーブル :これはデフォルトのテーブルです。ルールを追加するテーブルを定義しない場合、常にフィルターテーブルに移動します。 この表には、関心のあるものに応じて、合計XNUMXつのデフォルトチェーンがあります。入力(これらはファイアウォール自体への着信方向のパケットです)、出力(これらはサーバーからの発信パケット)、およびFORWARD(あるネットワークインターフェイスから別のネットワークインターフェイスに送信されるパケットをフィルタリングするために使用されます)。
  • ナット テーブル:このテーブルは、NATを実行し、プライベートIPをパブリックIPに、またはその逆に変換する役割を果たします。 NAT内には、PREROUTING(ルーティング前にパケットを変更します。ここではDNATまたはポート転送が行われます)、POSTROUTING(ルーティング後にパケットを変更します。ここではSNATまたはMASQUERADEが実行されます)、およびOUTPUT(構成されたファイアウォールによって生成されたパケット)のXNUMXつのチェーンがあります。 NATはトラバースします)。
  • マングル テーブル:このテーブルはパケットの変更を担当し、サービス品質の変更、TCPヘッダーの変更などのためにQoSが構成されます。このテーブルには、PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTINGのXNUMXつのチェーンがあります。
  • table –パケットは接続状態なしで移動するため、このテーブルはあまり使用されません。 PREROUTINGとOUTPUTのチェーンがあります。

次の画像では、さまざまなテーブルにあるチェーンの簡単な要約を見ることができます。

ルールを追加するときの操作は次のとおりです。

  • チェーンに追加するルールには常にターゲットがあります(ルールでは-j)。
  • ファイアウォールはパケットを受信すると、そのパケットが私たちが参加したルールと一致するかどうかをチェックします。 一致する場合はターゲットコマンドが実行され、一致しない場合はチェーンの最後まで次のルールに進みます。
  • ルールは、最初のルールから最後のルールまで順番にチェックされます。 順序は非常に重要です。最初にすべてをブロックしてから、より具体的なものを許可すると、すべてのトラフィックがブロックされ、最も具体的なルールはチェックされません。
  • パケットを満たすルールがない場合は、私たちが持っているチェーンのポリシー(グローバルルール)が使用されます。

さまざまなルールの目的は次のとおりです。

  • ACCEPT:パケットを受け入れて、次のレベル、Webサーバー、SSH、FTPなどに渡します。
  • DROP:パケットをブロックし、次のレベルに渡しません。
  • QUEUE:は、ユーザースペース処理を目的としたキューでパケットを渡す特別なターゲットです。 これは、他の外部プログラムを実行するために使用できます。
  • RETURN:チェーンの最後に到達した場合と同じ効果があります。 ルールがデフォルトチェーンのXNUMXつにあった場合、チェーンのポリシーが実行されます。 ユーザー定義のチェーン内にあるルールの場合、ルールは終了し、ジャンプの前、ジャンプの直後にチェーンを通過し続けます。

それがどのように機能し、そのアーキテクチャーを理解したら、さまざまなアクションを実行するためのさまざまなコマンドを確認します。

 

iptablesを使用するための必須コマンド

このファイアウォールを構成するときに最初に考慮しなければならないことは、さまざまな注文を実行するためにスーパーユーザーのアクセス許可が必要であることです。 それらが実行されることは絶対に必要です、さもなければそれは機能しません。 次のコマンドには、すでにスーパーユーザー(sudo su)であると想定しているため、「sudo」はありません。

Linuxの最新バージョンでは、iptablesサービスを停止することはできません。すべてのネットワークトラフィックを許可し、ファイアウォールをデフォルトのパラメーターのままにするために、次のコマンドを実行する必要があります。

  • sudo iptables -F
  • sudo iptables -X
  • sudo iptables -t nat -F
  • sudo iptables -t nat -X
  • sudo iptables -t mangle -F
  • sudo iptables -t mangle -X
  • sudo iptables -P 入力受け入れ
  • sudo iptables -P FORWARD ACCEPT
  • sudo iptables -P 出力受け入れ

これを実行すると、ファイアウォールが「リセット」され、すべてが許可されます。 リセットする方法がわかったので、さまざまなコマンドを見てみましょう。

 

現在のテーブルを表示する

特定のテーブルにあるさまざまなチェーンとルールの内容を確認したい場合は、それらがどのように表示されるかを確認できます。

  • iptables -t フィルター –リスト
  • iptables -t mangle –list
  • iptables -t nat –list
  • iptables -t raw –リスト

 

主な議論とその目的

  • -t、–tabletable必要なテーブルを選択します
  • -A、–appendchainルール-仕様特定のチェーンに新しいルールを追加します
  • -C、–checkchainルール仕様特定のチェーンに特定のルールがあることを確認します
  • -D、–deletechainルール仕様特定のチェーンに入れたルールを削除します
  • -D、–deletechainrulenum特定のチェーンのルール番号Xを削除します
  • -I、–insertchain[rulenum]ルール仕様特定のテーブルに番号付きの新しいチェーンを挿入します
  • -R、–replace chain rulenum rule-specification番号を移動するために使用される、テーブル内の特定のチェーンを置き換えます。
  • -L、–list[chain]チェーンのルールのリストを表示します
  • -F、–flush[chain]指定されたチェーンからすべてのルールをフラッシュします。
  • -Z、–zero[chain[rulenum]]指定されたルールのカウンターを0に設定します。
  • -N、–new-chainchain特定のテーブルに新しいチェーンを作成します
  • -X、–delete-chain [chain]特定のテーブルの特定のチェーン(空)を削除します
  • -P、–policy chain targetデフォルトのポリシーを適用します。これは、チェーンのルールが満たされない場合に満たされます。
  • -E、–rename-chainold-chainnew-chain以前に追加されたチェーンの名前を変更します
  • -h、ヘルプを表示
  • -v、–verbose –Lコマンドが提供するよりも多くの情報を表示するために、–Lと組み合わせて使用​​される出力。
  • -n、–数値のIPアドレスとポート番号が数字として表示されます。 たとえば、ポート80をフィルタリングすると、80ではなく通常の–Lwwwが表示されます。
  • -x、–exact値にK、M、またはGを使用する代わりに、パケットとバイトカウンターの正確な値を表示します。
  • –line-numbersルールのリストを表示すると、ルールの正確な番号が表示されます。 –Dと数字(削除)または–Iを使用して、上記のルールの前後に導入するのに最適です。

 

主な条件

  • -p 、–プロトコルプロトコル。 プロトコルでパケットをフィルタリングします。指定されたプロトコルは、tcp、udp、Idplite、icmp、esp、ah、sctpです。
  • -s 、–送信元アドレス[/ mask] [、…]パケットの送信元IPアドレス。 IPまたはサブネット(CIDR形式でマスクを示す)を持つことができます。 ホスト名(ドメイン、Webサイトなど)を入力することもできますが、効率的ではないため、お勧めできません。 複数の送信元アドレス(192.168.1.1,192.168.1.2)を指定できますが、それらを満たすために異なるルールが作成されます。
  • -d 、–destination address [/ mask] [、…]パケットの宛先IPアドレス。 -sとまったく同じように動作します。
  • -m 、–matchmatch。 iptablesの拡張モジュールを呼び出して、次のような特定のアクションを実行するかどうかを指定します。
    • 複数の送信元ポートと宛先ポートを配置します(マルチポートモジュール)。
    • 接続を制御します(conntrackモジュール)。
    • ブルートフォースを避けます(最近のモジュール、SSHに最適)。
    • 接続数を制限します(モジュロ制限とconnlimit)。
    • IPアドレス範囲(iprange)。
  • -j 、–ジャンプターゲット。 パケットを受け入れ、拒否し、さらに処理するために別のチェーンに転送する場合は、ルールの目的を指定します。 常にどのルールでも、何をしたいのかを伝えるために-jがあります。 –jを追加しない場合、ルールが追加され、パケットがカウントされますが、何も実行されません。 -jを使用して別のチェーンに転送する場合、他のチェーンが終了すると、元のチェーンに戻ります。
  • -g 、–gotoチェーン。 トラフィックを別のチェーンに転送するために使用されますが、ジャンプとは異なり、元のチェーンに戻ることはありません。
  • -i 、–in-interface名。 パケットを受信するためのインターフェースの名前。 INPUT、FORWARD、PREROUTINGなどの入力文字列に対してのみ機能します。 私たちが置くならば、それはそのインターフェース以外のすべてを意味します。 名前の末尾に+を付けると、名前の先頭にあるインターフェイスがチェックのためにそれを取得します。 eth0、eth1、eth2を想像してみましょう。 XNUMXつすべてを入れたい場合は、単にeth+を入れるだけで十分です。
  • -o 、–out-interface名。 パケットが通過するインターフェースの名前。 OUTPUT、FORWARD、POSTROUTINGなどの出力文字列に対してのみ有効です。

 

TCPまたはUDPを使用する場合のみの条件

TCPまたはUDPプロトコルを使用する場合は、送信元または宛先ポート番号、あるいはその両方でフィルタリングすることができます。次に、使用できるXNUMXつの引数があります。

  • –sport –source-port。 許可または拒否する送信元ポートを選択します。 使用する場合! 除外します。
  • –dport –destination-port。 許可または拒否する宛先ポートを選択します。 使用する場合! 除外します。

ファイアウォールの高度な構成にはさらに多くの条件がありますが、基本的な条件はすでにリストされています。

 

デフォルトのポリシーを設定する

ポリシーは、チェーン内にルールが見つからない場合にデフォルトのポリシーが実行されるように使用されます。 すべてのチェーンのデフォルトポリシーはACCEPTですが、ACCEPTまたはDROPのXNUMXつのオプションがあります。

-P、–ポリシーチェーンターゲット

例:

  • iptables -P入力ドロップ
  • iptables -Pフォワードドロップ
  • iptables -P 出力ドロップ

これでインターネットが不足するので、次に許容ルールの作成を開始する必要があります。

以下に、さまざまな表にあるすべてのポリシーを示します。

  • iptables -t filter -P(INPUT | OUTPUT | FORWARD)(ACCEPT | DROP)
  • iptables -P(INPUT | OUTPUT | FORWARD)(ACCEPT | DROP)
  • iptables -t mangle -P(INPUT | OUTPUT | FORWARD | PREROUTING | POSTROUTING)(ACCEPT | DROP)

 

ファイアウォールのステータスを表示する

-Lパラメーターは、構成したルールを示します。 Vを使用すると、接続に関する詳細情報を受け取ることができ、Nは、IPアドレスとそれに対応するポートを経由せずに返します。 DNS サーバー。

  • iptables -L -n -v

これは、ファイアウォールのステータスを確認するための最も重要なコマンドのXNUMXつです。

 

iptablesのモジュール(-m一致)

 

マルチポート

これはiptablesの拡張であり、異なるTCPポートとUDPポートを持つ同様のルールを15つにグループ化する可能性を提供します。 マルチポートを使用すると、複数のポートをスキップしたり、複数のポートを連続して配置したりできます。最大でXNUMX個のポート引数を使用できます。 例:

  • iptables –A INPUT –p tcp –m multiport –dports 80,81,1000:1200 –j ACCEPT

このモジュールのおかげで、同じルールで複数のポートを使用することができます。

 

プランジ

iprangeを使用すると、数十のルールを設定しなくても、一度に複数の送信元または宛先IPアドレスを設定できます。 また、ソースIPと宛先IPの両方を配置できます。構文は次のとおりです。

  • [!] – src-range ip-ip
  • [!] – dst-range ip-ip

このルールの操作は非常に簡単で、開始IPと終了IPを配置するだけです。

 

リミット

connlimitモジュールは、IPアドレスによって行われる同時接続の数を制限する役割を果たします。これは、DoSを回避するために接続の数を制限するのに理想的です。

  • –connlimit-最大n。 接続数がN以下かどうかを確認します(許可または拒否できます)。
  • –connlimit-nより上。 接続数がNより大きいかどうかを確認します(許可または拒否できます)。
  • –connlimit-maskprefix_length。 サブネット範囲でマークします(これは、2つの接続を確立するホストと同じであり、同じサブネット上の1つのホストがそれぞれXNUMXつの接続を確立します)。
  • –connlimit-saddr。 ソースグループに制限を適用します。何も指定されていない場合はデフォルトです。
  • –connlimit-daddr。 ターゲットグループに制限を適用します。

たとえば、クライアントごとにXNUMXつのSSH接続のみを許可するとします。

  • iptables -A INPUT -p tcp –dport 22 -m connlimit –connlimit-above 2 -j DROP

ただし、最大2つの接続を受け入れることで、補完的なルールを作成できます。

 

コンコースラック

このモジュールは、接続を追跡するために使用され、接続の確立前後のパケットの入出力を管理するために使用されます。 このモジュールにはいくつかのオプションがありますが、最も重要なのは-ctstateです。これにより、さまざまなタイプのパケットを受け入れたり拒否したりできます。 ctstate内にはいくつかの状態があり、次のことが際立っています。

  • INVALID:受信したパケットは無効であり、どの接続にも属していません。
  • NEW:作成された、またはまだ双方向ではない接続に関連付けられている新しい接続。
  • 確立済み:接続が確立されました。応答があったため、最初にNEWを通過します。
  • RELATED:パッシブFTPなどの既存の接続に関連しているが、その一部ではないパケット。

私たちがどのサイトにもアクセスしたいとしますが、絶対に誰も私たちにアクセスしたくないと想像してみてください。

  • iptables –P 入力ドロップ
  • iptables -A INPUT -m conntrack –ctstate ESTABLISHED、RELATED -j ACCEPT

 

リミット

制限モジュールを使用すると、接続の試行時にsyslogに書き込むトラフィックとログの数の両方を制限できます。 これにはXNUMXつの主な議論があります。

  • –limitN。 この引数は、許可するXNUMX秒あたりの平均一致数(N / s)、分(N / m)、時間(N / h)、または日(N / d)を指定します。 Nは番号を指定します
  • –limit-burstN。 limit –limitをチェックする前に発生する可能性のある最長のバーストを示します。

何も指定されていない場合のデフォルト値は、3回のバーストで5時間あたりXNUMX回の一致です。次のルールを想像してください。「iptables-A INPUT -m limit -j LOG」、操作は次のとおりです。

  • このルールが最初にヒットすると、最初のXNUMXつのパケットがログに記録されます。
  • その後、パケットがこのルールに再登録されるまでに3分かかります(60分の間に20回一致すると、AVERAGEであるため、XNUMX分に相当します)。
  • また、パケットがルールに到達せずに経過するXNUMX分ごとに、バーストはパケットを取得します。
  • 100分間何も起こらない場合、バーストは完全に再充電されます。 その後、最初の状況に戻ります。

 

最近の

最近のモジュールは、IPレベルでXNUMX秒あたりの接続数を制限するために使用されます。これは、攻撃者が複数のパスワードを試すため、SSHポートへの攻撃からユーザーを保護するのに理想的です。 たとえば、SSHを保護する場合は、次のルールを実行できます。

  • iptables -A INPUT -p tcp –dport 22 -m conntrack –ctstate NEW -m最近–set –name ssh –rsource
  • iptables -A INPUT -p tcp –dport 22 -m state –state NEW -m最近–rcheck –seconds 60 –hitcount 4 –name ssh –rsource -j DROP

このルールでは、60秒以内にXNUMX回の接続試行のみが許可されます。これは、「スライディング」ウィンドウです。

 

NAT

このファイアウォールは、接続のNATも担当します。 パブリックIP(またはこのパブリックIPを持つインターフェース)のNATを作成するには、次のように設定する必要があります。

  • 静的SNAT:iptables -t nat -A POSTROUTING -s 192.168.1.0/24 –o eth1 -j SNAT –to IP_eth1
  • 動的SNAT:iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth1 -j MASQUERADE

通常は、物理インターフェイスまたは論理インターフェイスのIPアドレスに関係なく、MASQUERADEを使用してNATを実行します。

ポートを開くには、NATテーブルのPREROUTINGチェーンにルールを追加する必要があります。

  • iptables -t nat -A PREROUTING -i eth1 -p tcp –dport 22 -j DNAT –宛先 192.168.1.1

PREROUTINGテーブルを使用すると、ポートをオンザフライで変更することもできるため、ポート2121でパケットを受信した場合は、21に変換できます。

  • iptables -t nat -A PREROUTING -i eth1 -p tcp –dport 2121 -j DNAT –宛先 192.168.1.1:21

このファイアウォールについて詳しく知ったら、基本的な使用例と最も高度な使用例を見ていきます。

 

基本的な使用例

このファイアウォールは非常に完全であり、さまざまなアクションを実行するために実行できる数百のコマンドがあります。 この記事では、このファイアウォールへの最初のアプローチのわかりやすい例をいくつか紹介します。

IPアドレス192.168.1.10がサーバーと通信するのをブロックします。

  • iptables -A INPUT –s 192.168.1.10 –j DROP

IPアドレス192.168.1.20、192.168.1.30、192.168.1.40、192.168.1.50がサーバーと通信するのをブロックします。

  • iptables -A INPUT –s 192.168.1.20,192.168.1.30,192.168.1.40,192.168.1.50 –j DROP

192.168.2.0 IPアドレスを除いて、24/192.168.2.20サブネット全体がサーバーと通信するのをブロックします。これは許可されます。

  • iptables –A INPUT –s 192.168.2.20 –j ACCEPT
  • iptables –A INPUT –s 192.168.2.0/24 –j DROP

192.168.4.50のIPアドレスをブロックして、通信できないようにします。

  • iptables –A OUTPUT –d 192.168.4.50 –j DROP

IPアドレス192.168.4.51と192.168.4.52をブロックして、通信できないようにします。

  • iptables –A OUTPUT –d 192.168.4.51,192.168.4.52 –j DROP

iptablesからwww.google.esへのアクセスをブロックします。

  • iptables –A OUTPUT –d www.google.es –j DROP

MAC 00:01:02:03:04:05からサーバーへのアクセスをブロックし、残りはすべてを許可します。

  • iptables -A INPUT -m mac –mac-source 00:01:02:03:04:05 -j DROP

サーバーへのアクセスをMACアドレスMAC00:01:02:03:04:06に許可し、残りはすべてを拒否します。

  • iptables -A INPUT -m mac –mac-source 00:01:02:03:04:05 -j ACCEPT
    iptables -A 入力 -j ドロップ

サーバーからのping用にIPアドレス192.168.1.10をブロックします。

  • iptables -A INPUT -s 192.168.1.10 -p icmp -j DROP

IPアドレス192.168.1.20、192.168.1.30、192.168.1.40、192.168.1.50がサーバーにPINGするのをブロックします(単一のルールで):

  • iptables -A INPUT -s 192.168.1.20,192.168.1.30,192.168.1.40,192.168.1.50 -p icmp -j DROP

192.168.2.0/24サブネット全体をブロックして、許可されるIPアドレス192.168.2.20を除いて、サーバーにPINGしないようにします。

  • iptables -A INPUT -s 192.168.2.20 -p icmp -j ACCEPT
    iptables -A INPUT -s 192.168.2.0/24 -p icmp -j DROP

192.168.4.50のIPアドレスをブロックして、pingできないようにします。

  • iptables -A OUTPUT -d 192.168.4.50 -p icmp -j ドロップ

IPアドレス192.168.4.51と192.168.4.52をブロックして、pingできないようにします。

  • iptables -A OUTPUT -d 192.168.4.51,192.168.4.52 -p icmp -j ドロップ

iptablesからwww.google.esへのアクセスをブロックします。

  • iptables -A OUTPUT -d www.google.es -p icmp -j DROP

ご覧のとおり、発信元と宛先のIPに基づくルールを使用すると、操作は非常に簡単です。 iprangeモジュールを使用して、IPの範囲を構成することもできます。

192.168.5.1から192.168.5.50までのIPアドレスの範囲がサーバーからpingを実行できないようにブロックします。

  • iptables -A OUTPUT -m iprange –dst-range 192.168.5.1-192.168.5.50 -p icmp -j DROP

より高度な方法でICMPプロトコルをフィルタリングすることもできます。 任意のホストにpingを実行できるようにしたいが、誰にもpingを実行させたくないユーザーがいるとします。 PING自体に双方向通信がある場合、iptablesでそれをどのように行うことができますか?

  • iptables -A INPUT -s IP -p icmp –icmp-type echo-r​​equest -j DROP

eth0インターフェース(のみ)を介した着信アクセスをブロックして、eth1アクセスを許可します。

  • iptables -A 入力 -i eth0 -j ドロップ
  • iptables -A INPUT -i eth1 -j ACCEPT

eth0インターフェイス(のみ)で発信トラフィックをブロックし、eth1アクセスを許可します。

  • iptables -A 出力 -o eth0 -j ドロップ
  • iptables -A OUTPUT -o eth1 -j ACCEPT

eth0での着信および発信トラフィックを許可し、eth1での着信または発信トラフィックを拒否します。

  • iptables -A INPUT -i eth0 -j ACCEPT
  • iptables -A OUTPUT -o eth0 -j ACCEPT
  • iptables -A 入力 -i eth1 -j ドロップ
  • iptables -A 出力 -o eth1 -j ドロップ

TCPおよびUDPプロトコルがどのように機能するかを確認したい場合は、次にいくつかの例を示します。

たとえば、www.google.esへのWebアクセスをブロックし、他のすべて(ping)を許可します。

  • iptables -A OUTPUT -d www.google.es -p tcp –dport 80 -j DROP

IPまたはドメインへのFTPアクセスをブロックし、それ以外はすべて許可します。

  • iptables -A OUTPUT -p tcp –dport 21 -j DROP

IP 192.168.1.50へのSSHアクセスをブロックし、それ以外はすべて許可します。

  • iptables -A OUTPUT -d 192.168.1.50 -p tcp –dport 22 -j DROP

192.168.2.0サブネットへのTelnetアクセスをブロックし、それ以外はすべて許可します。

  • iptables -A OUTPUT -d 192.168.2.0/24 -p tcp –dport 23 -j DROP

Webサーバーへの192.168.1.50アクセスをブロックします。

  • iptables -A INPUT -s 192.168.1.50 -p tcp –dport 80 -j DROP

SSHサーバーへの192.168.1.150および192.168.1.151アクセスをブロックします。

  • iptables -A INPUT -s 192.168.1.150,192.168.1.151 -p tcp –dport 22 -j DROP

192.168.2.0/24サブネット全体のTelnetサービスへのアクセスをブロックします

  • iptables -A INPUT -s 192.168.2.0/24 -p tcp –dport 23 -j DROP

許可されているIPアドレス77.77.77.77を除いて、OpenVPNサーバーへのすべてのユーザーのアクセスをブロックします。

  • iptables -A INPUT -s 77.77.77.77 -p tcp –dport 1194 -j ACCEPT
  • iptables -A 入力 -p tcp –dport 1194 -j ドロップ

8.8.8.8へのDNSアクセスをブロックし、たとえば他のすべて(ping)を許可します。

  • iptables -A OUTPUT -d 8.8.8.8 -p tcp –dport 53 -j DROP
  • iptables -A OUTPUT -d 8.8.8.8 -p udp –dport 53 -j DROP

任意のIPまたはドメインへのポート1194へのアクセスをブロックし、それ以外はすべて許可します。

  • iptables -A INPUT -p udp –dport 1194 -j DROP

サーバー上にDNSサーバーがあります。 192.168.1.0/24サブネット上のコンピューターのみがサブネットと通信し、他のすべてのアクセスをブロックできるようにする必要があります。

  • iptables -A INPUT -s 192.168.1.0/24 -p tcp –dport 53 -j ACCEPT
  • iptables -A INPUT -s 192.168.1.0/24 -p udp –dport 53 -j ACCEPT
  • iptables -A 入力 -p tcp –dport 53 -j ドロップ
  • iptables -A INPUT -p udp –dport 53 -j DROP

eth192.168.100.0インターフェイスからのIP範囲24/0からのWebサーバーへのアクセスをブロックします。

  • iptables -A INPUT -s 192.168.100.0/24 -i eth0 -p tcp –dport 80 -j DROP

eth192.168.100.0インターフェースからのIP範囲24/1からのsshサーバーへのアクセスをブロックします。

  • iptables -A INPUT -s 192.168.100.0/24 -i eth1 -p tcp –dport 22 -j DROP

 

高度な使用例

iptablesについて詳しく知りたい場合は、connlimitモジュールを使用する例をいくつか示します。

クライアントごとに10個のTelnet接続のみを許可します。

  • iptables -A INPUT -p tcp –dport 23 -m connlimit –connlimit-above 10 –connlimit-mask 32 -j DROP

クライアントによって作成されたWeb上の接続番号5までを拒否します(あまり意味がありませんが、これは例です)。

  • iptables -A INPUT -p tcp –dport 80 -m connlimit –connlimit-upto 5 –connlimit-mask 32 -j DROP

クライアントごとに10個のTelnet接続のみを許可します(上記とは異なる方法で行います)。

  • iptables -A INPUT -p tcp –dport 23 -m connlimit –connlimit-upto 10 –connlimit-mask 32 -j ACCEPT
  • iptables -A 入力 -p tcp –dport 23 -j ドロップ

10/10.0.0.0 IP範囲で8個のWeb接続のみを許可し、この数を超える場合は拒否します。

  • iptables -A INPUT -s 10.0.0.0/8 -p tcp –dport 80 -m connlimit –connlimit-above 10 –connlimit-mask 8 -j DROP

クライアントごとに20のHTTP接続のみを許可します。それを超えるとすぐに、TCPリセットを送信します。

  • iptables -A INPUT -p tcp –dport 80 -m connlimit –connlimit-above 20 –connlimit-mask 32 -j REJECT –reject-with tcp-reset

またはこのように:

  • iptables -A INPUT -p tcp –syn –dport 80 -m connlimit –connlimit-above 20 –connlimit-mask 32 -j REJECT –reject-with tcp-reset

ご覧のとおり、このファイアウォールは本当に完全であり、すべての着信接続と発信接続を詳細に制御するために、非常に高度な構成を数多く行うことができます。