iptablesコマンドの使い方を詳しく解説

2023-07-28 16:28:33

jsのindexOfメソッド tryとcatchの使い方

目次

  1. iptables の「4 つのテーブルと 5 つのリンク」と「ブロッキング戦略」
  2. iptablesコマンドの文法規則
  3. チェーン管理
  4. ルール管理
  5. ルールを確認する
  6. マッチング条件
    1. 一般的な一致条件
    2. 拡張マッチング条件

iptables の主な機能は、デバイスに出入りするネットワーク データ パケットと転送の制御を実現することです。データ パケットがデバイスに入る、デバイスから出る、またはデバイスによって転送およびルーティングされる必要がある場合、iptables を使用して制御できます。

環境
OS:CentOS7.3

IPアドレス: 172.16.55.7

1. iptables の「4 つのテーブルと 5 つのリンク」と「ブロッキング戦略」

A. 「4 つのテーブル」とは、iptables の機能 (filter、nat、mangle、raw) を指します。

filter、データ パケットの出入りおよび転送を許可するかどうかを制御します (INPUT、OUTPUT、FORWARD)。制御できるリンクは input、forward、output です。

nat、データ パケット内のアドレス変換を制御します。制御できるリンクは、prerouting、input、output、postrouting です。

mangle、データ パケット内の元のデータを変更します。制御できるリンクは、prerouting、input、forward、output、postrouting です。

raw、nat テーブル内の接続追跡メカニズムの有効化ステータスを制御します。制御できるリンクには、プレルーティング、出力が含まれます。

注:centos7にもセキュリティテーブルがありますが、ここでは紹介しません

B. 「5 つのチェーン」とは、カーネル内のネットワークを制御する NetFilter によって定義された 5 つのルール チェーンを指します。

PREROUTING、配線前

INPUT、パケット フロー エントリ

FORWARD、転送パイプカード

OUTPUT、パケットエクスポート

POSTROUTING、ルーティング後

C. ブロッキング戦略は、データ パケットに対する操作を指します。一般に、「ACCEPT」と「DROP」という 2 つの操作があり、もう 1 つの非常に一般的な REJECT 操作があります。

REJECTとDROPの違いについて語りながら、ミンはローズに愛を伝える手紙を書きました。ローズが受け入れたくない場合、ミンに返信することはできません。この時点では、ミンはローズが手紙を受け取ったかどうかわかりませんが、ローズが明確にミンを拒否する手紙を書くこともできます。前者の操作は DROP 操作の実行に似ており、後者の操作は REJECT 操作の実行に似ています。

2. iptablesコマンドの文法規則

iptables [-t table] COMMAND [chain] CRETIRIA -j ACTION
  -t table、操作テーブルを参照します。filter、nat、mangle、または raw、filter がデフォルトで使用されます。

COMMAND、サブコマンドはルールの管理を定義します

chain、リンクを指定します

CRETIRIA、一致基準または基準

ACTION、操作アクション

たとえば、10.8.0.0/16 ネットワークは 80/tcp ポートへのアクセスを許可されません。

iptables -A INPUT -s 10.8.0.0/16 -d 172.16.55.7 -p tcp --dport 80 -j DROP

iptables リストを表示する

iptables -nL

3. チェーン管理

-N、--new-chain チェーン: カスタム ルール チェーンを作成します。

-X, --delete-chain [chain]: 参照カウントが 0 のユーザー定義の空のチェーンを削除します。

-F、--flush [chain]: 指定されたルール チェーン上のルールをクリアします。

-E, --rename-chain old-chain new-chain: チェーンの名前を変更します。

--Z, --zero [chain [rulenum]]: ゼロ カウンター。

-P, --policy chain target, ポリシーを設定します

4. ルール管理

-A, --append chain rule-specification: 指定されたチェーンの末尾に新しいルールを追加します。

-I, --insert chain [rulenum] rule-specification: 指定されたチェーンの指定された位置に新しいルールを挿入します。デフォルトはヘッダーです。

-R, --replace chain rulenum rule-specification: 指定されたルールを新しいルールに置き換えます。

-D, --delete chain rulenum: ルール番号に従ってルールを削除します。

5. ルールを確認する

-L, --list [chain]: ルールをリストします。

-v、--verbose: 詳細情報。

-vv、-vvv の詳細情報
  -n、--numeric: ホスト アドレスとポート番号を数値形式で表示します。

-x、--exact: カウンタの正確な値を表示します。

–line-numbers: ルールをリストする場合、チェーン上の対応する番号を表示します。

-S, --list-rules [chain]: 指定されたチェーンのすべてのルールを表示します。

ルールの一般的な内容を表示するには:
  

6.マッチング条件

マッチング条件には、一般マッチング条件と拡張マッチング条件があります。

一般的な一致条件とは、単一の送信元 IP、単一の送信元ポート、単一の宛先 IP、単一の宛先ポート、ネットワーク カード、およびデータ パケットが流れるプロトコルを含む、送信元アドレスと宛先アドレスの一致を指します。

拡張マッチング条件とは、一般マッチング以外のマッチング条件を指します。

