CentOS 6のiptablesでリダイレクト


最近LVSのDSR構成やSSHのポート変換と続けてiptablesのリダイレクト設定を行ったのでメモ。
iptablesについては全然知識が不足していると実感したので、もう一度調べて理解を深めたいところです。

例としてこのブログサイトをポート8080でアクセスした場合に、ポート80にリダイレクトするように設定してみます。

サーバ

ホスト名 IPアドレス
web 192.168.10.5

 

コマンド

[root@web ~]# iptables -t nat -A PREROUTING -d 192.168.10.5 -p tcp -m tcp --dport 8080 -j REDIRECT --to-port 80

 

設定確認

[root@web ~]# iptables -nL -t nat
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
REDIRECT   tcp  --  0.0.0.0/0            192.168.10.5        tcp dpt:8080 redir ports 80

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
</pre>

 

ブラウザで確認してみる

このサイトのURL(http://www.eastforest.jp/esthome/)にポート8080を指定して実行してみる。

redirect_01

 

リダイレクトされて画面が表示された。

redirect_02

chromeの場合F12を押すとDeveloper toolが表示されるので、リダイレクトの際に見てみるとステータスコード301でリダイレクトされていることが分かります。

developer

 

設定を保存

[root@web ~]# /etc/init.d/iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]

 

設定ファイル

[root@web ~]# vi /etc/sysconfig/iptables

*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A PREROUTING -d 192.168.10.5/32 -p tcp -m tcp --dport 8080 -j REDIRECT --to-ports 80
COMMIT

設定ファイルに直接記述しても構いません。その場合はiptablesを再起動する必要があります。

最後に

設定は戻していますのであしからず。

参考
80番ポートへ届いたパケットをiptablesでローカルの上位ポートに転送する
KeepalivedによるロードバランサLVS構築