Linuxでよく使われるファイアウォールソフトiptablesについて詳しく解説

iptables

Linux で一般的に使用されるファイアウォール ソフトウェアは、
Linux コマンド オンライン ツールを推奨しています: linux コマンド オンライン クエリ ツール

補足事項

iptables コマンドは、 Linux で一般的に使用されるファイアウォール ソフトウェアであり、netfilter プロジェクトの一部です。直接、または多数のフロントエンドとグラフィカル インターフェイスを介して構成できます。

文法

iptables(选项)(参数)

オプション

-t, --table table 对指定的表 table 进行操作, table 必须是 raw, nat,filter,mangle 中的一个。如果不指定此选项,默认的是 filter 表。

# 通用匹配:源地址目标地址的匹配
-p:指定要匹配的数据包协议类型;
-s, --source [!] address[/mask] :把指定的一个/一组地址作为源地址,按此规则进行过滤。当后面没有 mask 时,address 是一个地址,比如:192.168.1.1;当 mask 指定时,可以表示一组范围内的地址,比如:192.168.1.0/255.255.255.0。
-d, --destination [!] address[/mask] :地址格式同上,但这里是指定地址为目的地址,按此进行过滤。
-i, --in-interface [!] <网络接口name> :指定数据包的来自来自网络接口,比如最常见的 eth0 。注意:它只对 INPUT,FORWARD,PREROUTING 这三个链起作用。如果没有指定此选项, 说明可以来自任何一个网络接口。同前面类似,"!" 表示取反。
-o, --out-interface [!] <网络接口name> :指定数据包出去的网络接口。只对 OUTPUT,FORWARD,POSTROUTING 三个链起作用。

# 查看管理命令
-L, --list [chain] 列出链 chain 上面的所有规则,如果没有指定链,列出表上所有链的所有规则。

# 规则管理命令
-A, --append chain rule-specification 在指定链 chain 的末尾插入指定的规则,也就是说,这条规则会被放到最后,最后才会被执行。规则是由后面的匹配来指定。
-I, --insert chain [rulenum] rule-specification 在链 chain 中的指定位置插入一条或多条规则。如果指定的规则号是1,则在链的头部插入。这也是默认的情况,如果没有指定规则号。
-D, --delete chain rule-specification -D, --delete chain rulenum 在指定的链 chain 中删除一个或多个指定规则。
-R num:Replays替换/修改第几条规则

# 链管理命令(这都是立即生效的)
-P, --policy chain target :为指定的链 chain 设置策略 target。注意,只有内置的链才允许有策略,用户自定义的是不允许的。
-F, --flush [chain] 清空指定链 chain 上面的所有规则。如果没有指定链,清空该表上所有链的所有规则。
-N, --new-chain chain 用指定的名字创建一个新的链。
-X, --delete-chain [chain] :删除指定的链,这个链必须没有被其它任何规则引用,而且这条上必须没有任何规则。如果没有指定链名,则会删除该表中所有非内置的链。
-E, --rename-chain old-chain new-chain :用指定的新名字去重命名指定的链。这并不会对链内部造成任何影响。
-Z, --zero [chain] :把指定链,或者表中的所有链上的所有计数器清零。

-j, --jump target <指定目标> :即满足某条件时该执行什么样的动作。target 可以是内置的目标,比如 ACCEPT,也可以是用户自定义的链。
-h:显示帮助信息;

基本パラメータ

