シーン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で初めて登場したのかはわかりません。

おすすめ記事