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:ログに記録
フロー図
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
参考
ステートフルパケットフィルタを使ったサービスの公開:習うより慣れろ! iptablesテンプレート集(1)(1/6 ページ) - @IT
natテーブルを利用したLinuxルータの作成:習うより慣れろ! iptablesテンプレート集(2)(1/6 ページ) - @IT
コネクショントラッキングとネットワークアドレス変換(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
参考
2.8.7. iptables と接続追跡 Red Hat Enterprise Linux 6 | Red Hat Customer Portal
natテーブルを利用したLinuxルータの作成:習うより慣れろ! iptablesテンプレート集(2)(1/6 ページ) - @IT
Linuxで作るファイアウォール[NAT設定編]:ゼロから始めるLinuxセキュリティ(4)(1/2 ページ) - @IT
IPセットと、IPセットのnetfilterルールでの利用
ipset
インストール
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-TOipset 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
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
コネクションをトラッキング(追跡)するツール。
conntrackd
ファイアウォールを冗長化した際に、コネクション情報を conntrackd で同期をすることで、障害が発生しマスター/バックアップが切り替わってもユーザーはそれに気が付かずに通信を継続することができる。
可用性(HA:High Availability)が向上する。
インストール
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