2つのIPを持つサーバー上のVPN用にファイアウォールを構成する方法

画像



私はついにサーバーを手に入れました。 彼は彼の「会社」のサイトをその上に投稿し、隣はVPNを上げることに決めました。 このために、2番目のIPが注文されました。 最初はWeb、メール、sshがあり、2番目はVPNトラフィックが流れます。 アイデアは単純ですが、そのような構成の適切な説明は見つかりませんでした。 カットの下で、VPNトラフィックがインターネットのみに行き、近隣のIPに自由に通過できないようにShorewallを構成する方法を示します。



この投稿では、すべてのプログラムのインストールではなく、Habrを含む何度も説明されていますが、すべてのネットワークインターフェイスが同じカード上にある場合のファイアウォールのセットアップに焦点を当てたいと思います。 ファイアウォールを制御するには、Shorewallパッケージを使用します。 shorewallサイトには非常に多くのドキュメントがありますが、基本的には分割されたネットワークカードを使用した構成とその背後のサブネットについて説明しています。



最初にifconfigを見てみましょう。 そこには、2つのIPシュニック「1.1.1.1」と「2.2.2.2」があります。 どちらもインターネットに直接アクセスします。 現在、これらは「双子」です。つまり、最初のサービスでいくつかのサービスが回転している場合、2番目のIPで表示されます。



# ifconfig eth0 Link encap:Ethernet HWaddr ::::: inet addr:1.1.1.1 Bcast:1.1.1.255 Mask:255.255.255.0 inet6 addr: fe80:::::/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:417428 errors:0 dropped:230 overruns:0 frame:0 TX packets:17595 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:28249193 (28.2 MB) TX bytes:4653027 (4.6 MB) eth0:0 Link encap:Ethernet HWaddr ::::: inet addr:2.2.2.2 Bcast:2.2.2.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:507 errors:0 dropped:0 overruns:0 frame:0 TX packets:507 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:44121 (44.1 KB) TX bytes:44121 (44.1 KB)
      
      





このケースをカバーして、1.1.1.1がwebに渡され、email、ssh、2.2.2.2がvpnをリッスンするようにします。 設定は次のとおりです。



 # cat /etc/shorewall/interfaces #ZONE INTERFACE BROADCAST OPTIONS net4 eth0 detect tcpflags,logmartians,nosmurfs # cat /etc/shorewall/zones #ZONE TYPE OPTIONS IN OUT fw firewall net4 ipv4 # cat /etc/shorewall/policy #SOURCE DEST POLICY LOG LIMIT: CONNLIMIT: $FW net4 ACCEPT net4 $FW DROP info net4 all DROP info # The FOLLOWING POLICY MUST BE LAST all all REJECT info # cat /etc/shorewall/rules #ACTION SOURCE DEST PROTO DEST SOURCE SECTION NEW # ------------------------- INTERNET -------------------------------- ACCEPT net4 $FW:1.1.1.1 tcp 22 ACCEPT net4 $FW:1.1.1.1 tcp 25 ACCEPT net4 $FW:1.1.1.1 tcp 80 # ------------------------- VPN ------------------------------------- ACCEPT net4 $FW:2.2.2.2 udp 1194
      
      





これは標準構成であり、VPS-aからインターネットへのすべてのトラフィックの通過を許可し、ルールに記述されているものを除き、何も戻すことを許可しません。 ゾーン$ FWは、両方がeth0の一部であるため、両方のIPを意味します(2.2.2.2には独自の名前eth0:0があるにもかかわらず)。 明確にするために、$ FW:[ip]タイプのkostructionが使用されます。 すべてがうまくいくようです。 次に、VPNサーバーを起動し、ifconfigを確認します。 すでにそこにあったものに加えて、新しいインターフェースtun0が登場しました:



 tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:10.8.0.1 PtP:10.1.0.2 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:3261 errors:0 dropped:0 overruns:0 frame:0 TX packets:2624 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:351155 (351.1 KB) TX bytes:1043254 (1.0 MB)
      
      





tun0インターフェイスはeth0との「ツイン」ではなく、より完全なインターフェイスであることに注意してください。 VPNクライアントはこのサブネットの背後に配置されます。 今すぐ接続しましょう。 別のコンピューターで:承認を行い、接続を確立し、ターミナルに移動して、少なくともvpnゲートウェイ(10.8.0.1)に接続してメールを読み取ります。pingが受け入れられると、pingを実行できます(/etc/sysctl.confを参照)。



 $telnet 10.8.0.1 25 $sudo tail /var/log/syslog ... Shorewall:INPUT:REJECT:IN=tun0 OUT= MAC= SRC=10.8.0.6 DST=10.8.0.1 ... PROTO=TCP SPT=36879 DPT=25 ...
      
      





メールサーバーへのアクセス試行は拒否されました。これは、「ツイン」のeth0ではないため、tun0は次のルールによりeth0(およびeth0:0)と通信できないためです。



 all all REJECT info
      
      





/ etc / shorewall / policyの最後。 これまでのところ良い。 次に、tun0を海岸壁に追加します。

