3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

今さらながらiptables基本(その2)

Posted at

iptablesの超基本(NAT)

前回(今さらながらiptables基本(その1))の続き。iptablesにおけるNATの基本設定を、Wiresharkで取得したデータとともに記載。

参考サイト

ネットワーク

image.png
VirtualBoxで3つのVMを設けて接続する。前回と同じであるが、中央のルーターであるLubuntuが”NAT Router”となっており、左がNATの内側、右がNATの外側である。

準備など

前回とほぼ同じ。

NAT Router(Lubunts)

# sysctl -w net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1

パケット転送を許可する。

サーバー側(右のVM: Busterdog 2)

$ ping 192.168.10.10
$ nc -l -p 1234

クライアント側(左のVM: Busterdog 1)

$ ping 172.16.0.21
$ nc -z 172.16.0.21 1234

検証

IPマスカレード

NAT Routerでの設定である。以下、同様。

$ sudo iptables -t nat -A POSTROUTING -i enp0s8 -j MASQUERADE
iptables v1.8.4 (legacy): Can't use -i with POSTROUTING

Try `iptables -h' or 'iptables --help' for more information.

あえて、エラーも記載。POSTROUTINGと"-i"オプション(NAT内側からの入力)とは共存できない。

$ sudo iptables -t nat -A POSTROUTING -o enp0s9 -j MASQUERADE
$
$ sudo iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
MASQUERADE  all  --  anywhere             anywhere            

マスカレード(MASQUERAGE)、"-o"(NAT外側への出力)、POSTROUTINGとを組みあわせる。この設定前後のping受け側(サーバー側、右のVM)のWiresharkデータは下記となる。
NAT前後atServer.png
パケット番号8までが設定前のデータであり、送信元IPアドレスが、左のVMのIPアドレスとなっている。パケット番号13以降が設定後のデータであり、送信元IPアドレスが、NAT RouterのIPアドレスとなっている。(期待どおり)。

しかし、これだけの設定だと、NAT外側からNAT内側へ通信ができてしまう。右のVMから左のVMへのpingの結果は下記となり、疎通がある。

$ ping 192.168.10.10
PING 192.168.10.10 (192.168.10.10) 56(84) bytes of data.
64 bytes from 192.168.10.10: icmp_seq=1 ttl=63 time=1.30 ms
64 bytes from 192.168.10.10: icmp_seq=2 ttl=63 time=1.42 ms

NATとしては、下記するフィルター設定が必要となる。

フィルター設定

$ sudo iptables -P FORWARD DROP
$ sudo iptables -A FORWARD -i enp0s8 -o enp0s9 -j ACCEPT
$ sudo iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
  • FORWARD(転送)の基本はDROP(通さない)
  • NAT内側からNAT外側への転送はACCEPT(通す)
  • ステートフルな転送はACCEPT(通す)

フィルターの設定状況は下記となる。

$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy DROP)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

フィルター設定前後の右側VMからのpingのWiresharkデータは下記となる。
フィルター導入前後atServer.png
パケット番号26までが設定前でデータあり、左側VMからレスポンスがある。パケット番号30以降が設定後のデータであり、左側VMからレスポンスがない。(期待どおり。)

また、TCPセッションの状況(Server側、右側VM)のデータも下記する。
フィルター導入後TCPatServer.png
TCPセッションが適切に行われている。

終わりに

これが基本であろう。他にも基本的なiptablesの事項で説明できそうなものが見つかれば、その3を考えてみたい。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?