すべての接続をブロックし、iptablesでいくつかのポートのみを許可する

すべての接続をブロックし、iptablesでいくつかのポートのみを許可する

次のようなルールが必要です:

  1. すべての受信トラフィック(インターネット > サーバー)をブロックしますが、送信トラフィック(サーバー > インターネット)を許可し、ローカルサービスも実行できるようにします。

  2. 必要なポートからの着信トラフィックのみを受け入れます。

SSH セッション中にもこれを実行する必要があります (以前ロックされたことがあります)。

私が質問する理由は、VPS プロバイダーで UFW を使用できないからです... どうやらカーネル / OpenVZ が原因のようです...

私は自分でコマンドを学ぼうとしましたが、それは道具の使い方を学んで家を建てようとするようなものです。そして、これを修正するために何時間も費やすのではなく、今日、生産性を高めることができれば本当に素晴らしいと思います。誰かが私を助けてくれたら本当にありがたいです。

答え1

まず特定のポートを許可し、次にすべての着信トラフィックをブロックします。

# iptables -A INPUT -p tcp --dport 22 -j ACCEPT

デモポート22はご要望に応じて変更します

すべての受信トラフィックをブロックする

# iptables -A INPUT -j REJECT

すべての送信パケットを許可する

# iptables -A OUTPUT -j ACCEPT
# iptables -A OUTPUT -o lo -j ACCEPT

答え2

@Rakib は素晴らしい回答をしてくれました。これは受け入れられるべき回答だと思います。私が提供する回答は、彼の回答に付け加えるものです。OS の起動時に自動的に実行したり、すべてを再度入力しなくても必要に応じて実行したりできるように、シェル スクリプトを作成することをお勧めします。

#!/bin/sh

IPT = iptables

#allowing the specific port
$IPT -A INPUT -p tcp --dport 22 -j ACCEPT

#block all incoming traffic
$IPT -A INPUT -j REJECT

#ALLOW ALL OUTGOING PACKETS
$IPT -A OUTPUT -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT

#same thing for ip6tables (IPv6)
IPT = ip6tables
$IPT -A INPUT -p tcp --dport 22 -j ACCEPT
$IPT -A INPUT -j REJECT
$IPT -A OUTPUT -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT

また、脚本は2回書かれましたが、唯一の違いはip6テーブル@Michael Molが@Rakibの回答に対するコメントで述べたように、IPv6にも適用されるように含まれていました。

関連情報