新しい構成:



 # cat /etc/shorewall/interfaces #ZONE INTERFACE BROADCAST OPTIONS net4 eth0 detect tcpflags,logmartians,nosmurfs vpn4 tun0 detect tcpflags,logmartians,nosmurfs #NEW # cat /etc/shorewall/zones #ZONE TYPE OPTIONS IN OUT fw firewall net4 ipv4 vpn4 ipv4 #NEW # cat /etc/shorewall/policy #SOURCE DEST POLICY LOG LIMIT: CONNLIMIT: $FW net4 ACCEPT vpn4 $FW ACCEPT #NEW vpn4 net4 ACCEPT #NEW net4 $FW DROP info net4 all DROP info # The FOLLOWING POLICY MUST BE LAST all all REJECT info # cat /etc/shorewall/rules #ACTION SOURCE DEST PROTO DEST SOURCE SECTION NEW # ------------------------- INTERNET -------------------------------- ACCEPT net4 $FW:1.1.1.1 tcp 22 ACCEPT net4 $FW:1.1.1.1 tcp 25 ACCEPT net4 $FW:1.1.1.1 tcp 80 # ------------------------- VPN ------------------------------------- ACCEPT net4 $FW:2.2.2.2 udp 1194 # SNAT, for access to internet -- NEW # cat /etc/shorewall/masq #INTERFACE SOURCE ADDRESS PROTO PORT(S) IPSEC MARK eth0 10.8.0.0/24 2.2.2.2
      
      





何が変わった? tun0インターフェイスに対応するvpn4というゾーンを作成しました。 vpn4をIPv4として宣言しました。 tun0からファイアウォールおよびインターネット(eth0 / net4)へのトラフィックを許可しました。 奇妙なことに、firewall-aのみを許可することはできず、既存の規則$ fw-> net4に従っています。 両方の行を追加する必要があります。 そして、完全なインターネット接続に必要な最後のものはSNAT(送信者のアドレスがインターネット上で見ている人のアドレスに置き換えられたときのソースアドレス変換、この場合は2.2.2.2)です。 masqファイルを作成し、eth0(およびeth0:0)を終了するときに、すべての10.8.0.xアドレスを2.2.2.2に置き換えることを要求します。



私たちは...すべてがうまくいきます! それでも... 10.8.0.xのアドレスを使用すると、1.1.1.1:1194に移動できますが、これは望ましくありません。 最初にvpnトラフィックをオンラインにしてから、ファイアウォールを介して反撃することを望みました。 代わりに、サーバーを後ろから見るクライアントVPNがあります。 なんで? 次のような通信を有効にしたとき:



 # /etc/shorewall/policy: vpn4 $FW ACCEPT #NEW
      
      





$ FW(1.1.1.1および2.2.2.2)の下に2つのIPがあるため、どのIPを指定しませんでした。 さて、書き留めましょう。 ただし、次のような構文:$ FW:[ip]はポリシーファイルでは受け入れられません。 この時点で、私は多くのことを試してみましたが、ほとんどアイデアをあきらめ、そのままにしておきました。 終わりまでの道はほとんどありませんでしたが。 したがって、洞察:ポリシーに記述されているすべてのものは同じ方法でルールに記述でき、ルールではファイアウォールeで特定のIPを指定できます。 最後の設定を書き直しましょう:



 # cat /etc/shorewall/interfaces #ZONE INTERFACE BROADCAST OPTIONS net4 eth0 detect tcpflags,logmartians,nosmurfs vpn4 tun0 detect tcpflags,logmartians,nosmurfs # cat /etc/shorewall/zones #ZONE TYPE OPTIONS IN OUT fw firewall net4 ipv4 vpn4 ipv4 # cat /etc/shorewall/policy #SOURCE DEST POLICY LOG LIMIT: CONNLIMIT: $FW net4 ACCEPT #vpn4 $FW ACCEPT #NEW #vpn4 net4 ACCEPT #NEW net4 $FW DROP info net4 all DROP info # The FOLLOWING POLICY MUST BE LAST all all REJECT info # cat /etc/shorewall/rules #ACTION SOURCE DEST PROTO DEST SOURCE SECTION NEW # ------------------------- INTERNET -------------------------------- ACCEPT net4 $FW:1.1.1.1 tcp 22 ACCEPT net4 $FW:1.1.1.1 tcp 25 ACCEPT net4 $FW:1.1.1.1 tcp 80 # ------------------------- VPN ------------------------------------- ACCEPT net4 $FW:2.2.2.2 udp 1194 # ------------------------- NEW ------------------------------------- ACCEPT vpn4 net4 ACCEPT vpn4 $FW:1.1.1.1 tcp 22 ACCEPT vpn4 $FW:1.1.1.1 tcp 25 ACCEPT vpn4 $FW:1.1.1.1 tcp 80 # cat /etc/shorewall/masq #INTERFACE SOURCE ADDRESS PROTO PORT(S) IPSEC MARK eth0 10.8.0.0/24 2.2.2.2
      
      





私たちがしたこと:ポリシーから古いパーミッションを削除し、ルールにパーミッションを追加しました。 VPNからインターネットへのすべてのトラフィックを許可し、1.1.1.1への直接のトラフィックを選択的に許可します。 インターネット経由で1.1.1.1に通話を送信できませんか? いいえ、私たちがいくら好きであろうと、それらはサーバーの中に入ります。そのため、できることはvpnトラフィックのインターネットのルールを複製することです-> 1.1.1.1。 しかし、2.2.2.2のトラフィックはどうでしょうか? このトラフィックは直接vpnトラフィックであり、内部から来ることはできません(これはクライアントマシン上のルートによって保護されています)。 つまり、vpn-aクライアントは10.8.0.1(vpn4)-> 2.2.2.2($ fw:2.2.2.2)の方向にトラフィックを送信しません。



まあ、それは基本的にそれです。 これで、「コンパニオン」サイトにつながるIP-shnikを使用することなく、「稼働中の」VPN-aから安全に閲覧でき、通常のvpnユーザーを使用してファイアウォールaをバイパスすることを恐れません。



All Articles