web-dev-qa-db-ja.com

csfでブロックされたMySQLポート3306は、外部ホストからポート3306にTelnetで接続できます。

同じウェブホスティング会社内の新しいマシンに最近移行されたCentos6VPSがあります。 WHM/cPanelを実行しており、csf/lfdがインストールされています。 csfは、主にVanilla構成でセットアップされます。私はiptablesの専門家ではありません、csfは以前に私を失望させませんでした。ポートがTCP_INリストにない場合は、ファイアウォールでiptablesによってブロックする必要があります。

私の問題は、外部ホストからポート3306にtelnetで接続できることですが、csfのルールにより、iptablesは3306をブロックする必要があると思います。この開いているポートが原因で、セキュリティチェックに失敗しています。 (この出力は、無実の人を保護するために難読化されています。www.ourhost.comはファイアウォールの問題があるホストです)

[root@nickfenwick log]# telnet www.ourhost.com 3306
Trying 158.255.45.107...
Connected to www.ourhost.com.
Escape character is '^]'.
HHost 'nickfenwick.com' is not allowed to connect to this MySQL serverConnection closed by foreign Host.

そのため、接続が確立され、MySQLはその構成のために接続を拒否します。 MySQLに到達する前に、ファイアウォールレベルでネットワーク接続を拒否する必要があります。

WHMのcsfWeb UIを使用すると、「ファイアウォール構成」にかなり賢明なTCP_IN行が含まれていることがわかります。

TCP_IN: 20,21,22,25,53,80,110,143,222,443,465,587,993,995,2077,2078,2082,2083,2086,2087,2095,2096,8080

(今のところそれを少しトリミングできることを無視しましょう。私の懸念は、3306がnotそのリストにリストされていることです)

Csfを再起動すると、iptablesルールを設定するときに、通常の大量の出力がログに記録されます。たとえば、すべてのトラフィックをブロックし、22でSSHなどの特定のポートを許可するように見えます。

[cut]
DROP  all opt -- in * out *  0.0.0.0/0  -> 0.0.0.0/0  
[cut]
ACCEPT  tcp opt -- in !lo out *  0.0.0.0/0  -> 0.0.0.0/0  state NEW tcp dpt:22 
[cut]

Iptablesが実行されていることがわかります。service iptables statusはファイアウォールルールの長いリストを返します。

これがChain INPUTservice iptables statusセクションです。ファイアウォールがどのように構成されているかを示すには、これで十分です。

Table: filter
Chain INPUT (policy DROP)
num  target     prot opt source               destination         
1    acctboth   all  --  0.0.0.0/0            0.0.0.0/0           
2    ACCEPT     tcp  --  217.112.88.10        0.0.0.0/0           tcp dpt:53 
3    ACCEPT     udp  --  217.112.88.10        0.0.0.0/0           udp dpt:53 
4    ACCEPT     tcp  --  217.112.88.10        0.0.0.0/0           tcp spt:53 
5    ACCEPT     udp  --  217.112.88.10        0.0.0.0/0           udp spt:53 
6    ACCEPT     tcp  --  8.8.4.4              0.0.0.0/0           tcp dpt:53 
7    ACCEPT     udp  --  8.8.4.4              0.0.0.0/0           udp dpt:53 
8    ACCEPT     tcp  --  8.8.4.4              0.0.0.0/0           tcp spt:53 
9    ACCEPT     udp  --  8.8.4.4              0.0.0.0/0           udp spt:53 
10   ACCEPT     tcp  --  8.8.8.8              0.0.0.0/0           tcp dpt:53 
11   ACCEPT     udp  --  8.8.8.8              0.0.0.0/0           udp dpt:53 
12   ACCEPT     tcp  --  8.8.8.8              0.0.0.0/0           tcp spt:53 
13   ACCEPT     udp  --  8.8.8.8              0.0.0.0/0           udp spt:53 
14   LOCALINPUT  all  --  0.0.0.0/0            0.0.0.0/0           
15   ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
16   INVALID    tcp  --  0.0.0.0/0            0.0.0.0/0           
17   ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
18   ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:20 
19   ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:21 
20   ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22 
21   ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:25 
22   ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:53 
23   ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:80 
24   ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:110 
25   ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:143 
26   ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:222 
27   ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:443 
28   ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:465 
29   ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:587 
30   ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:993 
31   ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:995 
32   ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:2077 
33   ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:2078 
34   ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:2082 
35   ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:2083 
36   ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:2086 
37   ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:2087 
38   ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:2095 
39   ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:2096 
40   ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:8080 
41   ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0           state NEW udp dpt:20 
42   ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0           state NEW udp dpt:21 
43   ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0           state NEW udp dpt:53 
44   ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0           state NEW udp dpt:222 
45   ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0           state NEW udp dpt:8080 
46   ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           icmp type 8 
47   ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           icmp type 0 
48   ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           icmp type 11 
49   ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           icmp type 3 
50   LOGDROPIN  all  --  0.0.0.0/0            0.0.0.0/0           

次に確認することは何ですか?

2
Neek

LOGDROPINまたはacctbothが何を定義しているのかわかりませんが、これが私がそれをどのように行うかです。

  1. リモート接続を受け入れるためにMySQLが必要ない場合は、最初にMySQL構成を変更して、0.0.0.0またはIPアドレスではなく127.0.0.1にバインドします。これにより、ローカルホストへのすべてのmysqlアクセスが制限され、新しいMySQLインストールのデフォルトであると思います。 (これはIPTABLESの質問には答えませんが、とにかく行う必要があります。)

  2. IPTABLESの問題を追跡するには、どのルールがトラバースされているかを正確に示すIPTABLESTRACE機能を使用することをお勧めします。気の利いた パケットフロー図 があります。これから、rawテーブルにOUTPUTチェーンとPREROUTINGチェーンが組み込まれていることがわかります。これは、2.6.23を超えるカーネルを使用しているか、適切なオプションを使用して独自のカーネルをコンパイルしていることも前提としています。

次のようなものを追加します。

iptables -t raw -A OUTPUT -p tcp --dport 3306 -j TRACE
iptables -t raw -A PREROUTING -p --dport 3306 tcp  -j TRACE

カーネルにmysql接続をトレースさせる。パケットが通過した特定のルールをログで確認できるはずです。このボックスにすでにこのポートを通過するトラフィックがある場合は、上記のルールでIPアドレスをフィルタリングして、ノイズを少なくすることもできます。

また、ここに tracing iptables に関する優れた投稿があります。

お役に立てれば!

1
jpgeek