特定のポートが外部接続ではなく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
チェーン名が変更されたファイルの前半を見ることができます。なぜですか?言うことはできません。)