見出し画像

334.3 パケットフィルタリング


課題 334: ネットワークセキュリティ
334.3 パケットフィルタリング

LPIC303の試験範囲である主題331~335まであるうちの「334: ネットワークセキュリティ」から「334.3 パケットフィルタリング」についてのまとめ

  • 総重量:5

  • 説明:
    Linuxパケットフィルタのnetfilterの設定と利用の知識がある。

  • 主要な知識範囲:

    • DMZを含む一般的なファイアウォールと構造の理解。

    • 一般的なモジュール・テスト・ターゲットを含む、iptables, ip6tablesの利用と理解。

    • IPv4とIPv6のパケットフィルタリングの実施。

    • コネクショントラッキングとネットワークアドレス変換(NAT)の実施。

    • IPセットと、IPセットのnetfilterルールでの利用。

    • nftablesとnftの知識

    • ebtablesの知識

    • conntrackdの知識

  • 重要なファイル、用語、ユーティリティ:

    • iptables

    • ip6tables

    • iptables-save

    • iptables-restore

    • ip6tables-save

    • ip6tables-restore

    • ipset


DMZを含む一般的なファイアウォールと構造の理解

DMZとは

  • DeMilitarized Zone / 非武装地帯

  • 安全なネットワーク(=内部=LAN)と危険なネットワーク(=外部=WAN)の間に配置するセキュリティの緩衝地帯

  • 通常は、メール配送サーバー(SMTP)、WEB、DNS、VPNといった、外部ネットワークに公開するようなサーバーを配置する。

ファイアウォール

  • 防火壁

  • パケットフィルタリングを行う

  • IPアドレス、TCP/UDP、プロトコルなどでフィルタリングをする

  • OSI参照モデルのレイヤ3~4に対応できる

  • ルーティングを行う

  • ステートフルインスペクション機能がある

その他のセキュリティデバイス

  • アプリケーションゲートウェイ
    パケットを受け取り、何らかの処理をしてから、別ネットワークに転送する

  • プロキシサーバー
    クライアントの代理で通信する
    アプリケーションサーバーと同じ

  • WAF : Web Application Firewall
    WEBアプリケーションに特化したファイアウォール

  • UTM : Unified Threat Management/ 統合脅威管理
    パケットフィルタだけでなく、ウイルス対策、スパム対策、VPN、侵入防止(IDSやIPS)、WEBフィルタリングなど、単体のデバイスで様々な脅威に対応できる多機能なファイアウォール



iptables, ip6tablesの利用と理解

iptabls

  • IPv4のパケットフィルタリング

  • 設定ファイル:/etc/sysconfig/iptables

  • 設定の保存:iptables-saveコマンド

  • 設定の復元:iptables-restoreコマンド

iptables6

  • IPv6のパケットフィルタリング

  • 設定ファイル:/etc/sysconfig/ip6tables

  • 設定の保存:ip6tables-saveコマンド

  • 設定の復元:ip6tables-restoreコマンド

チェイン

  • INPUT
    ネットワーク → ローカルプロセス

  • OUTPUT
    ローカルプロセス → ネットワーク

  • FORWARD
    IPフォワーディング、中継

  • PREROUTING
    パケット受信時、ルーティングされる前の処理

  • POSTROUTING
    パケット送信時、ルーティングされた後の処理

テーブル

  • filter
    INPUT、OUTPUT、FORWARD
    フィルタリングすることができる

  • nat
    OUTPUT、PREROUTING、POSTROUTING
    NATすることができる
    → SNAT, DNAT, MASQUERADE ができる

  • mangle
    すべてのチェイン
    IPヘッダの内容を書き換えることができる
    → QoS時のTOSフィールドを書き換える など

ターゲット

  • ACCEPT:許可

  • DROP:破棄

  • REJECT:拒否+相手にICMPで通知

  • SNAT:送信元NAT

  • DNAT:宛先NAT

  • MASQUERADE:PAT

  • LOG:ログに記録

フロー図

iptablesの仕組みを図解 - Carpe Diem

IPv4とIPv6のパケットフィルタリングの実施

