iptables:SSHおよびVPNトラフィックのみを許可する方法は?

iptables:SSHおよびVPNトラフィックのみを許可する方法は?

Ubuntu 14.10がインストールされた専用サーバーがあります。

サーバーはOpenVPNサーバーに接続する必要があり、トラフィックはVPNを介してのみ移動する必要があります(SSHトラフィックを除く)。

私の考えはこれを達成することですが、iptables専門家ではありません。

これを処理するには正確に何を使うべきですかiptables

基本条件は次のとおりです。

  1. VPNを介したトラフィックのみが許可されます。サーバーがVPNへの接続を失った場合は、トラフィック漏れがないはずです。

  2. VPNなしでSSHを使用できます。 SSHとサーバープロバイダの通常のIPを使用してサーバーに接続したいのですが(SSHトラフィックのみ)。

  3. 私はVPNの唯一のユーザーではないので、別のコンピュータからVPNのサーバーを隠したいと思います。

ルールの作成を開始しましたが、iptablesルールは常にすべての接続をブロックします。

# flush old rules
iptables -F

# accept SSH traffic with non vpn connection
iptables -A INPUT -d X.X.X.X -p tcp --dport 22 -j ACCEPT 
iptables -A OUTPUT -s X.X.X.X -p tcp --sport 22 -j ACCEPT 

# block everything except my rules
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

# allow loopback
iptables -A INPUT  -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# allow vpn
iptables -A INPUT  -j ACCEPT -p udp -s Y.Y.Y.Y --sport 1194
iptables -A OUTPUT -j ACCEPT -p udp -d Y.Y.Y.Y --dport 1194

XXXXはプロバイダによって提供されたサーバーIPです。
YYYYはVPNサーバーのIPです。

これらの規則により、常に現在のSSH接続が中断され、ポート22を介してトラフィックを許可する必要があるにもかかわらず、新しいSSH接続を作成できません。

答え1

-dオプションを覚えておいてください。すべてのアダプタに適用するには、このオプションを使用しないでください。 iptables -A INPUT -p tcp --dport 22 -j ACCEPT

答え2

編集する:

VPNを介したトラフィックのみが許可されます。サーバーがVPNへの接続を失った場合は、トラフィック漏れがないはずです。

これはVPNアプリケーションに関連しています。たとえば、PIA(Private Internet Access)ではこれをキルスイッチと呼び、アプリで有効にするだけです。

VPNなしでSSHを使用できます。 SSHとサーバープロバイダの通常のIPを使用してサーバーに接続したいのですが(SSHトラフィックのみ)。

まあ、これは上記のキルスイッチと矛盾しています。

VPNユーザーとして、私はローカルIP(192.168.0.xxxなど)に接続せずにパブリックアドレスに接続し、22を使用する代わりに私のサーバーに特定のポートを有効にすることでこの問題を解決しました。なぜなら、家にサーバーがいくつかあるからです。だからあなたもそれを考慮したいかもしれません。これはまた、ポートをルーターからサーバーにリダイレクトし、iptablesこのポートのルールを作成する必要があることを意味します。

私はVPNの唯一のユーザーではないので、別のコンピュータからVPNのサーバーを隠したいと思います。

sambaあなたの環境を説明していないので、私が言うことができるのは、一部のサービスなどを無効にすることだけです。


元の答え:

~によるとマニュアルページ:

--sport is short for --source-port  
--dport is short for --destination-port

あなたの場合は、唯一の--dportオプションを使用する必要があると思います。

答え3

単にVPN経由でデータを提供するよりも流出が心配な場合は、最も安全な方法は別のコンピュータを使用することです。 openvpnとsshを実行しているマシンは、インターネットに直接接続している唯一のマシンでなければなりません。他の人は個人アドレスを使用し、そのアドレスを介してプロキシまたはゲートウェイを使用する必要があります。

これを行うと、DNSなどを誤って設定すると、間違ったネットワークを通過するのではなく失敗します。物理マシンが必要ない場合は、仮想マシンを使用してこれを達成できます。しかし、仮想マシンはより多くの攻撃面を持っています。ハッキングされた仮想マシンはバグを悪用し、ネットワーク上の他のマシンよりも簡単にホストに到達する可能性があります。

答え4

これにはいくつかの問題があります。

まず、より多くを許可する必要があります。

  • VPN 経由のトラフィック。これは特定の名前付きデバイスまたは名前付きデバイスクラスになります。 VPNが起動したら、ip linkまたは出力に表示する必要がありますifconfig。それ以外の場合は、「ループバックを許可」エントリのように見えます。
  • 関連データパケット。これにより、接続からICMPメッセージを送信できます。

最初のルールでは、確立された接続を許可することをお勧めします。これによりテストが速くなります。上記の2番目のポイントと組み合わせると、次のようになります。

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

また、既存のSSH接続が閉じることを防ぐことができるという利点もあります。

テスト時に正しく機能するように見えるまでは、ポリシールールを設定しないでください。また、許可されていないコンテンツを記録するには、LOGルールを追加してください。

iptables -A INPUT -j LOG
iptables -A OUTPUT -j LOG

dmesgとシステムログを使用すると、コンソールからこの出力を表示できます。すべてがうまくいけば、これらのルールはもう必要ありません。 (しかし、彼らはあなたが受けた攻撃の数を知らせることができます。)

何も記録せずに新しいSSH接続を確立できるようになったら、ポリシールールを設定します。


あなたがしなければならないもう一つのことは慎重なルーティング作業です。 VPNがインターネット全体に接続されている場合、SSHとVPNのデータ例外は難しいかもしれません(不可能ではありません)。 VPNソフトウェアはそれを記録または処理する必要があります。

関連情報