パラメータ 効果
-P デフォルトのポリシーを設定します: iptables -P INPUT (DROP
-F ルールチェーンをクリア
-L ルールチェーンを表示
-A ルール チェーンの最後に新しいルールを追加する
-私 num ルールチェーンの先頭に新しいルールを追加します
-D num ルールを削除する
-s 送信元アドレス IP/MASK を照合し、感嘆符「!」を追加すると、この IP が除外されることを示します。
-d 一致するターゲット アドレス
-私 ネットワーク カード名は、このネットワーク カードから流れるデータと一致します
-o ネットワーク カード名は、このネットワーク カードから流れるデータと一致します
-p tcp、udp、icmp などの一致するプロトコル
–dポート番号 宛先ポート番号の一致
–スポーツ番号 送信元ポート番号を一致させる

コマンドオプションの入力順

iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作

働くメカニズム

ルール チェーン名には次のものが含まれます (5 つのフック関数とも呼ばれます)。

  • INPUT chain : 入力パケットを処理します。
  • OUTPUT chain : 出力パケットを処理します。
  • FORWARD chain : 転送パケットを処理します。
  • PREROUTING chain : 宛先アドレス変換 (DNAT) に使用されます。
  • POSTOUTING チェーン: ソース アドレス変換 (SNAT) に使用されます。

ファイアウォール ポリシー

ファイアウォールポリシーは一般に2つのタイプに分けられます.1つはポリシーと呼ばれ、もう1つはポリシーと呼ばれ、ポリシーを介して、デフォルトのドアが閉じられ、誰が入ることができるかを定義する必要があります. ブロック戦略は、ドアは開いていますが、身元認証が必要であり、そうでない場合は入ることができません. したがって、定義する必要があります。何が入ってくるか、何が出るか、です所以通,是要全通,而堵,则是要选择ポリシーを定義する場合、複数の機能を個別に定義する必要があります。その中には、データ パケットで許可または許可されないポリシーを定義する、フィルタ フィルタリングの機能、およびアドレス変換を定義する機能が nat オプションです。これらの機能を交互に動作させるために、さまざまな作業機能や処理方法を定義・区別する「テーブル」の定義を定式化しました。

複数の関数を比較するために、次の 3 つの関数を使用します。

  1. フィルターは許可するかどうかを定義し、INPUT、FORWARD、OUTPUT の 3 つのチェーンでのみ実行できます。
  2. Nat はアドレス変換を定義します。これは、PREROUTING、OUTPUT、POSTROUTING の 3 つのチェーンでのみ実行できます。
  3. マングル機能: メッセージの元のデータを変更します。これは、5 つのチェーンで行うことができます: PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING

メッセージの元のデータを変更して、TTL を変更します。データ パケットのメタデータを逆アセンブルし、内部のコンテンツをマーク/変更することができます。ファイアウォールのマークは、実際には mangle によって実現されています。

小さな拡張:

  • フィルターの場合、通常、INPUT、FORWARD、OUTPUT の 3 つのチェーンのみを使用できます。
  • nat の場合、PREROUTING、OUTPUT、POSTROUTING の 3 つのチェーンでのみ実行できます。
  • mangle は、PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING の 5 つのチェーンを実行できます。

iptables/netfilter (このソフトウェア) はユーザー空間で動作し、ルールを有効にすることができます。それ自体はサービスではなく、ルールはすぐに有効になります。そして、私たちの iptables は、開始および停止できるサービスになりました。開始された場合、ルールは直接有効になり、停止された場合、ルールは取り消されます。

iptables は、自己定義チェーンもサポートしています。ただし、定義するチェーンは特定のチェーンに関連付ける必要があります。レベル設定では、データがある場合に特定のチェーンに移動して処理し、そのチェーンの処理後に戻ることを指定します。次に、特定のチェーンのチェックを続けます。

注: ルールの順序は非常に重要であり、谁的规则越严格,应该放的越靠前ルールをチェックするときは上から下にチェックされます。

テーブル名は次のとおりです。

  • raw : URL フィルタリングなどの高度な機能。
  • mangle : サービスの品質を実装するために使用されるパケット変更 (QOS)。
  • nat : ゲートウェイ ルーターに使用されるアドレス変換。
  • filter : ファイアウォール ルールに使用されるパケット フィルタリング。

アクションは次のとおりです。

  • ACCEPT : パケットを受信します。
  • DROP : パケットをドロップします。
  • REDIRECT : リダイレクト、マッピング、透過プロキシ。
  • SNAT : ソース アドレス変換。
  • DNAT : 宛先アドレス変換。
  • MASQUERADE : ADSL に使用される IP マスカレード (NAT)。
  • LOG : ログ記録。
  • SEMARK : ドメイン内の必須アクセス制御 (MAC) 用に SEMARK マークを追加します。
                             ┏╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍┓
 ┌───────────────┐           ┃    Network    ┃
 │ table: filter │           ┗━━━━━━━┳━━━━━━━┛
 │ chain: INPUT  │◀────┐             │
 └───────┬───────┘     │             ▼
         │             │   ┌───────────────────┐
  ┌      ▼      ┐      │   │ table: nat        │
  │local process│      │   │ chain: PREROUTING │
  └             ┘      │   └─────────┬─────────┘
         │             │             │
         ▼             │             ▼              ┌─────────────────┐
┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅    │     ┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅      │table: nat       │
 Routing decision      └───── outing decision ─────▶│chain: PREROUTING│
┅┅┅┅┅┅┅┅┅┳┅┅┅┅┅┅┅┅┅          ┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅      └────────┬────────┘
         │                                                   │
         ▼                                                   │
 ┌───────────────┐                                           │
 │ table: nat    │           ┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅               │
 │ chain: OUTPUT │    ┌─────▶ outing decision ◀──────────────┘
 └───────┬───────┘    │      ┅┅┅┅┅┅┅┅┳┅┅┅┅┅┅┅┅
         │            │              │
         ▼            │              ▼
 ┌───────────────┐    │   ┌────────────────────┐
 │ table: filter │    │   │ chain: POSTROUTING │
 │ chain: OUTPUT ├────┘   └──────────┬─────────┘
 └───────────────┘                   │
                                     ▼
                             ┏╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍┓
                             ┃    Network    ┃
                             ┗━━━━━━━━━━━━━━━┛

現在のルールとカウントをすべてクリアする

iptables -F  # 清空所有的防火墙规则
iptables -X  # 删除用户自定义的空链
iptables -Z  # 清空计数

ssh ポート接続を許可するように構成する

iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT
# 22为你的ssh端口, -s 192.168.1.0/24表示允许这个网段的机器来连接,其它网段的ip地址是登陆不了你的机器的。 -j ACCEPT表示接受这样的请求

ローカル ループバック アドレスを正常に使用できるようにする

iptables -A INPUT -i lo -j ACCEPT
#本地圆环地址就是那个127.0.0.1,是本机上使用的,它进与出都设置为允许
iptables -A OUTPUT -o lo -j ACCEPT

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

iptables -P INPUT DROP # 配置默认的不让进
iptables -P FORWARD DROP # 默认的不允许转发
iptables -P OUTPUT ACCEPT # 默认的可以出去

ホワイトリストの構成

iptables -A INPUT -p all -s 192.168.1.0/24 -j ACCEPT  # 允许机房内网机器可以访问
iptables -A INPUT -p all -s 192.168.140.0/24 -j ACCEPT  # 允许机房内网机器可以访问
iptables -A INPUT -p tcp -s 183.121.3.7 --dport 3380 -j ACCEPT # 允许183.121.3.7访问本机的3380端口

対応するサービス ポートを開きます

iptables -A INPUT -p tcp --dport 80 -j ACCEPT # 开启80端口,因为web对外都是这个端口
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT # 允许被ping
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 已经建立的连接得让它进来

ルールを構成ファイルに保存する

cp /etc/sysconfig/iptables /etc/sysconfig/iptables.bak # 任何改动之前先备份,请保持这一优秀的习惯
iptables-save > /etc/sysconfig/iptables
cat /etc/sysconfig/iptables

決められたルールを列挙する

iptables -L [-t テーブル名] [チェーン名]

  • 4 つのテーブル名rawnatfiltermangle
  • 5 つのルール チェーン名INPUTOUTPUTFORWARDPREROUTINGPOSTROUTING
  • フィルタ テーブルにはINPUTOUTPUTFORWARD3 つのルール チェーンが含まれています
iptables -L -t nat                  # 列出 nat 上面的所有规则
#            ^ -t 参数指定,必须是 raw, nat,filter,mangle 中的一个
iptables -L -t nat  --line-numbers  # 规则带编号
iptables -L INPUT

iptables -L -nv  # 查看,这个列表看起来更详细

既存のルールをクリアする

iptables -F INPUT  # 清空指定链 INPUT 上面的所有规则
iptables -X INPUT  # 删除指定的链,这个链必须没有被其它任何规则引用,而且这条上必须没有任何规则。
                   # 如果没有指定链名,则会删除该表中所有非内置的链。
iptables -Z INPUT  # 把指定链,或者表中的所有链上的所有计数器清零。

追加されたルールを削除

# 添加一条规则
iptables -A INPUT -s 192.168.1.5 -j DROP

すべての iptables をシーケンス番号とともに表示するには、次を実行します。

iptables -L -n --line-numbers

たとえば、INPUT で通し番号が 8 のルールを削除するには、次のように実行します。

iptables -D INPUT 8

指定したポートを開く

iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT               #允许本地回环接口(即运行本机访问本机)
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT    #允许已建立的或相关连的通行
iptables -A OUTPUT -j ACCEPT         #允许所有本机向外的访问
iptables -A INPUT -p tcp --dport 22 -j ACCEPT    #允许访问22端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT    #允许访问80端口
iptables -A INPUT -p tcp --dport 21 -j ACCEPT    #允许ftp服务的21端口
iptables -A INPUT -p tcp --dport 20 -j ACCEPT    #允许FTP服务的20端口
iptables -A INPUT -j reject       #禁止其他未允许的规则访问
iptables -A FORWARD -j REJECT     #禁止其他未允许的规则访问

シールドIP

iptables -A INPUT -p tcp -m tcp -s 192.168.0.8 -j DROP  # 屏蔽恶意主机(比如,192.168.0.8
iptables -I INPUT -s 123.45.6.7 -j DROP       #屏蔽单个IP的命令
iptables -I INPUT -s 123.0.0.0/8 -j DROP      #封整个段即从123.0.0.1到123.255.255.254的命令
iptables -I INPUT -s 124.45.0.0/16 -j DROP    #封IP段即从123.45.0.1到123.45.255.254的命令
iptables -I INPUT -s 123.45.6.0/24 -j DROP    #封IP段即从123.45.6.1到123.45.6.254的命令是

パケットの送信元のネットワーク インターフェイスを指定します

OUTPUT、FORWARD、POSTROUTING の 3 つのチェーンでのみ機能します。

iptables -A FORWARD -o eth0

追加されたルールを表示

iptables -L -n -v
Chain INPUT (policy DROP 48106 packets, 2690K bytes)
 pkts bytes target     prot opt in     out     source               destination
 5075  589K ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
 191K   90M ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:22
1499K  133M ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:80
4364K 6351M ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
 6256  327K ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 3382K packets, 1819M bytes)
 pkts bytes target     prot opt in     out     source               destination
 5075  589K ACCEPT     all  --  *      lo      0.0.0.0/0            0.0.0.0/0

