シーン1

シーン1

特定のネットワークからの着信SSH接続のみを許可するようにサーバーのIptableを構成しようとしています。

ところで、これは一連のルールです。

# Drop anything we aren't explicitly allowing. All outbound traffic is okay
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type echo-reply -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type time-exceeded -j ACCEPT
# Accept Pings
-A RH-Firewall-1-INPUT -p icmp --icmp-type echo-request -j ACCEPT
# Log anything on eth0 claiming it's from a local or non-routable network
# If you're using one of these local networks, remove it from the list below
-A INPUT -i eth0 -s 10.0.0.0/8 -j LOG --log-prefix "IP DROP SPOOF A: "
-A INPUT -i eth0 -s 172.16.0.0/12 -j LOG --log-prefix "IP DROP SPOOF B: "
-A INPUT -i eth0 -s 192.168.0.0/16 -j LOG --log-prefix "IP DROP SPOOF C: "
-A INPUT -i eth0 -s 224.0.0.0/4 -j LOG --log-prefix "IP DROP MULTICAST D: "
-A INPUT -i eth0 -s 240.0.0.0/5 -j LOG --log-prefix "IP DROP SPOOF E: "
-A INPUT -i eth0 -d 127.0.0.0/8 -j LOG --log-prefix "IP DROP LOOPBACK: "
# Accept any established connections
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Accept ssh traffic. Restrict this to known ips if possible.
-A INPUT -p tcp -s 88.253.5.38 --dport 22 -j ACCEPT
# Opening port 80 and port 443 in order to allow http and https requests
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
#Log and drop everything else
-A RH-Firewall-1-INPUT -j LOG
-A RH-Firewall-1-INPUT -j DROP
COMMIT

次のコマンドを使用してこれらのルールを保存すると、正しく適用されるようです。

/etc/init.d/iptables 再起動&& iptables サービスの保存

# iptables -nvL
Chain INPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
25332   17M RH-Firewall-1-INPUT  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
    0     0 LOG        all  --  eth0   *       10.0.0.0/8           0.0.0.0/0           LOG flags 0 level 4 prefix `IP DROP SPOOF A: ' 
    0     0 LOG        all  --  eth0   *       172.16.0.0/12        0.0.0.0/0           LOG flags 0 level 4 prefix `IP DROP SPOOF B: ' 
    0     0 LOG        all  --  eth0   *       192.168.0.0/16       0.0.0.0/0           LOG flags 0 level 4 prefix `IP DROP SPOOF C: ' 
    0     0 LOG        all  --  eth0   *       224.0.0.0/4          0.0.0.0/0           LOG flags 0 level 4 prefix `IP DROP MULTICAST D: ' 
    0     0 LOG        all  --  eth0   *       240.0.0.0/5          0.0.0.0/0           LOG flags 0 level 4 prefix `IP DROP SPOOF E: ' 
    0     0 LOG        all  --  eth0   *       0.0.0.0/0            127.0.0.0/8         LOG flags 0 level 4 prefix `IP DROP LOOPBACK: ' 
    0     0 ACCEPT     tcp  --  *      *       88.253.5.38          0.0.0.0/0           tcp dpt:22 

Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 RH-Firewall-1-INPUT  all  --  *      *       0.0.0.0/0            0.0.0.0/0           