6.1 一般的な一致条件

[!] -s, --source address[/mask][,…]: パケットの送信元 IP アドレスがここで指定された範囲に準拠しているか、またはここで指定されたアドレスと等しいかどうかを確認します。

[!] -d, --destination address[/mask][,…]: メッセージの宛先 IP アドレスがここで指定された範囲に準拠しているか、またはここで指定されたアドレスと等しいかどうかを確認します。

[!] -p, --protocol protocol: メッセージ内のプロトコル (tcp、udp、udplite、icmp、icmpv6、esp、ah、sctp、mh、または「all」) と一致します。また、プロトコルをデジタル形式で指定することもできます。

[!] -i, --in-interface name:指定されたインターフェイスからのみパケットが流入するように制限します;only for packets entering the INPUT, FORWARD and PREROUTING chains.

[!] -o, --out-interface name: パケットが指定されたインターフェイスからのみ流出するように制限します;for packets entering the FORWARD, OUTPUT and POSTROUTING chains.

6.2 拡張マッチング条件

暗黙的な拡張一致条件

-p tcp: tcp 拡張モジュールの特別なオプションを直接使用できます。

  
[!] --source-port,--sport port[:port] メッセージの送信元ポートと一致します。複数のポートを指定できますが、連続したポート範囲のみを指定できます;

[!] --destination-port,--dport port[:port]メッセージのターゲット ポートと一致します。複数のポートを指定できますが、連続したポート範囲のみです;

[!] --tcp-flags mask comp メッセージ内の TCP プロトコルのフラグ ビットと一致します。;Flags are: SYN ACK FIN RST URG PSH ALL NONE;
    mask:FLAGS list をカンマで区切って確認します;
    comp:マスクによって指定される多くの FLAGS のうち、値が 1 である必要があり、残りが 0 である必要がある FLAGS リスト;

[!] --syn: --tcp-flags SYN,ACK,FIN,RST SYN

-p udp:udpプロトコル拡張モジュールを直接利用できる専用オプション:

[!] --source-port,--sport port[:port]

[!] --destination-port,--dport port[:port]
-p icmp
[!] --icmp-type {type[/code]|typename}

0/0:echo reply

8/0:echo request

一致条件を明示的に展開する

拡張マッチングの種類は、-m option オプションで指定する必要があります。一般的なものは次のとおりです。

1. multiport

最大 15 個までのマルチポートのマッチング条件を離散的または連続的に定義します。

[!] --source-ports,–sports port[,port|,port:port]…: 複数の送信元ポートを指定します。

[!] --destination-ports,–dports port[,port|,port:port]…: 複数の宛先ポートを指定します。

iptables -I INPUT -d 172.16.0.7 -p tcp -m multiport --dports 22,80,139,445,3306 -j ACCEPT

2. iprange

複数の IP アドレス一致条件を連続したアドレス ブロックの形式で示します。

[!] --src-range from[-to]

[!] --dst-range from[-to]

# iptables -I INPUT -d 172.16.0.7 -p tcp -m multiport --dports 22,80,139,445,3306 -m iprange --src-range 172.16.0.61-172.16.0.70 -j REJECT

3.time

パケットの到着時刻を一致させる

–timestart hh:mm[:ss]

–timestop hh:mm[:ss]

[!] --weekdays day[,day…]

[[!] --monthdays day[,day…]

–datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]

–datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]

–kerneltz: デフォルトの UTC の代わりにカーネルによって構成されたタイムゾーンを使用します。

4. string

パケット内の文字と一致します

–algo {bm|kmp}

[!] --string pattern

[!] --hex-string pattern

–from offset

–to offset

~]# iptables -I OUTPUT -m string --algo bm --string "gay" -j REJECT

5. connlimit

同じ IP で確立できる接続の数を制限するために使用されます。

--connlimit-upto n

–connlimit-above n

~]# iptables -I INPUT -d 172.16.0.7 -p tcp --syn --dport 22 -m connlimit --connlimit-above 2 -j REJECT

6.limit

データパケットの送受信速度を制限する

–limit rate[/second|/minute|/hour|/day]

-–limit-burst number

~]# iptables -I OUTPUT -s 172.16.0.7 -p icmp --icmp-type 0 -j ACCEPT

7. state

パケットの送受信状態を制限する

[!] --state state

INVALID, ESTABLISHED, NEW, RELATED or UNTRACKED.

NEW: 新しい接続リクエスト。

ESTABLISHED: 確立された接続。

INVALID: 接続が認識されません。

RELATED: 関連する接続。現在の接続は新しいリクエストですが、既存の接続に接続されています。

UNTRACKED: 追跡されていない接続。

state 拡張子:

カーネルモジュールのロード:
  nf_conntrack
  nf_conntrack_ipv4

手動マウント:
  nf_conntrack_ftp

追跡される接続:
  /proc/net/nf_conntrack

記録できる接続の最大数を調整します:
  /proc/sys/net/nf_conntrack_max

タイムアウト期間:
  /proc/sys/net/netfilter/ timeout