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 の機能を有効にしたままでも、ロードバランサを使った処理の振り分けができるようになった。