iptablesのオプション

  • -A, --append chain rule-specification

  • [!] -s, --source address[/mask][,...]
    送信元IPアドレス

  • [!] -d, --destination address[/mask][,...]
    宛先IPアドレス

  • -m, --match match

  • [!] -p, --protocol protocol
    tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp, mh
    プロトコル

  • [!] --source-port,--sport port[:port]
    送信元ポート番号

  • [!] --destination-port,--dport port[:port]
    宛先ポート番号

  • -j, --jump target
    条件にマッチしたパケットの処理方法
    ACCEPT, DROP, REJECT, SNAT, DNAT, MASQUERADE, LOG など

  • -4, --ipv4

  • -6, --ipv6

実行例

  • 192.168.10.100 <-> 192.168.20.20:22(ssh)
    チェインがINPUTなので、自ホストで動かしているSSHサーバーへのSSH通信を許可している

iptables -A INPUT -p tcp -s 192.168.10.100 -d 192.168.20.20 --dport 22 -j ACCEPT
  • any <-> 192.168.20.20:80(http)
    チェインがINPUTなので、自ホストで動かしているWEBサーバーへのHTTP通信を許可している

iptables -A INPUT -p tcp -d 192.168.20.20 --dport 80 -j ACCEPT
  • any <-> 23.45.67.89:80(http)
    チェインがFORWARDなので、23.45.67.89で動かしているWEBサーバーへのHTTP通信を通過することを許可している

iptables -A FORWARD -p tcp -d 23.45.67.89 --dport 80 -j ACCEPT

参考


コネクショントラッキングとネットワークアドレス変換(NAT)の実施

コネクショントラッキング

ファイアウォールは通信を追跡しながら通信制御をするステートフルインスペクションという機能がある。 このステートフルインスペクションを実現するのがコネクショントラッキング機能になる。

トラッキングできるステート

  • NEW
    新しい接続を要求するパケット

  • ESTABLISHED
    既存の接続の一部であるパケット

  • RELATED
    新しい接続を要求しているが、既存の接続の一部であるパケット

  • INVALID
    接続追跡テーブル内の接続の一部ではないパケット

トラッキングするタイミング

  • ローカルプロセスから発生する通信の場合
    OUTPUTチェイン = ローカルプロセスから発信してすぐ

  • 上記以外
    PREROUTINGチェイン = パケットを受信してすぐ

ネットワークアドレス変換(NAT)

  • NAT
    - ネットワークアドレス変換の総称
    - 1 対 1 の変換を実現

  • PAT/NAPT/IPマスカレード
    - IPアドレスとTCP/UDPのポート番号を組み合わせてアドレス変換をする
    - 一般用語はNAPT、PATはCisco用語、IPマスカレードはLinux用語
    - 1 対 多 の変換を実現するもので、特に 多 → 1 へのアドレス変換に使用
    - 1 → 多 への変換はポートフォワーディングという別の手段が必要

  • SNAT
    - 送信元のアドレスだけを変換する
    - 内部 → 外部 への通信で使われる
    - 送信元アドレスの隠蔽することができる
    - PATもSNATの一種
    - POSTROUTINGチェインで処理する

  • DNAT
    - 宛先のアドレスだけ変換する
    - 外部 → 内部 への通信で使われる
    - ポートフォワーディングもDNATの一種
    - PREROUTINGチェインで処理する

ルール

  • SNAT
    チェイン(-A):POSTROUTING
    テーブル(-t):nat
    ターゲット(-j):SNAT

★宛先IPが 192.168.0.10 だったら、送信元IPを 172.16.0.10 に変換する★
iptables -t nat -A POSTROUTING -d 192.168.0.10 -j SNAT --to-source 172.16.0.10
  • DNAT
    チェイン(-A):PREROUTING
    テーブル(-t):nat
    ターゲット(-j):DNAT

★宛先IPが 172.16.0.10 だったら、宛先IPを 192.168.0.10 に変換する★
iptables -t nat -A PREROUTING -d 172.16.0.10 -i eth0 -j DNAT --to 192.168.0.10
  • PAT
    チェイン(-A):POSTROUTING
    テーブル(-t):nat
    ターゲット(-j):MASQUERADE

★送信元IPが 192.168.0.0/24 だったら eth0 のアドレスに変換する★
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j MASQUERADE

参考


IPセットと、IPセットのnetfilterルールでの利用

ipset

ipset ユーティリティーは、Linux カーネルで IP セット を管理するために使用されます。IP セットは、IP アドレス、ポート番号、IP と MAC アドレスのペア、または IP アドレスとポート番号のペアを格納するフレームワークです。