Chain OUTPUT (policy ACCEPT 25163 packets, 17M bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain RH-Firewall-1-INPUT (2 references)
 pkts bytes target     prot opt in     out     source               destination         
24175   17M ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           icmp type 0 
    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           icmp type 3 
    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           icmp type 11 
    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           icmp type 8 
 1052  121K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
   94  6016 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:443 
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:80 
   11   440 LOG        all  --  *      *       0.0.0.0/0            0.0.0.0/0           LOG flags 0 level 4 
   11   440 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0 

私が問題を抱えている主な部分は次のとおりです。

-A INPUT -p tcp -s 88.253.5.38 --dport 22 -j ACCEPT

私が達成したいのは、私がいるLANでのみ接続を許可することです。これについて確認しました。ここからルータの外部IP(固定IP)が返されます。88.253.5.38

私の主な質問は、「ルーターの外部IPを使用して正しいことをしていますか?」です。または、自分のコンピュータの内部IPを使用する必要がありますか、または内部IPアドレス範囲を使用する必要がありますか?

それとも、私がしたい設定を許可しないチェーン全体でクラッシュする可能性がありますか?

押してくれてありがとう。本当に詰まっています。

答え1

ルーターの外部IPを使用して正しいことをしていますか?または、自分のコンピュータの内部IPを使用する必要がありますか、または内部IPアドレス範囲を使用する必要がありますか?

重要な要約:サーバーが自分のコンピュータから「インターネット経由で」接続されている場合は、ルールでルーターアドレスを使用できますiptables

より長い答え:

ファイアウォールルールは、ファイアウォールで保護されているデバイスの観点から機能します。理想的には、世界中のすべてのデバイスには一意のIPアドレスがあります。しかし、そうではありません。 NATという醜いハッキングがあります。簡単な場合は、さまざまなIPアドレス(192.168.1。*など)を取得して単一のIPアドレスにマッピングするデバイスまたはソフトウェアです。 192.168.* アドレスはルーティング不可能が保証されているため、実際のインターネットでは絶対に見つかりません。各個人のネットワークはNATデバイスの背後に隠されているため、各ネットワークは単一の一意のIPアドレスとして表示されます。したがって、他の人が直接見ることができないため、多くの人が内部ネットワークで同じアドレス範囲192.168。*を使用できます。

だから質問に戻ります。

サーバーがNATネットワーク「外部」にある場合は、単一のパブリックアドレスのみが表示されます。これがiptablesルールに含まれるべき内容です。

一方、サーバーが独自のネットワークに接続されていてサーバー間にNATデバイスがない場合は、実際の内部アドレスを使用する必要があります。

これは、IPv4インターネットアドレッシングの醜い現実を非常に単純化したバージョンですが、始めるのに役立ちます。


これで特定の質問に答えると、これがルールiptablesが期待どおりに機能しない理由です。チェーンから始めて進めINPUTてみてください。最初の行はチェーンと呼ばれますRH-Firewall-1-INPUT。これにより、ACCEPTポート80と443のトラフィックのペアのルールが表示されます。そしてDROP他のすべてにも適用される規則があります。チェーンの終わりに、我々は戻ってポート22INPUTに到達しますACCEPT。ただし、この時点ではすべてのトラフィックが破棄されたため、ルールは重要ではありません。

ACCEPTここで回避策は、ポート22のルールをRH-Firewall-1-INPUTポート80と443のルールの直後に、キャッチオールの前にチェーンに移動することですDROP

正しい解決策は使い方を学ぶことだと思いますfirewalldが、CentOS 6.xで利用できるのか、CentOS 7で初めて登場したのかはわかりません。

答え2

したがって、あなたのルールは次のようになります。

  1. INPUTチェーンを追加
  2. TCPを使用してポート22に向かうパケットの場合
  3. このソースアドレスから
  4. 私たちはそれを受け入れます。

これを行う方法は2つあります。あなたの質問は(少なくとも私にとっては)少しあいまいに見えるので、3つのケースすべてに答えます。

シーン1


与えられたパブリックIPアドレスを使用している誰もがこのボックスにアクセスできるようにしたいです。

これが現在あなたのルールが言うものです。私が自宅にいてパブリックIPを持っている場合は、88.253.5.38仕事やどこでもSSHを介してコンピュータに接続できます。 *

*正確ではないかもしれませんが、単純化のために無視します。たとえば、別のファイアウォールの後ろにこのボックスがある場合は、渡す必要があります。

シーン2


オフィス(または内部ネットワーク)の誰かがこのボックスにアクセスできるようにしたいです。

ルールを少し変更するだけです。 IPのみが変更されます。

したがって、私は10.0.0.0/8ネットワークにあり、私のワークステーションの静的IPは10.0.0.127です。これにより、ルールを次のように変更できます。

-A INPUT -p tcp -s 10.0.0.127 --dport 22 -j ACCEPT

これは、ワークステーションIPが10.0.0.128のBobがSSHを介してこのシステムにアクセスできないことを意味します。

シーン3


オフィス(または内部ネットワーク)の誰もがこのボックスにアクセスできるようにしたいです。

あなたのルールは最も変更されていますが、それほど多くはありません。

もう一度申し上げますが、私は10.0.0.0/8ネットワークにいて、10.0.0.1-10.0.0.254の範囲のIPを持つ人なら誰でもこのボックスにアクセスできることを願っています。まあ、私はこれが/ 24ネットワークであることを知っています。

-A INPUT -p tcp -s 10.0.0.0/24 --dport 22 -j ACCEPT

これは、IP 10.0.0.1.127を使用しているCharlieがSSHを介してこのボックスにアクセスできないことを意味します。

これがあなたの問題を解決することを願っています!

答え3

ファイアウォールの電源を切り、SSH経由でサーバーに接続してみてください。最後に入力して現在のIPを確認してください。新しい(私の予想)IPアドレスに再設定するときは、iptablesをオンにしてください。

関連情報