web-dev-qa-db-ja.com

iptablesによる発信接続のブロック

私は(非プロダクション)マシンで、外部サポーターがシェルアクセス(非ルート)を持っています。 iptablesを使用して、そのマシンからネットワークに進入するのを防ぎたいのです。

「通常の」firewall-guiは着信トラフィックのみをブロックします。 「すべての受信トラフィック(および応答)を受け入れ、特定のターゲット(監視サーバーへのsnmp-trapsなど)の新しい送信トラフィックのみを許可する」などのルールを設定するにはどうすればよいですか?

OSはCentOS 5

7
Nils

ACCEPTとして明示的に定義したものを除いて、すべての発信トラフィックをドロップするには2つの方法があります。 1つは、ドロップするOUTPUTチェーンのデフォルトポリシーを設定することです。

iptables -P OUTPUT DROP

この方法の欠点は、チェーンがフラッシュされる(すべてのルールが削除される)と、すべての送信トラフィックがドロップされることです。もう1つの方法は、チェーンのendに「ブランケット」DROPルールを配置することです。

iptables -A OUTPUT -j DROP

あなたが何が必要かを正確に知らなければ、私は何を受け入れるべきかについてのアドバイスを提供することはできません。個人的には、デフォルトのDROPルールをチェーンの最後に配置する方法を使用しています。 GUIがルールを設定する方法を調査する必要がある場合があります。そうしないと、ブート時にルールを復元する従来のCLIの方法(/ etc/sysconfig/iptablesなど)と競合する可能性があります。

5
jordanm

着信TCPトラフィックのみを受け入れたいと仮定すると、これらのルールを使用して、発信トラフィックを確立されたTCP接続に制限することができます。外部)およびLAN外のIPアドレス:

iptables -A INPUT -p tcp -i lo -j ACCEPT
iptables -A INPUT -p tcp -p 22 -j ACCEPT   # repeat for other ports you want to allow
iptables -P INPUT -j DENY
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -p tcp \! -d 10.0.0.0/8 -j ACCEPT  # replace by your LAN's network(s)
iptables -A OUTPUT -p tcp \! --syn -j ACCEPT
iptables -P OUTPUT -j DENY

必要に応じて、サポーターが実行するプロセスに特定のルールを適用することをお勧めします。それらがsupportersグループにあるとすると、次のルールは、LAN内のすべての接続(受信または送信)をサポーター(およびサポーターのみ)に拒否します。

iptables -I INPUT \! -i lo -s 10.0.0.0/8 -m owner --gid-owner supporters -j DENY
iptables -I OUTPUT \! -o lo -d 10.0.0.0/8 -m owner --gid-owner supporters -j DENY

ご了承ください gid-ownerは、プロセスの fsgid をテストします。これは、ほとんどの場合 実効GID です。プロセスが実行されない限り setgid またはその有効なGIDを 補足グループ に切り替え、ユーザーのプライマリグループ(ユーザーデータベースに記録されます。例:/etc/passwd)が適用されます。

ファイアウォールビルダーとして Shorewall をインストールすることを検討してください。開始点として単一のインターフェースの例を使用し、不要な発信アクセスルールを提供しません。必要なICMPタイプが許可されます。

少なくとも発信DNS(名前検索)とNTP(時間同期))アクセスルールを提供する必要があるでしょう。

3
BillThor