2.8.9.5. iptables および IP セット Red Hat Enterprise Linux 6 | Red Hat Customer Portal

インストール

  • RockyLinux 9

[root@lpic303-rocky34 ~]#
[root@lpic303-rocky34 ~]# dnf install ipset
[root@lpic303-rocky34 ~]#
  • Ubuntu22.04

root@lpic303-ubuntu35:~#
root@lpic303-ubuntu35:~# apt install ipset
root@lpic303-ubuntu35:~#

コマンド

  • 引数
    - SETNAME:IPセットの任意の名前
    - TYPENAME:list:set, hash:ip, bitmap:ip など

  • ipset create SETNAME TYPENAME [ CREATE-OPTIONS ]
    ipset n SETNAME TYPENAME [ CREATE-OPTIONS ]
    IPセットを作成する

  • ipset add SETNAME ADD-ENTRY [ ADD-OPTIONS ]
    IPセットにエントリーを追加する

  • ipset del SETNAME DEL-ENTRY [ DEL-OPTIONS ]
    IPセットからエントリーを削除する

  • ipset test SETNAME TEST-ENTRY [ TEST-OPTIONS ]
    IPセットをテストする

  • ipset destroy [ SETNAME ]
    ipset x [ SETNAME ]
    IPセットを削除する

  • ipset list [ SETNAME ]
    IPセットの内容を確認する

  • ipset save [ SETNAME ]
    IPセットを保存する

  • ipset restore
    IPセットを保存する

  • ipset flush [ SETNAME ]
    IPセットのエントリーを一括で削除する

  • ipset rename SETNAME-FROM SETNAME-TO
    ipset e SETNAME-FROM SETNAME-TO
    IPセットの名前を変更する

  • ipset swap SETNAME-FROM SETNAME-TO
    ipset w SETNAME-FROM SETNAME-TO

  • ipset help [ TYPENAME ]
    ヘルプを参照する

タイプ

bitmap:
- 大規模ネットワーク向け
- rangeオプションでネットワークの範囲を定義する
- rangeで指定したネットワーク範囲以外はaddできない
hash:
- 小規模ネットワーク向け
- 使い勝手が良い
list:set:
- セットを格納することができる
- セットをグルーピングできる

  • bitmap:ip

  • bitmap:ip,mac

  • bitmap:port

  • hash:ip

  • hash:net

  • hash:ip,port

  • hash:ip,port,ip

  • hash:ip,port,net

  • hash:net,port

  • hash:net,iface

  • list:set

使用例

[root@lpic303-rocky34 ~]#
[root@lpic303-rocky34 ~]# ipset create my-block-set hash:net
[root@lpic303-rocky34 ~]# ipset add my-block-set 10.0.0.0/8
[root@lpic303-rocky34 ~]# ipset add my-block-set 172.16.0.0/12
[root@lpic303-rocky34 ~]# ipset add my-block-set 192.168.0.0/16
[root@lpic303-rocky34 ~]#
[root@lpic303-rocky34 ~]# ipset list my-block-set
Name: my-block-set
Type: hash:net
Revision: 7
Header: family inet hashsize 1024 maxelem 65536 bucketsize 12 initval 0xd880cb91
Size in memory: 616
References: 0
Number of entries: 3
Members:
172.16.0.0/12
192.168.0.0/16
10.0.0.0/8
[root@lpic303-rocky34 ~]#
[root@lpic303-rocky34 ~]# iptables -A INPUT -m set --set my-block-set src -j DROP
--set option deprecated, please use --match-set
[root@lpic303-rocky34 ~]#

参考


nftablesとnftの知識

nftables

nftables フレームワークはパケットを分類し、iptables、ip6tables、arptables、ebtables、および ipset ユーティリティーの後継です

第10章 nftables の使用 Red Hat Enterprise Linux 8 | Red Hat Customer Portal

nft

  • nftablesフレームワークに含まれるユーティリティー

  • イベントを監視する

nftrace

  • nftablesフレームワークに含まれるユーティリティー

  • トレースする

nftables

  • nftablesフレームワークに含まれるユーティリティー

  • テーブルの保存

