iptablesはエイリアスされたipsへのmysql接続を許可しませんか?


10

MySQLサービスを提供するサーバー上にかなりシンプルなiptablesファイアウォールがありますが、iptablesは非常に一貫性のない結果を与えているようです。

スクリプトのデフォルトポリシーは次のとおりです。

iptables -P INPUT DROP

その後、次のルールでMySQLを公開できます。

iptables -A INPUT -p tcp --dport 3306 -j ACCEPT

このルールを設定すると、サーバー上の任意のソースIPから任意の宛先IPに問題なくMySQLに接続できます。しかし、上記の行を次のように置き換えることでアクセスを3つのIPのみに制限しようとすると、問題が発生します(xxx =マスクされたオクテット)。

iptables -A INPUT -p tcp --dport 3306 -m state --state NEW -s 208.XXX.XXX.184 -j ACCEPT 
iptables -A INPUT -p tcp --dport 3306 -m state --state NEW -s 208.XXX.XXX.196 -j ACCEPT 
iptables -A INPUT -p tcp --dport 3306 -m state --state NEW -s 208.XXX.XXX.251 -j ACCEPT 

上記のルールが適用されると、次のことが起こります。

  • 私がすることができ、それのデフォルトのIPアドレス使用してうまく限り、MySQLサーバに接続してい0.184、0.196と0.251のホストからMySQLサーバーに接続するか、デフォルトのIPアドレスと同じサブネット内のIPエイリアスを。

  • 私はできない私が0.184または0.196ホストから来ているときに、サーバのデフォルトIPとは異なるサブネットからサーバーに割り当てられているIPエイリアスを使用してMySQLに接続するが、0.251はうまく動作します。.184または.196ホストから、Telnetの試行がハングするだけです...

    # telnet 209.xxx.xxx.22 3306
    Trying 209.xxx.xxx.22...
    
  • .251行を削除すると(.196が最後のルールが追加されます)、. 196ホストはIPエイリアスを使用してMySQLに接続できません(そのため、一貫性のない動作を引き起こしているルールの順序ではありません)。確かに、この3つのルールを追加する順序は関係ないので、この特定のテストは愚かでしたが、誰かが尋ねるかもしれません。

  • 「パブリック」ルールに戻すと、すべてのホストがデフォルトまたはエイリアスIP(いずれかのサブネット内)を使用してMySQLサーバーに接続できます。

    iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
    

サーバーはCentOS 5.4 OpenVZ / Proxmoxコンテナー(2.6.32-4-pve)で実行されています。

そして、iptablesスクリプトのコンテキストで問題のルールを確認したい場合に備えて、これは(xxx =マスクされたオクテット)です。

# Flush old rules, old custom tables
/sbin/iptables --flush
/sbin/iptables --delete-chain

# Set default policies for all three default chains
/sbin/iptables -P INPUT DROP
/sbin/iptables -P FORWARD DROP
/sbin/iptables -P OUTPUT ACCEPT

# Enable free use of loopback interfaces
/sbin/iptables -A INPUT -i lo -j ACCEPT
/sbin/iptables -A OUTPUT -o lo -j ACCEPT

# All TCP sessions should begin with SYN
/sbin/iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

# Accept inbound TCP packets (Do this *before* adding the 'blocked' chain)
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Allow the server's own IP to connect to itself
/sbin/iptables -A INPUT -i eth0 -s 208.xxx.xxx.178 -j ACCEPT

# Add the 'blocked' chain *after* we've accepted established/related connections
#   so we remain efficient and only evaluate new/inbound connections
/sbin/iptables -N BLOCKED
/sbin/iptables -A INPUT -j BLOCKED

# Accept inbound ICMP messages
/sbin/iptables -A INPUT -p ICMP --icmp-type 8 -j ACCEPT
/sbin/iptables -A INPUT -p ICMP --icmp-type 11 -j ACCEPT

# ssh (private)
/sbin/iptables -A INPUT -p tcp --dport 22 -m state --state NEW -s xxx.xxx.xxx.xxx -j ACCEPT          

# ftp (private)
/sbin/iptables -A INPUT -p tcp --dport 21 -m state --state NEW -s xxx.xxx.xxx.xxx -j ACCEPT          

# www (public)
/sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT                                
/sbin/iptables -A INPUT -p tcp --dport 443 -j ACCEPT                               

# smtp (public)
/sbin/iptables -A INPUT -p tcp --dport 25 -j ACCEPT                                
/sbin/iptables -A INPUT -p tcp --dport 2525 -j ACCEPT                              

# pop (public)
/sbin/iptables -A INPUT -p tcp --dport 110 -j ACCEPT                               

# mysql (private)
/sbin/iptables -A INPUT -p tcp --dport 3306 -m state --state NEW -s 208.xxx.xxx.184 -j ACCEPT 
/sbin/iptables -A INPUT -p tcp --dport 3306 -m state --state NEW -s 208.xxx.xxx.196 -j ACCEPT 
/sbin/iptables -A INPUT -p tcp --dport 3306 -m state --state NEW -s 208.xxx.xxx.251 -j ACCEPT 

何か案は?前もって感謝します。:-)


1
ください.184 or .196 hostsクライアントホストはまたあなたの他のサブネット内の追加のIPアドレスを持っていますか?あなたが行う場合はtcpdump -qn port 3306、あなたが何を参照するか、それらのシステムのいずれかからしようと接続?期待する送信元アドレスがわかりますか?
Zoredache

1
ありがとう、Zordache!それで解決しました。.251ホストには、他のサブネットから割り当てられたIPがありませんでした。他の2つのホストは(.184および.196)を実行するため、他のサブネット上のIPに接続すると、それらのホスト上のソースIPは同じサブネット内のIPに切り替わります。発信/送信元IPは常に割り当てられたデフォルトのIPになると思っていました。ただし、tcpdumpは、同じサブネット内のIPに接続するたびに、ソースIPが209.xxx.xxx.xxxサブネットに変更されることを明確に示しています。(ただし、物理的なProxmoxホストからtcpdumpを実行する必要がありました。)あなたは天才です。ありがとう!
Curtis

回答:


8

.184または.196ホストのクライアントホストにも、他のサブネットに追加のIPアドレスがありますか?

あなたが行う場合はtcpdump -qn port 3306、あなたが何を参照するか、それらのシステムのいずれかからしようと接続?期待する送信元アドレスがわかりますか?これはおそらく単純なルーティングの問題です。

システムがルートを決定するとき、ルートテーブルを調べます。ルートテーブルは、常に特定の順序で参照されるリストです。ローカルネットワークのリンクルートは、ほとんどの場合最も優先されるルートであり、ゲートウェイ(ルーター)を使用するルートの前に使用されます。デフォルトゲートウェイは常に、他のルートが適用されないときに使用されるルートです。特定のルートにルートがsrc定義されている場合、そのアドレスが優先され、そのルートが使用されているときに使用される可能性が最も高くなります。

10.2.13.0/24 dev eth1  proto kernel  scope link  src 10.2.13.1 
10.2.4.0/23 dev eth0  proto kernel  scope link  src 10.2.4.245 
default via 10.2.4.1 dev eth0 

したがって、このマルチホームシステムのルートテーブルの例で10.2.13.0/2410.2.13.1、宛先はすべてから、宛先はすべてから送信10.2.4.0/23され10.2.4.245ます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.