iptablesはネットワークファイアウォールを実現する(二)——SNATとDNAT
14130 ワード
個人ブログアドレス:http://www.pojun.tech/ようこそ
前言
前の記事では、Linuxカーネルのファイアウォールの基本的な概念と、4つの表5チェーンに関する知識を簡単に紹介しました.LINUXファイアウォールの紹介を参照してください.さらに,プロトコルとポートをフィルタリングできる単純なネットワークファイアウォールをLinux環境で構築する方法も紹介し,Linux実装ネットワークファイアウォール(一)を参照できる.実際の生産応用では、ファイアウォールの機能が複雑で、私たちが前に紹介した4表5チェーンやパケットの流れのように、実際の応用では重要な役割を果たしています.今日紹介するSNATとDNATは、ファイアウォールルールの構築におけるいくつかの重要な応用です.その中でDNATはLVSクラスタ応用においても重要な役割を果たしていることを後で述べる.
SNATとDNATとは
Network Address Translation(Network Address Translation)は、ネットワークアドレス変換とも呼ばれ、その名の通り、ネットワークデータの伝送中にネットワークアドレスを変換してネットワークデータ伝送の目的を達成することである.詳細については、(ネットワークアドレス変換–Wikipedia)を参照してください. SNAT(ソースアドレス変換)とDNAT(ターゲットアドレス変換)は、ファイアウォールにおけるNATの2つのアプリケーションです.前述したように、ファイアウォールには4つのテーブルがあり、1つのテーブルがnatテーブルであり、このnatテーブルはパケットアドレスを管理するために使用されます.
SNAT
SNATは、ネットワーク伝送中にソースアドレスを変換するだけである.インターネットにアクセスする過程で、ネットワークはパケット形式で伝送され、パケットには宛先アドレスとソースアドレスが含まれていることはよく知られている.これにより、私たちが要求したサーバがデータを処理した後、データが戻ってくることを保証することができる.SNATは、パケット中のソースアドレスをターゲットアドレスが変換されました.変化し、ローカルエリアネットワーク内のホストのセキュリティも相対的に向上しました.
注記、図中のIPアドレスは筆者の実験環境のIPアドレスであり、理解を増やすため、ついでに以下の実験を行い、実際の生産ではIPアドレスが異なるはずである.
環境の説明
役をつとめる
システム環境
ホスト名
アドレス
機能の説明
WEBサーバ
CentOS 7
web
172.18.3.77
Webサービスの提供
Linuxファイアウォール
CentOS 7
iptables
172.18.2.77 192.168.2.77
ファイアウォール規則の定義
LANユーザー
CentOS 6
lan
192.168.2.66
インターネットにアクセス
ローカルエリアネットワーク内のホストがインターネット上のサービスを要求する場合にのみ、ソースアドレス変換が発生し、次のデータフロープロセスと組み合わせて理解しやすい.
DNAT
ローカルエリアネットワークの内部にWEBサービスがセットされているが、インターネットにアクセスしたい場合、どのように解決すればよいか.会社にとって、ipv 4アドレスが1つしかインターネットにリンクされていない可能性がある. この場合、DNAT、すなわちターゲットアドレス変換に使用する必要がある.次のネットワークトポロジー図から、インターネット上のホストがローカルエリアネットワーク内部のネットワークサービスにアクセスするには、外部ネットワークアドレスを持つファイアウォールまたはルーティングを行います.
役をつとめる
システム環境
ホスト名
アドレス
機能の説明
インターネットユーザー
CentOS 7
web
172.18.3.77
ローカルエリアネットワーク内のWebサービスへのアクセス
Linuxファイアウォール
CentOS 7
iptables
172.18.2.77 192.168.2.77
ファイアウォール規則の定義
ローカルエリアネットワークWEBサービス
CentOS 6
lan
192.168.2.66
Webサービスの提供
ファイアウォールでNATルールを定義するにはどうすればいいですか?
SNATとDNATに関する多くの概念が紹介されているが、ファイアウォールではNATルールをどのように定義すればよいのだろうか. 以前の文章では、NATテーブルが影響を及ぼすのはPREROUTINGチェーン、INPUTチェーン、OUTPUTチェーン、POSTRAOUTINGチェーンの4つのチェーンであることが知られている.POSTROOUTINGチェーンに定義すべきであり、DNATファイアウォールのフィルタ転送ルールはPREROUTINGチェーンに定義すべきであり、これによりネットワーク要求を転送することができる.
SNATの実験実装
じっけんかんきょう
ファイアウォールのフィルタリングルールをクリアし、SELinuxをオフにしてファイアウォールのルーティング転送機能をオンにし、ローカルエリアネットワーク内のユーザーがpingでインターネットサービスを利用できることを確保する.ネットワークテストを行う
じっけんプロセス
まず192.168.2セグメントの要求に対してSNATアドレス変換を行い、変換後のソースアドレスは172.18.2.77になる
ローカルエリアネットワークの内部からインターネットのサービスにアクセスするか、正常にアクセスできるか
インターネットのホストで最近のアクセス記録を見ると、最近のアクセス情報が172.18.2.77からアクセスされたことがわかります.これは、ネットワークアドレス変換が発生したことを示しています.
SNATのコマンドフォーマットをまとめます
実験によるDNATの実現
じっけんかんきょう
SNAT実験で設定された各種フィルタリングルールをクリアする.インターネットのホストは、ファイアウォールホストにアクセスできるが、ローカルエリアネットワーク内のネットワークサービスにアクセスできず、ファイアウォールの外部ネットワークIPを通じてもアクセスできない.
じっけんプロセス
以前の議論によれば、natテーブルのPREROUTINGチェーンにポリシーを追加し、パブリックネットワークアドレス(172.18.2.77)にアクセスする要求をイントラネットワークアドレス(192.168.2.66)に転送する必要があります.
このとき,インターネットホストからネットワークIPを介してローカルエリアネットワーク内サービスにアクセスすると,異なる結果が見られる.
ローカルエリアネットワーク内のWebサーバのアクセスログを表示すると、外部ネットワークホストからアクセスされたレコードが表示されます.
これでDNATのファイアウォールポリシーが完了しました.
DNATのコマンドフォーマットをまとめます
上の配置と学習を経て、私たちは簡単なネットワークファイアウォールを構築しました.実際の生産では自分の実際の状況に応じてより詳細な設定を行うことができます.
資料の参考
本文の部分の構想と図示は以下のブログから参考して、ここで敬意を表します.
http://ximenfeibing.blog.51cto.com/8809812/1652136/
前言
前の記事では、Linuxカーネルのファイアウォールの基本的な概念と、4つの表5チェーンに関する知識を簡単に紹介しました.LINUXファイアウォールの紹介を参照してください.さらに,プロトコルとポートをフィルタリングできる単純なネットワークファイアウォールをLinux環境で構築する方法も紹介し,Linux実装ネットワークファイアウォール(一)を参照できる.実際の生産応用では、ファイアウォールの機能が複雑で、私たちが前に紹介した4表5チェーンやパケットの流れのように、実際の応用では重要な役割を果たしています.今日紹介するSNATとDNATは、ファイアウォールルールの構築におけるいくつかの重要な応用です.その中でDNATはLVSクラスタ応用においても重要な役割を果たしていることを後で述べる.
SNATとDNATとは
Network Address Translation(Network Address Translation)は、ネットワークアドレス変換とも呼ばれ、その名の通り、ネットワークデータの伝送中にネットワークアドレスを変換してネットワークデータ伝送の目的を達成することである.詳細については、(ネットワークアドレス変換–Wikipedia)を参照してください. SNAT(ソースアドレス変換)とDNAT(ターゲットアドレス変換)は、ファイアウォールにおけるNATの2つのアプリケーションです.前述したように、ファイアウォールには4つのテーブルがあり、1つのテーブルがnatテーブルであり、このnatテーブルはパケットアドレスを管理するために使用されます.
SNAT
SNATは、ネットワーク伝送中にソースアドレスを変換するだけである.インターネットにアクセスする過程で、ネットワークはパケット形式で伝送され、パケットには宛先アドレスとソースアドレスが含まれていることはよく知られている.これにより、私たちが要求したサーバがデータを処理した後、データが戻ってくることを保証することができる.SNATは、パケット中のソースアドレスをターゲットアドレスが変換されました.変化し、ローカルエリアネットワーク内のホストのセキュリティも相対的に向上しました.
注記、図中のIPアドレスは筆者の実験環境のIPアドレスであり、理解を増やすため、ついでに以下の実験を行い、実際の生産ではIPアドレスが異なるはずである.
環境の説明
役をつとめる
システム環境
ホスト名
アドレス
機能の説明
WEBサーバ
CentOS 7
web
172.18.3.77
Webサービスの提供
Linuxファイアウォール
CentOS 7
iptables
172.18.2.77 192.168.2.77
ファイアウォール規則の定義
LANユーザー
CentOS 6
lan
192.168.2.66
インターネットにアクセス
ローカルエリアネットワーク内のホストがインターネット上のサービスを要求する場合にのみ、ソースアドレス変換が発生し、次のデータフロープロセスと組み合わせて理解しやすい.
DNAT
ローカルエリアネットワークの内部にWEBサービスがセットされているが、インターネットにアクセスしたい場合、どのように解決すればよいか.会社にとって、ipv 4アドレスが1つしかインターネットにリンクされていない可能性がある. この場合、DNAT、すなわちターゲットアドレス変換に使用する必要がある.次のネットワークトポロジー図から、インターネット上のホストがローカルエリアネットワーク内部のネットワークサービスにアクセスするには、外部ネットワークアドレスを持つファイアウォールまたはルーティングを行います.
役をつとめる
システム環境
ホスト名
アドレス
機能の説明
インターネットユーザー
CentOS 7
web
172.18.3.77
ローカルエリアネットワーク内のWebサービスへのアクセス
Linuxファイアウォール
CentOS 7
iptables
172.18.2.77 192.168.2.77
ファイアウォール規則の定義
ローカルエリアネットワークWEBサービス
CentOS 6
lan
192.168.2.66
Webサービスの提供
ファイアウォールでNATルールを定義するにはどうすればいいですか?
SNATとDNATに関する多くの概念が紹介されているが、ファイアウォールではNATルールをどのように定義すればよいのだろうか. 以前の文章では、NATテーブルが影響を及ぼすのはPREROUTINGチェーン、INPUTチェーン、OUTPUTチェーン、POSTRAOUTINGチェーンの4つのチェーンであることが知られている.POSTROOUTINGチェーンに定義すべきであり、DNATファイアウォールのフィルタ転送ルールはPREROUTINGチェーンに定義すべきであり、これによりネットワーク要求を転送することができる.
SNATの実験実装
じっけんかんきょう
ファイアウォールのフィルタリングルールをクリアし、SELinuxをオフにしてファイアウォールのルーティング転送機能をオンにし、ローカルエリアネットワーク内のユーザーがpingでインターネットサービスを利用できることを確保する.ネットワークテストを行う
#
[root@iptables ~]#iptables -F
#
[root@iptables ~]#echo 1 > /proc/sys/net/ipv4/ip_forward
# ping
[root@lan ~]$ping 172.18.3.77
PING 172.18.3.77 (172.18.3.77) 56(84) bytes of data.
64 bytes from 172.18.3.77: icmp_seq=1 ttl=63 time=1.00 ms
64 bytes from 172.18.3.77: icmp_seq=2 ttl=63 time=1.52 ms
#
[root@lan ~]$curl http://172.18.3.77
www.google.com
じっけんプロセス
まず192.168.2セグメントの要求に対してSNATアドレス変換を行い、変換後のソースアドレスは172.18.2.77になる
[root@iptables ~]#iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -j SNAT --to-source 172.18.2.77
# nat
[root@iptables ~]#iptables -vnL -t nat
Chain PREROUTING (policy ACCEPT 1 packets, 229 bytes)
pkts bytes target prot opt in out source destination
Chain INPUT (policy ACCEPT 1 packets, 229 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 SNAT all -- * * 192.168.2.0/24 0.0.0.0/0 to:172.18.2.77
ローカルエリアネットワークの内部からインターネットのサービスにアクセスするか、正常にアクセスできるか
[root@lan ~]$curl http://172.18.3.77
www.google.com
インターネットのホストで最近のアクセス記録を見ると、最近のアクセス情報が172.18.2.77からアクセスされたことがわかります.これは、ネットワークアドレス変換が発生したことを示しています.
[root@web ~]#tail -1 /var/log/httpd/access_log
172.18.2.77 - - [23/Oct/2017:15:46:35 +0800] "GET / HTTP/1.1" 200 15 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.21 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2"
SNATのコマンドフォーマットをまとめます
iptables -t nat -A POSTROUTING -s LocalNET ! -d LocalNet -j SNAT --to-source ExtIP
実験によるDNATの実現
じっけんかんきょう
SNAT実験で設定された各種フィルタリングルールをクリアする.インターネットのホストは、ファイアウォールホストにアクセスできるが、ローカルエリアネットワーク内のネットワークサービスにアクセスできず、ファイアウォールの外部ネットワークIPを通じてもアクセスできない.
#
[root@web ~]#curl http://192.168.2.66
curl: (7) Failed to connect to 192.168.2.66: Network is unreachable
# IP
[root@web ~]#curl http://172.18.2.77
curl: (7) Failed connect to 172.18.2.77:80; Connection refused
#
[root@web ~]#ping 172.18.2.77
PING 172.18.2.77 (172.18.2.77) 56(84) bytes of data.
64 bytes from 172.18.2.77: icmp_seq=1 ttl=64 time=0.857 ms
64 bytes from 172.18.2.77: icmp_seq=2 ttl=64 time=0.642 ms
じっけんプロセス
以前の議論によれば、natテーブルのPREROUTINGチェーンにポリシーを追加し、パブリックネットワークアドレス(172.18.2.77)にアクセスする要求をイントラネットワークアドレス(192.168.2.66)に転送する必要があります.
[root@iptables ~]#iptables -t nat -A PREROUTING -d 172.18.2.77 -p tcp --dport 80 -j DNAT --to-destination 192.168.2.66:80
#
[root@iptables ~]
#iptables -vnL -t nat
Chain PREROUTING (policy ACCEPT 7 packets, 1351 bytes)
pkts bytes target prot opt in out source destination
0 0 DNAT tcp -- * * 0.0.0.0/0 172.18.2.77 tcp dpt:80 to:192.168.2.66:80
Chain INPUT (policy ACCEPT 7 packets, 1351 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
このとき,インターネットホストからネットワークIPを介してローカルエリアネットワーク内サービスにアクセスすると,異なる結果が見られる.
[root@web ~]#curl http://172.18.2.77
LAN SERVER
ローカルエリアネットワーク内のWebサーバのアクセスログを表示すると、外部ネットワークホストからアクセスされたレコードが表示されます.
[root@lan ~]$tail -1 /var/log/httpd/access_log
172.18.3.77 - - [25/Sep/2017:07:34:18 +0800] "GET / HTTP/1.1" 200 11 "-" "curl/7.29.0"
これでDNATのファイアウォールポリシーが完了しました.
DNATのコマンドフォーマットをまとめます
iptables -t nat -A PREROUTING -d ExtIP -p tcp|udp --dport PORT -j DNAT --to-destination InterSeverIP[:PORT]
上の配置と学習を経て、私たちは簡単なネットワークファイアウォールを構築しました.実際の生産では自分の実際の状況に応じてより詳細な設定を行うことができます.
資料の参考
本文の部分の構想と図示は以下のブログから参考して、ここで敬意を表します.
http://ximenfeibing.blog.51cto.com/8809812/1652136/