設定ファイル

  • /etc/nftables/*.nft

  • /etc/sysconfig/nftables.conf

参考


ebtablesの知識

ebtables

  • Ethernetフレームをフィルタリングするツール

  • iptableと同じように操作する

  • nftablesフレームワークの一部になっている

チェイン

  • INPUT
    ネットワーク → ローカルプロセス

  • OUTPUT
    ローカルプロセス → ネットワーク

  • FORWARD
    IPフォワーディング、中継

  • PREROUTING
    パケット受信時、ルーティングされる前の処理

  • POSTROUTING
    パケット送信時、ルーティングされた後の処理

テーブル

  • filter

  • nat

  • broute


conntrackdの知識

conntrack

コネクションをトラッキング(追跡)するツール。

The conntrack utility provides a full-featured userspace interface to the Netfilter connection tracking system that is intended to replace the old /proc/net/ip_conntrack interface.
This tool can be used to search, list, inspect and maintain the connection tracking subsystem of the Linux kernel.
Using conntrack, you can dump a list of all (or a filtered selection of) currently tracked connections, delete connections from the state table, and even add new ones.
In addition, you can also monitor connection tracking events, e.g. show an event message(one line) per newly established connection.
↓↓↓Google翻訳↓↓↓
conntrack ユーティリティは、古い /proc/net/ip_conntrack インターフェイスを置き換えることを目的とした、Netfilter 接続追跡システムへのフル機能のユーザー空間インターフェイスを提供します。
このツールは、Linux カーネルの接続追跡サブシステムの検索、リスト、検査、および保守に使用できます。
conntrack を使用すると、現在追跡されているすべての接続 (またはフィルタリングされた選択) のリストをダンプしたり、状態テーブルから接続を削除したり、新しい接続を追加したりすることができます。
さらに、接続追跡イベントを監視することもできます。 新しく確立された接続ごとにイベント メッセージ (1 行) を表示します。

man  conntrack

conntrackd

ファイアウォールを冗長化した際に、コネクション情報を conntrackd で同期をすることで、障害が発生しマスター/バックアップが切り替わってもユーザーはそれに気が付かずに通信を継続することができる。
可用性(HA:High Availability)が向上する。

conntrackd is the user-space daemon for the netfilter connection tracking system.
This daemon synchronizes connection tracking states between several replica firewalls.
Thus, conntrackd can be used to deploy highly available stateful firewalls.
The daemon supports Primary-Backup and Multiprimary setups and can also be used as statistics collector.
↓↓↓Google翻訳↓↓↓
conntrackd は、netfilter 接続追跡システムのユーザー空間デーモンです。
このデーモンは、複数のレプリカ ファイアウォール間の接続追跡状態を同期します。
したがって、conntrackd を使用して、高可用性のステートフル ファイアウォールを展開できます。
このデーモンは、プライマリ - バックアップおよびマルチプライマリのセットアップをサポートしており、統計コレクタとしても使用できます。

man  conntrackd

インストール

  • RockyLinux 9

[root@lpic303-rocky34 ~]#
[root@lpic303-rocky34 ~]# dnf install conntrack-tools
[root@lpic303-rocky34 ~]#
  • Ubuntu22.04

root@lpic303-ubuntu35:~#
root@lpic303-ubuntu35:~# apt install conntrack
root@lpic303-ubuntu35:~# apt install conntrackd
root@lpic303-ubuntu35:~#

conntrackコマンド

オプション

  • -L --dump
    コネクションを表示する

  • -G, --get
    特定のコネクションをテーブルから検索する

  • -D, --delete
    特定のコネクションをテーブルから削除する

  • -I, --create
    コネクションをテーブルに作成する

  • -U, --update

  • -E, --event

  • -F, --flush
    コネクションをテーブルから全て削除する

  • -C, --count
    コネクションのカウンターを表示する

  • -S, --stats
    コネクションの統計情報を表示する

パラメーター

  • -z, --zero
    カウンターをゼロにする

  • -o, --output [extended,xml,timestamp,id,ktimestamp,labels,userspace]
    出力フォーマットを指定する

  • -s, --src, --orig-src IP_ADDRESS

  • -d, --dst, --orig-dst IP_ADDRESS

  • -p, --proto PROTO

  • --sport, --orig-port-src PORT

  • --dport, --orig-port-dst PORT

  • --icmp-type TYPE

参考


この記事が気に入ったらサポートをしてみませんか?