ネットワーク転送ルールを開始する

パブリック ネットワークにより、210.14.67.7イントラネットはインターネット192.168.188.0/24にアクセスできます

iptables -t nat -A POSTROUTING -s 192.168.188.0/24 -j SNAT --to-source 210.14.67.127

ポート マッピング

このマシンのポート 2222 は、イントラネット仮想マシンのポート 22 にマップされています

iptables -t nat -A PREROUTING -d 210.14.67.127 -p tcp --dport 2222  -j DNAT --to-dest 192.168.188.115:22

文字列一致

たとえば、TCP 接続のすべての文字列をフィルタリングしtest、表示されたら接続を終了する場合は、次のようにします。

iptables -A INPUT -p tcp -m string --algo kmp --string "test" -j REJECT --reject-with tcp-reset
iptables -L

# Chain INPUT (policy ACCEPT)
# target     prot opt source               destination
# REJECT     tcp  --  anywhere             anywhere            STRING match "test" ALGO name kmp TO 65535 reject-with tcp-reset
#
# Chain FORWARD (policy ACCEPT)
# target     prot opt source               destination
#
# Chain OUTPUT (policy ACCEPT)
# target     prot opt source               destination

Windows ワーム攻撃の阻止

iptables -I INPUT -j DROP -p tcp -s 0.0.0.0/0 -m string --algo kmp --string "cmd.exe"

