特定のポートが外部接続ではなくLAN接続にのみ開くようにLANシステムにファイアウォールを設定するにはどうすればよいですか?
たとえば、実行中のボックスがあります。サイエンティフィックLinux 6.1(RHELベースの展開)SSHサーバーがlocalhostまたはLANの接続のみを許可したいと思います。どうすればいいですか?
答え1
カーネルでiptables完全に空の場合(iptables -F
)要件を満たしています。
# iptables -A INPUT -p tcp --dport 22 -s 192.168.0.0/24 -j ACCEPT
# iptables -A INPUT -p tcp --dport 22 -s 127.0.0.0/8 -j ACCEPT
# iptables -A INPUT -p tcp --dport 22 -j DROP
これは、すべてのLANアドレスがTCPポート22と通信できることを意味し、localhostが同じ考慮事項(例:127.0.0.1だけでなく127.*)を持ち、最初の2つの規則と一致しない他のすべてのアドレスのデータがバッグになることを意味します。します。無意識的にここに捨てられたビットバケット。 TCPポート22をパケットのブラックホールにする代わりにアクティブ拒否(TCP RST)が必要な場合は、REJECT
それを代わりに使用できます。DROP
LAN が 192.168.0.* ブロックを使用していない場合は、LAN の IP 方式と一致するように最初の行の IP とマスクを自然に変更する必要があります。
ファイアウォールにいくつかのルールが設定されている場合、これらのコマンドは必要に応じて機能しない可能性があります。 (iptables -L
ルートとして検索)既存のルールの1つがフィルタリングしたいパケットをキャッチして新しいルールを追加しても効果がない場合がよくあります。コマンドを使用して新しいルールを追加する-I
代わりにチェーンの途中に接続することはできますが、通常はシステムの起動時にチェーンがどのように入力されるかを調べ、新しいルールが常に正しい順序でインストールされるようにプロセスを変更することをお勧めします。 。-A
iptables
RHEL 7+
最新のRHELタイプシステムで最善のアプローチは、次のものを使用することです。firewall-cmd
またはそれに対応するGUI。これにより、オペレーティングシステムのデーモンfirewalld
にユーザーが望むものが表示され、実際にユーザーが見ている内容を入力して操作しますiptables -L
。
RHEL 6以下
古いRHELタイプのシステムで注文中にファイアウォールチェーンを変更する最も簡単な方法は/etc/sysconfig/iptables
。古い設定ファイル。この操作を開始すると、オペレーティングシステムのファイアウォールツールを使用して構成を変更すると、これらの手動ルールを処理する方法がわからないため、変更が失われる危険があります。
ファイルに次の内容を追加します。
-A RH-Firewall-1-INPUT -p tcp --dport 22 -s 192.168.0.0/24 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp --dport 22 -s 127.0.0.0/8 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp --dport 22 -j DROP
どこに追加するのが難しいです。そのファイルでその内容を説明する行を見つけたら、上記--dport 22
の3行に置き換えます。それ以外の場合は、おそらく終わる最初の既存の行の前に来る必要があります-j ACCEPT
。通常、方法をよく知っている必要があります。iptables有効な場合、正しい挿入点が明らかになります。
ファイルを保存してservice iptables restart
ファイアウォールルールを再ロードします。誤ってこれを行うのを防ぐために、コンソールにログインしたままにしてください。 SSH経由でログインしたときにコンピュータがロックされたくありません。
上記の順序との類似性は偶然ではありません。ファイルのほとんどはiptables
コマンドの引数で構成されます。上記と異なる点は、iptables
コマンドが削除され、INPUT
チェーン名が特別なRHEL固有のRH-Firewall-1-INPUT
チェーンになることです。 (ファイルをより詳しく調べたい場合は、デフォルトでINPUT
チェーン名が変更されたファイルの前半を見ることができます。なぜですか?言うことはできません。)
答え2
Linuxでファイアウォールを設定するための基本的なツールは次のとおりです。iptables。より高いレベルのツールも使用できます。 Scientific Linuxに推奨されるファイアウォールツールがあるかどうかわかりません。
~によるとこのページ(6.1で動作していることを確認していません。)service iptables save
現在、ファイアウォールルールが保存され、保存されたルールは起動時にロードされます。したがって、iptables
コマンド(または他の方法)を介して目的のルールを設定し、実行してservice iptables save
設定を維持する必要があります。
Scott Parkerによるブログ投稿通常、望ましくない攻撃の一部になる可能性が高い「奇妙な」パケットを破棄し始めます。それ以外にも、着信ポートをすべて閉じて必要なポートのみを開く必要があります。このような:
# Accept everything on the loopback interface
iptables -A INPUT -i lo -j ACCEPT
# Accept ICMP
iptables -A INPUT -p icmp --icmp-type any -j ACCEPT
# Drop oddball packets
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
iptables -A INPUT -f -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
# Accept packets that are part of established connections
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Accept selected incoming connections, e.g. ssh from 10.0.42.x
iptables -A INPUT -p tcp --dport 22 -s 10.0.42.0/24 -j ACCEPT
# Reject incoming connections that aren't explicitly accepted
iptables -A INPUT -j REJECT
答え3
好ましい方法はiptables
。このアクセス制御方法はライブラリで提供されていますlibwrap
。
お気に入りのデーモンがサポートされていることを確認するには、libwrap
次のコマンドを実行してください。
ldd `which sshd` | grep libwrap
空でない結果を得る場合、例えば
libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f84e7b0e000)
それから行ってもいいです。
あなたのsshd
デーモンはほぼ確実にサポートされているので、アクセス制御のために連絡してファイルを送信する必要がありlibwrap
ます。ローカルLANネットワークが次のと仮定すると、次のことができます。/etc/hosts.allow
/etc/hosts.deny
192.168.100.0/24
否定的なsshd
すべてのクライアントにアクセスとは別にこれはファイルを次のファイルに入れてローカルホストまたはローカルLANで設定できます/etc/hosts.deny
。
sshd: ALL EXCEPT 127.0.0.0/255.0.0.0, [::1]/128, 192.168.100.0/255.255.255.0
この方法に注意してください確かに実際にはポート自体を開閉します。これは、単にこのアクセス制御方法を使用するデーモンに、指定されたパターンに一致するクライアントの接続試行を受け入れるか拒否するかを通知します。
詳しくは をご確認くださいhosts_access(5)
。
答え4
iptables
独自のLinuxベースのファイアウォールがある場合は、ここで説明されているように設定するのが最善です。そうでなく、ファイアウォールがルーターの場合、ポート転送を明示的に有効にしない限り、デフォルト設定はすでに外部アクセスをブロックする可能性があります(最近の回答で述べたように)。この質問について)。
セキュリティを強化するために、LAN内接続に別々のサブネットを使用できます。これを行うには、ルータではなくLAN内でのみ使用される各コンピュータに2番目のIPアドレスを追加します。これで、LAN全体が192.168.0.xxx
アドレスを使用しており、ルーター(ゲートウェイ、ファイアウォール)が192.168.0.1
。したがって、各コンピュータに2番目のアドレスを追加してください。たとえば、次のようになります。
ifconfig eth0:0 192.168.5.1/24
次に、sshd
このアドレスのみを使用するように設定を編集します(接続を許可しないように192.168.0.xxx
)。新しいサブネットの1つを編集し/etc/ssh/sshd_config
て変更します(上記の例では)。それだけです!このサブネットへのトラフィックをルーティングするようにゲートウェイを設定しない場合は、外部から隔離する必要があります。ListenAddress
192.168.5.1