特定のネットワークからの着信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
したがって、あなたのルールは次のようになります。
INPUT
チェーンを追加- TCPを使用してポート22に向かうパケットの場合
- このソースアドレスから
- 私たちはそれを受け入れます。
これを行う方法は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をオンにしてください。