iptables の設定

以前、ロードバランサを構築する際に、iptables の設定が解からず機能をオフにしてやり過ごした。今回は、iptables の機能を有効にしたままでロードバランサが動作するように設定してみる。

LB

初期設定は以下のようになっていた。

% sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
RH-Firewall-1-INPUT  all  --  anywhere             anywhere            

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
RH-Firewall-1-INPUT  all  --  anywhere             anywhere            

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain RH-Firewall-1-INPUT (2 references)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     icmp --  anywhere             anywhere            icmp any 
ACCEPT     esp  --  anywhere             anywhere            
ACCEPT     ah   --  anywhere             anywhere            
ACCEPT     udp  --  anywhere             224.0.0.251         udp dpt:mdns 
ACCEPT     udp  --  anywhere             anywhere            udp dpt:ipp 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ipp 
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh 
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited 

Chain RH-Firewall-1-INPUT に関して。http のパケットに対する記述がないので、最後の行にマッチしパケットが捨てられている。ここに設定を追加すれば動いてくれるだろう。
ということで設定を追加。

% sudo iptables -I  RH-Firewall-1-INPUT 10 -p tcp --dport 80 -j ACCEPT
% sudo iptables -I  RH-Firewall-1-INPUT 11 -p tcp --sport 80 -j ACCEPT

上の設定は、クライアントからのリクエストのパケットを許可させる。下の設定は、Webサーバからのレスポンスのパケットを許可させる。
はじめは、上の設定のみを施していて繋がらず悩んでた。繋がるんだけど、ずっとレスポンス待ちの状態になっていた。WebサーバからのレスポンスがLBで落とされているってのに気付くまでに時間が掛かった。いや、気付いていたんだけど、設定方法がわからなかったんだな。
設定はセーブしないと、再起動時に消えてしまうので、セーブしておく。

% sudo /etc/init.d/iptables save
Web

初期設定はLBと同じ。許可するパケットは自分宛の http だけでいい。

% sudo iptables -I  RH-Firewall-1-INPUT 10 -p tcp --dport 80 -j ACCEPT


これで、iptables の機能を有効にしたままでも、ロードバランサを使った処理の振り分けができるようになった。