私はこのトピックに関する多くの記事と回答を読み、Linodeのサポートについて話し合っていますが、私の正確な問題に答えられる人はいません。
簡単なようです-iptablesファイアウォールを使用して、22、80、および443を除くすべてのポートへのアクセスを制限したいと思います。Linodeは、ここにすばらしい記述があります https://library.linode.com/securing-your -server#sph_creating-a-firewall と私は彼らのファイアウォールルールをそのまま使用しました。ファイアウォールは適切に機能します。
これはnodejsアプリですので、いくつかのポートを事前ルーティングしたいと思います。だから私は使用しました:
Sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
Sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 3000
これらのルールは、ファイアウォールルールがない場合に機能します。実際、私は今それらを使用していますが、ファイアウォールをダウンさせたままにしなければなりませんでした。
ファイアウォールルールを追加すると、PREROUTING
が機能しなくなります。アクティブなiptablesルールをファイルに保存して表示すると、ファイアウォール(フィルタールール)とPREROUTING
(natルール)の両方が存在しますが、機能するのはファイアウォールルールだけです。こちらをご覧ください:
# Generated by iptables-save v1.4.18 on Wed Mar 26 02:40:04 2014
*security
:INPUT ACCEPT [1606:135329]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1206:144815]
COMMIT
# Completed on Wed Mar 26 02:40:04 2014
# Generated by iptables-save v1.4.18 on Wed Mar 26 02:40:04 2014
*raw
:PREROUTING ACCEPT [1620:139613]
:OUTPUT ACCEPT [1206:144815]
COMMIT
# Completed on Wed Mar 26 02:40:04 2014
# Generated by iptables-save v1.4.18 on Wed Mar 26 02:40:04 2014
*nat
:PREROUTING ACCEPT [4:248]
:INPUT ACCEPT [6:376]
:OUTPUT ACCEPT [12:728]
:POSTROUTING ACCEPT [12:728]
-A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080
-A PREROUTING -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 3000
COMMIT
# Completed on Wed Mar 26 02:40:04 2014
# Generated by iptables-save v1.4.18 on Wed Mar 26 02:40:04 2014
*mangle
:PREROUTING ACCEPT [1620:139613]
:INPUT ACCEPT [1606:135329]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1206:144815]
:POSTROUTING ACCEPT [1206:144815]
COMMIT
# Completed on Wed Mar 26 02:40:04 2014
# Generated by iptables-save v1.4.18 on Wed Mar 26 02:40:04 2014
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -d 127.0.0.0/8 -j REJECT --reject-with icmp-port-unreachable
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
-A INPUT -j DROP
-A FORWARD -j DROP
-A OUTPUT -j ACCEPT
COMMIT
# Completed on Wed Mar 26 02:40:04 2014
iptables -F
を使用すると、ファイアウォール(フィルター)ルールのみがフラッシュされ、PREROUTING
が再び機能し始めます。ですから、それは間違いなく対立です。これ(上記)は、iptablesにルールを保存した順序に関係なく、iptablesによる標準出力であるため、ルールブロックの順序は重要ではないようです。
私には、それは次の2つのうちの1つであるように見えます。
PREROUTING
ポートは、プレルーティングが無視されることを意味する場合がありますPREROUTING
していること(ただし、ここで「PRE」が発生したと思った)誰か知ってる?
ありがとう!
ポール
PREROUTING後、ローカルパケットはローカルフィルターに送られ、そこでドロップされます(ケース2)。
したがって、iptablesでこれらのポートへの着信トラフィックを許可する必要があるだけです。
iptables -A INPUT -p tcp -m tcp --dport 8080 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 3000 -j ACCEPT
Http(s)トラフィックを80/443から8080/3000にリダイレクトしているため、後者のポートが開いていてインターネットに公開されているように見えるので、外部との違いはなく、セキュリティ上の影響はありません。