目次
iptables の主な機能は、デバイスに出入りするネットワーク データ パケットと転送の制御を実現することです。データ パケットがデバイスに入る、デバイスから出る、またはデバイスによって転送およびルーティングされる必要がある場合、iptables を使用して制御できます。
環境
OS:CentOS7.3
IPアドレス: 172.16.55.7
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 操作の実行に似ています。
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
-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, ポリシーを設定します
-A, --append chain rule-specification: 指定されたチェーンの末尾に新しいルールを追加します。
-I, --insert chain [rulenum] rule-specification: 指定されたチェーンの指定された位置に新しいルールを挿入します。デフォルトはヘッダーです。
-R, --replace chain rulenum rule-specification: 指定されたルールを新しいルールに置き換えます。
-D, --delete chain rulenum: ルール番号に従ってルールを削除します。
-L, --list [chain]: ルールをリストします。
-v、--verbose: 詳細情報。
-vv、-vvv の詳細情報
-n、--numeric: ホスト アドレスとポート番号を数値形式で表示します。
-x、--exact: カウンタの正確な値を表示します。
–line-numbers: ルールをリストする場合、チェーン上の対応する番号を表示します。
-S, --list-rules [chain]: 指定されたチェーンのすべてのルールを表示します。
ルールの一般的な内容を表示するには:

マッチング条件には、一般マッチング条件と拡張マッチング条件があります。
一般的な一致条件とは、単一の送信元 IP、単一の送信元ポート、単一の宛先 IP、単一の宛先ポート、ネットワーク カード、およびデータ パケットが流れるプロトコルを含む、送信元アドレスと宛先アドレスの一致を指します。
拡張マッチング条件とは、一般マッチング以外のマッチング条件を指します。
[!] -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.
-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 オプションで指定する必要があります。一般的なものは次のとおりです。
最大 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
複数の 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
パケットの到着時刻を一致させる
–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 の代わりにカーネルによって構成されたタイムゾーンを使用します。
パケット内の文字と一致します
–algo {bm|kmp}
[!] --string pattern
[!] --hex-string pattern
–from offset
–to offset
~]# iptables -I OUTPUT -m string --algo bm --string "gay" -j REJECT
同じ 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
データパケットの送受信速度を制限する
–limit rate[/second|/minute|/hour|/day]
-–limit-burst number
~]# iptables -I OUTPUT -s 172.16.0.7 -p icmp --icmp-type 0 -j ACCEPT
パケットの送受信状態を制限する
[!] --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