ubuntuの外部トラフィックに対してポート6379をブロックするにはどうすればよいですか?


8

サーバーのポート6379へのアクセスをブロックしたいのですが、それでも内部的に接続したいと思います。redis-serverアプリケーションはそのポートで実行され、ローカル(127.0.0.1)にのみ接続したいと思います。これどうやってするの?

回答:


11

これを行うには、IPTablesルールが正しく構成されていることを確認する必要があります。Ubuntuは通常、デフォルトでサーバーを広く開いたままにします。そのため、これを適切に行う方法を十分に理解していない限り、サーバーとしての使用はお勧めしません。

あなたiptables -L -nvはこのように見えると思いますよね?

# iptables -L -nv
Chain INPUT (policy ACCEPT 4M packets, 9M bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 8M packets, 4M bytes)
 pkts bytes target     prot opt in     out     source               destination

それは空で、大きく開いています。Ubuntu IPTables HowToはおそらくこれでかなり役に立ちます。(https://help.ubuntu.com/community/IptablesHowTo

私は次のようなものをお勧めします。これにより、任意のインターフェースでSSHを許可し、TCP 6379で任意のインターフェースを許可しますが、不要なインターフェースを許可します。

*filter
:INPUT DROP [92:16679]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [203:36556]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -p tcp -m tcp --dport 6379 -j ACCEPT
-A INPUT -i lo -p udp -m udp --dport 6379 -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i lo -j ACCEPT
COMMIT

次に、このファイルを/etc/iptables.rulesに保存します。

明らかに、特に開いてほしい他のポートを追加する必要があります。

注:明確にするために、特定の6379行を追加しました。Linuxシステムでは、適切な操作のためにすべてのループバック接続を許可する必要があるため、COMMITの直前のACCEPTは実際にこれを許可します。

また、ルールが/ etc / network / interfacesファイルにも含まれるようにして、インターフェースが起動したときにルールが追加され、後でブートプロセスでは追加されないようにします。このようなものを追加することをお勧めします:

auto eth0
iface eth0 inet dhcp
  pre-up iptables-restore < /etc/iptables.rules

編集:この構成を最初にロードするには、上記のiptables-restoreコマンドを実行する必要があります。

iptables-restore < /etc/iptables.rules

これにより、ポート6379がWeb全体に開かれると思いますか?これを127.0.0.1でのみ開くにはどうすればよいですか?
Steve Rodrigue、

いいえ、デフォルトのルールはDROPであるためです。明示的なACCEPTルールがない場合、上部の:INPUTの横にあるデフォルトのDROPによってブロックされます。
マゼラン

個人的には、デフォルトのACCEPTルールは「サーバー」配置では単なる犯罪者だと思います。しかし、Ubuntuが何よりもまずデスクトップディストリビューションであるため、それは当然のことです。
マゼラン

さて、私はあなたが要求したとおりにやっただけですが、それでも外部からポート6379に接続できるようです。サーバーか何かを再起動する必要がありますか?
スティーブ

1
はい、しかし私はカウンターについてあまり気にしません。これは私にとってはうまくいきます。より厳密なプロセスに適合するように、回答を自由に編集してください。
マゼラン

3

まあ、私は「複雑でないファイアウォール」(ufw)を使用することをお勧めします。これは、canonicalでも推奨されています。iptablesの読み書きは、たまにポートロックタスクを行うには複雑すぎます。

こちらをご覧くださいhttps : //wiki.ubuntu.com/UncomplicatedFirewall


1
UFWの古いバージョンには、選択したポートにルールを適用する機能がありませんでした。また、プロのシステム管理者は、自分のiptables設定の機能とチェーンのしくみを理解する習慣を身に付ける必要があります。
マゼラン

2

何かのようなもの

iptables -A INPUT -s 0.0.0.0  -i eth0 --protocol tcp --dport 6379 -j DROP

うまくいくはずです。


これにより、次のエラーが発生します:iptables v1.4.4:不明なオプション `--dport '
Steve Rodrigue

新しいコマンドで再試行できますか?--protocolと-iの部分を追加しました(インターフェースに適応します)。これで動作するはずです。
Kedare

この提案で私が抱えている問題は、他の必要なコマンドが実行されない限り、再起動しても保存されず、非ループバックインターフェイスが1つしかないと想定していることです。
マゼラン

否定演算子の使用をお勧めします:-i!lo
マゼラン

エイドリアン:サーバーを再起動すると、その変更はアクティブでなくなるということですか?
スティーブ

0

新しいバージョンのredisの場合bind 127.0.0.1redis.conf追加のiptables構成なしでこれを直接実行するために使用できます。

この記事を見る

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