1.1 iptablesファイアウォールの概要Netfilter/Iptables (以下、Iptables と略します) は、Unix/Linux に付属する、優れたオープン ソースの安全で無料の **パケット フィルタリング ベースのファイアウォール ツール** です。非常に強力で柔軟に使用でき、サーバーに出入りするデータ パケットを非常に細かく制御できます。特に、非常に低いハードウェア構成でも非常にうまく動作します。 Iptables は、Linux 2.4 および 2.6 カーネルに統合されたサービスです。その機能とセキュリティは **ipfwadm、ipchains** よりもはるかに強力です。iptables は主に OSI 7 層のうち 2 層目、3 層目、4 層目で動作します。カーネルを再コンパイルすると、iptables は **7 層制御** (squid proxy + iptables) もサポートできます。 1.2 iptables の用語と用語集コンテナ: 収容することと収容されることの関係 iptablesはテーブル用のコンテナです Iptables にはテーブル (4 つのテーブル) が含まれています。テーブルはリンクのコンテナーです。各テーブルには複数のリンクが含まれています。 チェーンはルールのコンテナであり、実際のフィルタリング ルールはチェーンに属します。 レベル紹介
1.3 iptablesワークフローIptables はパケット フィルタリング メカニズムを使用して動作するため、要求されたデータ パケットのヘッダー データを分析し、事前に設定されたルールに基づいて照合して、ホストに入力できるかどうかを確認します。 iptablesワークフローの概要
1.4 iptables テーブルとチェーンIptables は、機能とテーブル定義に応じて、filter、nat、mangle の 3 つのテーブルで構成されています。各テーブルには、異なる操作チェーンが含まれています。 フィルタテーブルは実際のファイアウォール機能です サーバーへの入力、サーバーからの出力、サーバーを経由した転送 Natテーブルは、データパケットの書き換え、ゲートウェイの共有、IPおよびポートのマッピングを担当します。 出力 事前ルーティング ポストルーティング マングルテーブルのルーティングタグはあまり使用されない ####すべてのチェーンが利用可能 RAW テーブルは、Mangle と同様にほとんど使用されません。 man iptablesから取得できます 1.5 表の紹介フィルタ テーブルの制御、特に INPUT チェーンの制御は、ローカル ファイアウォールを実装するための重要な手段です。 1.6 iptables テーブルとチェーンのワークフロー図ヒント: iptables には 2 つの主な機能があります。1 つ目はファイアウォール、2 つ目はルーティングです。 NAT機能:エンタープライズケース: 1) LANインターネット共有 (ルーティングとゲートウェイ) NATポストルーティング 2) 外部IPとポートを内部IPとポートにマッピング(DMZ機能)、NAT PREROUTING フィルター機能:つまり、フィルター入力を前方に エンタープライズケース: 主にサーバーファイアウォールで使用 2.1 iptablesの設定Iptablesはデフォルトでインストールされています [root@web02 ~]# iptables -V iptables v1.4.7 [root@web02 ~]# rpm -qa iptables iptables-1.4.7-16.el6.x86_64 [root@web02 ~]# /etc/init.d/iptables ステータス iptables: ファイアウォールが実行されていません。 iptablesルールを表示する [root@web02 ~]# iptables -nL チェーン入力(ポリシーACCEPT) ACCEPTが入力チェーンのデフォルトルールであり、デフォルトで実行されることを示します。 ターゲット 利益 選択 ソース 宛先 入力チェーンの下の特定のルールは、ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHEDです。 受け入れicmp -- 0.0.0.0/0 0.0.0.0/0 すべて受け入れる -- 0.0.0.0/0 0.0.0.0/0 受け入れ tcp -- 0.0.0.0/0 0.0.0.0/0 状態 NEW tcp dpt:22 すべて拒否 -- 0.0.0.0/0 0.0.0.0/0 icmp-host-prohibited による拒否 チェーン FORWARD (ポリシー ACCEPT) ターゲット 利益 選択 ソース 宛先 すべて拒否 -- 0.0.0.0/0 0.0.0.0/0 icmp-host-prohibited による拒否 チェーン出力(ポリシーACCEPT) ターゲット 利益 選択 ソース 宛先 テーブルが指定されていない場合、デフォルトはフィルタテーブルです iptables 用にデフォルトでロードされるカーネル モジュール [root@web02 ~]# lsmod |egrep "nat|filter|ipt" ipt_拒否 2351 2 iptable_filter 2793 1 ip_tables 17831 1 iptable_filter Linuxカーネルに以下のモジュールをロードします modprobe ip_tables modprobe iptable_filter modprobe iptable_nat modprobe ip_conntrack 接続追跡 modprobe ip_conntrack_ftp 接続追跡 modprobe ip_nat_ftp modprobe ipt_state 効果を確認するために再度フィルターをかけます [root@web02 ~]# lsmod |egrep "nat|filter|ipt" nf_nat_ftp 3443 0 nf_conntrack_ftp 11953 1 nf_nat_ftp iptable_nat 5923 0 nf_nat 22676 2 nf_nat_ftp、iptable_nat ipt_拒否 2351 2 nf_conntrack_ipv4 9154 5 iptable_nat、nf_nat nf_conntrack 79206 6 nf_nat_ftp、nf_conntrack_ftp、iptable_nat、nf_nat、nf_conntrack_ipv4、xt_state iptable_filter 2793 1 ip_tables 17831 2 iptable_nat、iptable_filter すべてのルールをクリアし、デフォルトのルールのみを残す [root@web02 ~]# iptables -F [root@web02 ~]# iptables -X [root@web02 ~]# iptables -Z iptables -Fはすべてのルールをクリアします iptables -Xはユーザー定義のルールを削除します iptables -Z チェーンカウンタがクリアされる 2.2 禁止事項ポートの表示 [root@web02 ~]# netstat -lntup|grep ssh tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1329/sshd tcp 0 0 :::22 :::* LISTEN 1329/sshd コマンドは次のとおりです。 iptables -t フィルター -A 入力 -p tcp --dport 22 -j ドロップ -A 指定されたチェーンの最後にルールを追加します。最後の -I 指定されたチェーンの先頭にルールを追加します。最初の -tはテーブルを指定するか、指定しない場合はデフォルトがフィルタになります -pはプロトコル(all.tcp、udp.icmp)を指定します。デフォルトではall --dportはポートを指定します -j 処理動作 ACCPET: 受け入れる、DROP: 破棄する、REJECT: 拒否する 拒否するとユーザーに情報が返されるため、ACCPET と DROP を使用することをお勧めします。 ルールをクリアするには、iptables -Fを使用します。 iptables -D INPUT 1を使用することもできます。 -D 削除するチェーンを指定します --line-number シリアル番号を表示 iptables -nl --行番号 ヒント: チェーンとシリアル番号を記入する必要があります ヒント: 切断されたSSH接続を復元する 1) コンピュータルームに行ってシステムを再起動するか、サーバーにログインして以前の禁止ルールを削除します。 2) コンピュータ室のスタッフにサーバーを再起動してもらうか、ユーザーパスワードでログインしてもらうよう依頼する 3) サーバーのリモート管理カードによる管理(推奨) 4) まず、5分ごとにファイアウォールを停止するスケジュールタスクを作成します。 5) テスト環境をテストし、スクリプトに記述してバッチで実行する 企業事例3.1: -Aと-Iの追加の違い[root@web02 ~]# iptables -A 入力 -p tcp --dport 80 -j ドロップ [root@web02 ~]# iptables -I 入力 -p tcp --dport 80 -j 受け入れる iptables のマッチング ルールによれば、最初の行が最初にマッチングされ、その後、他の行が下方向にマッチングされます。この拒否設定は役に立ちません。 途中に挿入したい場合は、挿入行番号を指定できます。 [root@web02 ~]# iptables -nL チェーン入力(ポリシーACCEPT) ターゲット 利益 選択 ソース 宛先 受け入れ tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 ドロップ tcp --0.0.0.0/0 0.0.0.0/0 tcp dpt:80 チェーン FORWARD (ポリシー ACCEPT) ターゲット 利益 選択 ソース 宛先 チェーン出力(ポリシーACCEPT) ターゲット 利益 選択 ソース 宛先 シリアル番号でiptablesコマンドを挿入することもできます [root@web02 ~]# iptables -I 入力 2 -p tcp --dport 80 -j 受け入れる [root@web02 ~]# iptables -nL --line-number チェーン入力(ポリシーACCEPT) num ターゲット prot opt source 宛先 1 受け入れ tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 2 受け入れ tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 3 ドロップ tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 チェーン FORWARD (ポリシー ACCEPT) num ターゲット prot opt source 宛先 チェーン出力(ポリシーACCEPT) num ターゲット prot opt source 宛先 まとめ:ルールを削除する方法をまとめる1. iptables -D 入力 -p tcp --dport 8080 -j ドロップ 2. iptables -F すべてのルールを削除する 3. /etc/init.d/iptables を再起動します (iptables コマンドラインを使用して設定されたコマンドは一時的にのみ有効です) 4. iptables -D INPUT ルール番号 3.2: 10.0.0.0 ネットワークセグメントへのアクセスを禁止する顧客セグメント制御に基づく [root@web02 ~]# iptables -A 入力 -s 10.0.0.0/24 -j ドロップ -sは送信元アドレスを指定します このネットワーク セグメント以外のネットワーク セグメントを使用して操作を実行することもできます。 [root@web02 ~]# iptables -A 入力! -s 10.0.0.0/24 -j ドロップ 例: eth0 ネットワーク カードのポート 22 から入ってくるデータを制御する iptables -A 入力 -p tcp --dport 22 -i eth0 ! -s 10.0.0.0/24 -j ドロップ iptables -A 入力 -p tcp --dport 22 -i eth0 ! -s 192.168.1.1 -j ドロップ ポート3306をブロックする iptables -A 入力 -p tcp --dport 3306 -j ドロップ 指定されたプロトコルに一致する iptables -A 入力 -p tcp iptables -A 入力 -p udp 指定されたプロトコルを除くすべてのプロトコルに一致します iptables -A 入力! -p tcp 「単一のポートに一致** iptables -A INPUT -p tcp --sport 22 送信元ポート iptables -A INPUT -p udp --dport 22 宛先ポート ポート範囲を一致: iptables -A 入力 -p tcp --sport 22:80 iptables -A INPUT -p tcp --dport 21,22,23 -j DROP ----> 構文が間違っています iptables -I INPUT -p tcp -m multiport --dport 22,23,24,25 -j DROP iptables -I 入力 -p tcp -m マルチポート ! --dport 22,23,24,25 -j ドロップ iptables -I 入力 -p tcp --dport 3306:8809 -j 受け入れ iptables -I INPUT -p tcp --dport 18:80 -j DROP <---- 最善のアプローチ ICMPタイプに一致 iptables -A 入力 -p icmp-type 8 icmpには多くの種類があり、そのうち8つはpingを表します。 例: iptables -A 入力 -p icmp --icmp-type 8 -j ドロップ iptables -A 入力 -p icmp -m icmp --icmp-type 任意 -j 受け入れ icmpには多くの種類があるため、どれでも使用できますが、すべての種類のicmpは禁止されています。 iptables -A 入力 -s 192.168.1.0/24 -p icmp -m icmp --icmp-type 任意 -j 受け入れる エンタープライズシナリオにおける Ping 禁止 iptables -A 入力 -p icmp --icmp-type 8 -s 10.0.0.0/24 -j 受け入れる 一致するネットワークステータス
関連するステータス パケットの通過を許可する (Web サービスでは FTP サービスを使用しないでください) iptables -A 入力 -m 状態 --state ESTABLISHED、RELATED -j ACCEPT iptables -A 出力 -m 状態 --state ESTABLISHED、RELATED -j ACCEPT 指定された時間内に通過できるパケット数と同時パケット数を制限します。 -m 制限 --limit n/{秒/分/時間} 指定された期間内のリクエスト レートは、レートを表す「n」と、それに続く秒、分、時間の形式で表されます。 --リミットバースト [n] 同時に通過できるリクエストの数は「n」です。指定しない場合、デフォルト値は 5 です。 iptables -I 入力 -s 10.0.1.0/24 -p icmp --icmp-type 8 -m 制限 --limit 5/分 --limit-burst 2 -j 受け入れる iptablesコマンドを手動で実行して、企業の本番環境のファイアウォールを構成する実稼働環境でホストファイアウォールを構成する 2 つのモード 1. すべてのプログラムが操作の損傷を拒否できるようにする 適用シナリオ: インターネットゲートウェイルーティングのエンタープライズ構成 2. すべての操作を拒否し、指定された操作を許可する 適用シナリオ: サーバーホストファイアウォール エンタープライズホストファイアウォールの構成[root@web02 ~]# iptables -F [root@web02 ~]# iptables -X [root@web02 ~]# iptables -Z 1. SSHログインを許可するポートを設定する [root@web02 ~]# iptables -A 入力 -p tcp --dport 22 -j ACCETP [root@web02 ~]# iptables -A 入力 -p tcp -s 10.0.0.1/24 -j 受け入れる 2. ローカル通信を許可するルールを設定する [root@web02 ~]# iptables -A 入力 -i lo -j 受け入れ [root@web02 ~]# iptables -A 出力 -o lo -j 受け入れ 3. デフォルトのルールを設定する [root@web02 ~]# iptables -P 入力ドロップ [root@web02 ~]# iptables -P 出力を受け入れる [root@web02 ~]# iptables -P 転送ドロップ ルールを確認してください(現在のサーバーが最も安全です) [root@web02 ~]# iptables -nL --line-number チェーン INPUT (ポリシー DROP) num ターゲット prot opt source 宛先 1 受け入れ tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 2 受け入れ tcp -- 10.0.0.0/24 0.0.0.0/0 3 すべてを受け入れる -- 0.0.0.0/0 0.0.0.0/0 チェーン FORWARD (ポリシー DROP) num ターゲット prot opt source 宛先 チェーン出力(ポリシーACCEPT) num ターゲット prot opt source 宛先 1 すべてを受け入れる -- 0.0.0.0/0 0.0.0.0/0 4. 信頼できるIPセグメントを有効にする IDC LAN/WAN、オフィスネットワークIP、外部協力組織からのアクセスを許可 iptables -A INPUT -s 124.23.62.96/27 -p all -j ACCEPT #オフィスの固定 IP セグメント iptables -A INPUT -s 192.168.2.0/24 -p all -j ACCEPT #IDC コンピュータ ルームのイントラネット セグメント iptables -A INPUT -s 10.0.0.0/24 -p all -j ACCEPT #他のコンピュータ ルームのイントラネット セグメント iptables -A INPUT -s 203.82.24.0/24 -p all -j ACCEPT #IDC コンピュータ ルームのエクストラネット セグメント iptables -A INPUT -s 203.82.23.0/24 -p all -j ACCEPT #他の IDC コンピュータ ルームのエクストラネット セグメント 今では私たちだけがアクセスでき、外部の世界からはアクセスできません。 5. ICMPタイプのプロトコルを通過させる iptables -A 入力 -p icmp -m icmp-type 任意 -j 受け入れ ヒント: 開きたくない場合は、このコマンドを実行しないでください。 iptables -A 入力 -p icmp -s 10.0.0.0/24 -m icmp --icmp-type 任意 -j 受け入れる 6. 関連するステータス パケットの通過を許可する (Web サービスは FTP サービスを使用しません) iptables -A 入力 -m 状態 --state ESTABLISHED、RELATED -j ACCEPT iptables -A 出力 -m 状態 --state ESTABLISHED、RELATED -j ACCEPT ヒント: 上記の構成は、適格なサーバーが構成すべきものです。 保存デフォルトの iptables は永続的に保存されず、再起動後に無効になります。 最初の方法: /etc/init.d/iptables 保存 /etc/sysconfig/iptablesに保存する 次の形式を表示します [root@web02 ~]# cat /etc/sysconfig/iptables # 2016 年 8 月 15 日月曜日 01:33:44 に iptables-save v1.4.7 によって生成されました *ナット :事前ルーティング受け入れ [1413:153792] :ポストルーティング受け入れ [132:8834] :出力受け入れ [132:8834] 専念 # 2016年8月15日月曜日01:33:44に完了 # 2016 年 8 月 15 日月曜日 01:33:44 に iptables-save v1.4.7 によって生成されました *フィルター :入力ドロップ [1798:662465] :フォワードドロップ [0:0] :出力受け入れ [288:21100] -A 入力 -p tcp -m tcp --dport 22 -j 受け入れ -A 入力 -s 10.0.0.0/24 -p tcp -j 受け入れ -A 入力 -i lo -j 受け入れ -A 出力 -o lo -j 受け入れ 専念 # 2016年8月15日月曜日01:33:44に完了 2番目の方法: [root@web02 ~]# iptables-save >/etc/sysconfig/iptables 最初の方法が推奨されます テスト: 設定したファイアウォールを他のサーバー経由でスキャンしました 分析にはnmapツールを使用します。このツールをインストールする必要があります。 [root@web02 ~]# yum -y nmapをインストール 使い方は以下です。詳細については、nmap --help を参照してください。 [root@web02 ~]# nmap 10.0.0.8 -p 1-65535 2016-08-15 04:28 CST に Nmap 5.51 ( http://nmap.org ) を起動しました 10.0.0.8 の Nmap スキャン レポート ホストは稼働しています (遅延 0.0000070 秒)。 表示なし: 65532 個の閉じたポート 港湾国サービス 22/tcp オープンssh 80/tcp オープン http 3306/tcp オープン mysql Nmap 完了: 1 つの IP アドレス (1 つのホストが稼働中) を 14.21 秒でスキャンしました 生産メンテナンス(1)定められた規則 /etc/sysconfig/iptablesを編集する 必要なルールを追加します: 例: -A 入力 -p tcp -m tcp --dport 873 -j 受け入れ /etc/init.d/iptables をリロード また、構成が変更されている間にコマンドを実行すると、構成は永続的に有効になります。 (2)コマンドを試してみて、うまくいけば設定ファイルを入れます。再起動する必要はありません。 悪意のあるIPのブロックIP をブロックし、最初の行でブロックします。 10.0.0.1 このマシンは私たちのサーバーを攻撃したり、BBSにスパムを投稿したりしています IP を手動でブロック: iptables -I INPUT -s 10.0.0.1 -j DROP #大まかで広範囲、外部からの攻撃者 Iptables -I INPUT -s 10.0.0.1 -j DROP iptables -I INPUT -p tcp -s 10.0.0.1 --dport 80 -j DROP #問題ありません。範囲は狭いです。内部 IPを自動的にブロック: Webまたはアプリケーションのログやネットワーク接続ステータスを分析して、迷惑IPをブロックします。 スクリプト: #!/bin/bash #これは oldboy によって作成されたサーバー ファイアウォールです 17:03 2006-7-26 # メールアドレス:[email protected] # qqinfo:49000448 # 機能: サーバーファイアウォール # バージョン:1.1 ################################################ # oldboytraining 情報。 # QQ 1986787350 70271111 # サイト: http://www.etiantian.org # ブログ: http://oldboy.blog.51cto.com # oldboytraining QQ グループ: 208160987 45039636 ################################################ #変数PATHを定義する iptables = /sbin/iptables のディレクトリ。 #既存のルールを削除する $IPT -F $IPT -X $IPT -Z #デフォルトのファイアウォール ポリシーの設定 $IPT --policy 出力を受け入れる $IPT --ポリシー FORWARD DROP $IPT -P 入力ドロップ #ループバックインターフェースの設定 $IPT -A 入力 -i lo -j 受け入れ $IPT -A 出力 -o lo -j 受け入れ #アクセスルールの設定 #1、IPアクセスルール、すべてのIPを許可する $IPT -A 入力 -s 10.0.10.0/24 -p すべて -j 受け入れ $IPT -A 入力 -s 10.0.0.0/24 -p すべて -j 受け入れ ##以下は繰り返され、知識ポイントとして保持されます。単一のサービスの構成 #2番目、ポートアクセスルール #ナギオス $IPT -A 入力 -s 10.0.10.0/24 -p tcp --dport 5666 -j 受け入れる $IPT -A 入力 -s 10.0.0.0/24 -p tcp --dport 5666 -j 受け入れる #デシベル $IPT -A 入力 -s 10.0.0.0/24 -p tcp --dport 3306 -j 受け入れる $IPT -A 入力 -s 10.0.0.0/24 -p tcp --dport 3307 -j 受け入れる $IPT -A 入力 -s 10.0.10.0/24 -p tcp --dport 3306 -j 受け入れる $IPT -A 入力 -s 10.0.10.0/24 -p tcp --dport 3307 -j 受け入れる #ssh 他サーバーとの違いはここです。>> $IPT -A 入力 -s 10.0.0.0/24 -p tcp --dport 52113 -j 受け入れる $IPT -A 入力 -s 10.0.10.0/24 -p tcp --dport 52113 -j 受け入れる $IPT -A 入力 -p tcp --dport 22 -j 受け入れ #http $IPT -A 入力 -p tcp --dport 80 -j 受け入れ #snmp $IPT -A 入力 -s 10.0.0.0/24 -p UDP --dport 161 -j 受け入れ $IPT -A 入力 -s 10.0.10.0/24 -p UDP --dport 161 -j 受け入れ #rsync $IPT -A 入力 -s 10.0.0.0/24 -p tcp -m tcp --dport 873 -j 受け入れる $IPT -A 入力 -s 10.0.10.0/24 -p tcp -m tcp --dport 873 -j 受け入れる #icmp #$IPT -A 入力 -p icmp -m icmp --icmp-type 任意 -j 受け入れ #その他関連 $IPT -A 入力 -m 状態 --state ESTABLISHED、RELATED -j ACCEPT $IPT -A 出力 -m 状態 --state ESTABLISHED、RELATED -j ACCEPT エンタープライズケース: DOS 攻撃の実稼働ケースを解決するスクリプトの作成 ヒント: Web ログまたはネットワーク接続数に応じて、特定の IP または PV の短時間の同時接続数が 100 に達したときに監視し、ファイアウォール コマンドを呼び出して対応する IP をブロックします。監視頻度は 3 分ごとです。ファイアウォールのコマンドは次のとおりです: iptables -I INPUT -s 10.0.1.10 -j DROP このスクリプトはテストファイルを使用して書かれています [root@db02 スクリプト]# cat test_6.sh #!/bin/sh # [ -f /etc/init.d/functions ] && . /etc/init.d/functions IP_file="/server/scripts/ddos.txt" IP_filter_command="iptables -I INPUT -j DROP -s" IP_recover_command="iptables -D INPUT -j DROP -s" 関数 IP_check(){ grep "EST" ${IP_file}|awk -F "[ |:]+" '{print $6}'|sort |uniq -c|sort -rn -k1 > /server/scripts/ip.txt } 関数 IP_filter(){ 実行 < /server/scripts/ip.txt 行を読みながら する IP_count=`echo $line|awk '{print $1}'` IP=`echo $line|awk '{print $2}'` IP_fil=`iptables -L -n|grep "\b${IP}\b"|wc -l` [ ${IP_count} -gt 25 -a ${IP_fil} -eq 0 ]の場合; ${IP_filter_command} ${IP} echo "${IP}" >> /server/scripts/ip_filtered.txt アクション「${IP} をフィルター」/bin/true フィ 終わり } 関数 IP_recover(){ 実行 < /server/scripts/ip.txt 行を読みながら する IP_count=`echo $line|awk '{print $1}'` IP=`echo $line|awk '{print $2}'` IP_fil=`iptables -L -n|grep "\b${IP}\b"|wc -l` [ ${IP_count} -le 25 -a ${IP_fil} -eq 1 ]の場合; ${IP_recover_command} ${IP} echo "${IP}" >> /server/scripts/ip_filtered.txt アクション「${IP} を回復する」/bin/true フィ 終わり } 関数main(){ ケース「$1」 フィルター) IP_チェック echo "$(date +%F-%H:%M:%S) は $(whoami) によってフィルタリングされました" >> /server/scripts/ip_filtered.txt IPフィルター ;; 回復する IP_チェック echo "$(date +%F-%H:%M:%S) が $(whoami) によって回復されました" >> /server/scripts/ip_filtered.txt IP_回復 ;; *) echo "使用法:$0 {filter|recover}" 出口1 エサック } メイン $* 本番環境でのiptablesスクリプトの説明ヒント: 外部にサービスを提供しない外部 IP アドレスを持つサーバーの場合は、送信元アドレスを制限するのが最適です。外部に提供されるサービスは、送信元アドレス(例:ポート80)によって制限することはできません。 質問: エンタープライズ ハードウェア ファイアウォールと IPTABLES ファイアウォールを同時に使用する必要がありますか? 解決策: 同時にエンタープライズハードウェアファイアウォールを使用することができます。これは通常、建物のセキュリティに相当するゲートウェイに配置されます。ただし、建物の各部屋にはドアをロックする人が必要です。 質問: IDC コンピュータ ルームにはハードウェア ファイアウォールが導入されています。ファイアウォールなしでサーバーを動作させることはできますか? 回答: 絶対にそうではありません。建物に警備員がいる場合、オフィスのドアは施錠されていないということですか? NATテーブル設定インターネット共有設定 Linux ゲートウェイ B: LAN 共有のための 2 つのコマンド メソッド: 方法 1: 外部ネットワーク アドレスが固定されている場合に適しています。 iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 10.0.0.7 (1)-s192.168.1.0/24: オフィスまたはIDCイントラネットセグメント。 (2)-oeth0はゲートウェイの外部ネットワークカードインターフェースです。 (3)-jSNAT --to-source 10.0.0.7はゲートウェイの外部ネットワークカードのIPアドレスです。 方法2: 外部ネットワークアドレスの変更に適しています(ADSL): iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE #マスカレード。 構成は以下のとおりです ステップ1: 外部サーバーの構成 [root@lb01 ~]# iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 10.0.0.5 [root@lb01 ~]# iptables -t nat -L -n カーネル転送を有効にする ネット.ipv4.ip_forward = 1 vim /etc/sysctl.conf sysctl -p #有効にする インターネットサーバーをセットアップする必要がある ルートの追加 route add default gw 172.16.1.5#ここに外部ネットワークのIPアドレスを記入 vim /etc/resolv.conf ネームサーバー223.5.5.5を追加 ルート -n チェック ケース 2: 10.0.0.5:80 へのリクエストを 172.16.1.8:80 にリダイレクトする [root@web02 ~]# iptables -t nat -A PREROUTING -d 10.0.0.5 -p tcp --dport 80 -j DNAT --to-destination 172.16.1.8:80 [root@web02 ~]# iptables -P 転送ドロップ iptables の一般的な企業ケース:1. Linuxホストファイアウォール(表:FILTER制御チェーン:INPUT) 2. LAN マシンがインターネット アクセスを共有する (表: NAT 制御チェーン: POSTROUTING) iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 10.0.0.7 3. 外部アドレスとポート、内部アドレスとポートにマッピング (表: NAT 制御チェーン: PREROUTING) iptables -t nat -A PREROUTING -d 10.0.0.7 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.8:9000 エンタープライズケース: 外部 IP 124.42.34.112 と内部サーバー 10.0.0.8 の 1 対 1 マッピングを実装する ゲートウェイIP: eth0:124.42.60.109 eth1:10.0.0.254 まず、ルーティング ゲートウェイに VIP 124.42.34.112 をバインドします。これはエイリアスまたは補助 IP にすることができます。 -A POSTROUTING -s 10.0.0.0/255.255.240.0 -d 124.42.34.112 -j SNAT --to-source 10.0.0.254 -A 事前ルーティング -d 124.42.34.112 -j DNAT --宛先 10.0.0.8 -A POSTROUTING -s 10.0.0.8 -o eth0 -j SNAT --to-source 124.42.34.112 iptables 実稼働アプリケーションシナリオ1) LAN共有インターネットアクセス(企業内LANインターネットゲートウェイやIDCルームイントラネットインターネットゲートウェイ[nat POSTROUTING]に最適) 2) サーバーファイアウォール機能(IDCコンピュータルーム内の外部IPを持つサーバーに最適)(主にフィルターINPUT制御) 3) 外部 IP とポートを LAN にマッピングします (1 対 1 の IP マッピングまたは特定のポートへのマッピングが可能です)。IDC が Web サイトの外部 VIP と Web サイト ポートをロード バランサー (ハードウェア ファイアウォール) にマッピングすることも可能です。 (NAT プレルーティング) 4) オフィスルーター + ゲートウェイ機能 (Zebra ルーティング + iptables フィルタリングと NAT + Squid フォワード透過プロキシ) 80 + ntop/iftop/iptraf トラフィック表示 + tc/cbq トラフィック制御速度制限 5) メールゲートウェイ iptablesファイアウォールの適用1) ホストファイアウォール 2) ゲートウェイアプリケーション(IPマッピング、ポートマッピング) 3) 情報をフィルタリングし、トラフィックと従業員のインターネット行動を監視および制限する (squid (フォワード プロキシ キャッシュとフィルタリング) + ntop (グラフィカル トラフィック監視) + 通常 (トラフィック制限) + iptraf/iftop (トラフィック表示)) IPTABLES サーバーがカーネルをアップグレードすると、Squid と同様のフィルタリング機能を実装できます。 4) ゲートウェイにウイルス対策ソフトウェアをインストールしてポート9999を監視する(ゲートウェイウイルス対策) iptables -A PREROUTING -i eth0 -d 211.167.253.109 -p tcp -m tcp --dport 25 -j DNAT --to-destination 192.168.10.6:9025 5) Zebraを組み合わせてエンタープライズレベルのルーターを構成する 複数の外部IPアドレスをインターネットにマッピングするiptables -t nat -A POSTROUTING -s 10.0.0.1/255.255.255.0 -o eth0 -j SNAT --to-source 124.42.60.11-124.42.60.16 iptables -t nat -A POSTROUTING -s 172.16.1.0/255.255.255.0 -o eth0 -j SNAT --to-source 124.42.60.103-124.42.60.106 #iptables -t nat -A postrouting -S 192.168.1.0/22 -o eth0 -j SNAT --to-source 10.0.0.241-10.0.0.249 質問: 1. 2,000人がブロックされた 2. 利用可能なポート65535のリソースは限られている エンタープライズ ケース: ip_conntrack: テーブルがいっぱいで、パケットがドロップされます。エラー メッセージ 以下は、私の実稼働環境のサーバーの構成です。 ネット.ipv4.tcp_fin_timeout = 2 ネット.ipv4.tcp_tw_reuse = 1 ネット.ipv4.tcp_tw_recycle = 1 ネット.ipv4.tcp_syncookies = 1 ネット.ipv4.tcp_keepalive_time = 600 net.ipv4.ip_local_port_range = 4000 65000 ネット.ipv4.tcp_max_syn_backlog = 16384 ネット.ipv4.tcp_max_tw_buckets = 36000 ネット.ipv4.route.gc_timeout = 100 ネット.ipv4.tcp_syn_retries = 1 ネット.ipv4.tcp_synack_retries = 1 #5. dmesg に「ip_conntrack: table full, dropped packet」というエラー メッセージが表示されます。どうすれば解決できますか? #以下のパラメータは、iptables ファイアウォールの最適化です。ファイアウォールからプロンプトが表示されない場合は、無視できます。 c58: ネット.ipv4.ip_conntrack_max = 25000000 ネット.ipv4.netfilter.ip_conntrack_max=25000000 net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=180 ネット.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait=120 net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait=60 ネット.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait=120 ################################################################ C64: ネット.nf_conntrack_max = 25000000 ネット.netfilter.nf_conntrack_max = 25000000 net.netfilter.nf_conntrack_tcp_timeout_established = 180 net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120 net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60 ネット.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120 カーネル パラメータ /etc/sysctl.conf を調整した後、変更を有効にするには /sbin/sysctl -p を実行する必要があります。 重要: 同時実行数が多い場合や 1 日の PV が高い場合は、ファイアウォールを開くと Web サイトへのアクセスが遅くなる可能性があるため注意してください。 大規模な同時実行(同時ユーザー数 10,000 人、1 日あたり 3,000 万 PV)の場合は、ハードウェア ファイアウォールを購入するか、iptables ファイアウォールを使用しないでください。 iptablesパラメータの紹介
Linuxのアンチウォールiptablesの詳細については、以下の関連リンクを参照してください。 以下もご興味があるかもしれません:
|
<<: Windows での MySQL 8.0.12 のインストール手順と基本的な使用方法のチュートリアル
>>: React+TS を使用したシンプルな Jira プロジェクトを実装するためのベスト プラクティス
個人のウェブサイトがどんなに素晴らしいものであっても、サイバースペースの広大な海に浮かぶ小さなボート...
1. transform 属性を使用して、画像を拡大せずに表示します (パスの問題は必要に応じて修正...
次に、ログ管理、ログのアーカイブ、ログのトラブルシューティング、イベントの転送と収集のためのコンピュ...
質問今日、プロジェクト関数を書いていたとき、金額の統計計算を行い、単位を変換する必要がありました。そ...
そこで、この問題を解決するために埋め込みフレームワークを導入します。具体的な原則は、フォームがデータ...
「大河は東に流れ、波は歴代の英雄たちを洗い流した。古城の西側は三国時代の周朗の赤壁だと言われている...
この記事では、MySQL インストールの詳細なチュートリアルを記録し、全員と共有します。 1. バー...
1. HTML_falshアニメーションでのマルチメディアの応用(WebページへのFlashアニメー...
Samba サービスでも NFS サービスでも、サーバーの起動時にリモート共有リソースが自動的にマ...
目次1. 現在のデータベース支出のストレージエンジンを表示する方法1:方法2: 2. ENGINE=...
このドキュメントを作成した当時は2019年12月頃で、er2.200が最新バージョンでした。 1.画...
この記事の例では、WeChatアプレットマップで使用される具体的な実装コードを参考までに共有していま...
<本文> <div id="ルート"> <h1 ...
IE6 は PNG の透明度をサポートしていないと多くの人が言っています。実際、IE は 100%...
1|0 カーネルをコンパイルする(1)uname -rコマンドを実行してカーネルバージョンを表示しま...