SYN フラッド攻撃を防ぐ

iptables -A INPUT -p tcp --syn -m limit --limit 5/second -j ACCEPT

SECMARK レコードを追加

iptables -t mangle -A INPUT -p tcp --src 192.168.1.2 --dport 443 -j SECMARK --selctx system_u:object_r:myauth_packet_t
# 向从 192.168.1.2:443 以TCP方式发出到本机的包添加MAC安全上下文 system_u:object_r:myauth_packet_t

その他の例

iptables で強力なセキュリティ シールドを構築する http://www.imooc.com/learn/389

iptables: Linux でのアプリケーション層ファイアウォール ツール

iptables 5 チェーン: フック ポイントに対応
netfilter: Linux オペレーティング システムのコア層内のデータ パケット処理モジュール
フック ポイント: netfilter 内のデータ パケットのマウント ポイント。PRE_ROUTING / INPUT / OUTPUT / FORWARD / POST_ROUTING

iptables & netfilter
[外部リンク 画像の転送に失敗しました。ソース サイトにはアンチ リーチング メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-stZEWRWs-1682768669213)(http://7xq89b.com1.z0. glb.clouddn.com/netfilter&iptables.jpg)]

iptables 4 table 5 links
[外部リンク 画像の転送に失敗しました。ソース サイトにはアンチ リーチング メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-7l0oglDb-1682768669214) (http://7xq89b.com1. z0.glb.clouddn.com/iptables-data-stream.jpg)]

iptables ルール
[外部リンクの画像転送に失敗しました。ソース サイトにはアンチ リーチング メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-28PmmPJe-1682768669214)(http://7xq89b.com1.z0.glb .clouddn.com/iptables -rules.jpg)]

  • 4テーブル

filter : アクセス制御 / ルール マッチング
nat : アドレス転送
mangle / raw

  • ルール

データアクセス制御:ACCEPT / DROP / REJECT
パケット書き換え(nat→アドレス変換):snat / dnat
情報記録:log

利用シーン例

  • シーン 1

tcp 10-22/80 ポートを開く、
icmp を開く、
その他の許可されていないポートからのアクセスを禁止する

既存の問題: このマシンはこのマシンにアクセスできません; このマシンは他のホストにアクセスできません

  • シーン 2

ftp: デフォルトのパッシブ モード (サーバーはクライアントに通知するためにランダム ポートを生成し、クライアントはこのポートにアクティブに接続してデータをプルします) vsftpd : ftp がアクティブ モードをサポートできるようにします (クライアントは
サーバーに通知するためにランダム ポートを生成し、サーバーはこのポートにアクティブに接続してデータを送信します)

  • シーン 3

インターネット アクセスを許可:
web
http -> 80/tcp; https -> 443/tcp
メール
smtp -> 25/tcp; smtps -> 465/tcp
pop3 -> 110/tcp; pop3s -> 995/tcp
imap -> 143 / TCP

内部使用:
ファイル
nfs -> 123/udp
samba -> 137/138/139/445/tcp
ftp -> 20/21/tcp
リモート
ssh -> 22/tcp
sql
mysql -> 3306/tcp
oracle -> 1521/tcp

  • シーン4

nat 転送

  • シーン5

アンチCC攻撃

iptables -L -F -A -D # list flush append delete
# 场景一
iptables -I INPUT -p tcp --dport 80 -j ACCEPT # 允许 tcp 80 端口
iptables -I INPUT -p tcp --dport 10:22 -j ACCEPT # 允许 tcp 10-22 端口
iptables -I INPUT -p icmp -j ACCEPT # 允许 icmp
iptables -A INPUT -j REJECT # 添加一条规则, 不允许所有

# 优化场景一
iptables -I INPUT -i lo -j ACCEPT # 允许本机访问
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 允许访问外网
iptables -I INPUT -p tcp --dport 80 -s 10.10.188.233 -j ACCEPT # 只允许固定ip访问80

# 场景二
vi /etc/vsftpd/vsftpd.conf # 使用 vsftpd 开启 ftp 主动模式
port_enable=yes
connect_from_port_20=YES
iptables -I INPUT -p tcp --dport 21 -j ACCEPT

vi /etc/vsftpd/vsftpd.conf # 建议使用 ftp 被动模式
pasv_min_port=50000
pasv_max_port=60000
iptables -I INPUT -p tcp --dport 21 -j ACCEPT
iptables -I INPUT -p tcp --dport 50000:60000 -j ACCEPT

# 还可以使用 iptables 模块追踪来自动开发对应的端口

# 场景三
iptables -I INPUT -i lo -j ACCEPT # 允许本机访问
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 允许访问外网
iptables -I INPUT -s 10.10.155.0/24 -j ACCEPT # 允许内网访问
iptables -I INPUT -p tcp -m multiport --dports 80,1723 -j ACCEPT # 允许端口, 80 -> http, 1723 -> vpn
iptables -A INPUT -j REJECT # 添加一条规则, 不允许所有

iptables-save # 保存设置到配置文件

# 场景四
iptables -t nat -L # 查看 nat 配置

iptables -t nat -A POST_ROUTING -s 10.10.177.0/24 -j SNAT --to 10.10.188.232 # SNAT
vi /etc/sysconfig/network # 配置网关

iptables -t nat -A POST_ROUTING -d 10.10.188.232 -p tcp --dport 80 -j DNAT --to 10.10.177.232:80 # DNAT

#场景五
iptables -I INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 100 -j REJECT # 限制并发连接访问数
iptables -I INPUT -m limit --limit 3/hour --limit-burst 10 -j ACCEPT # limit模块; --limit-burst 默认为5

おすすめ

転載: blog.csdn.net/u011837804/article/details/130443175