Linuxファイアウォールiptablesの詳細な紹介、設定方法と事例

Linuxファイアウォールiptablesの詳細な紹介、設定方法と事例

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 つのテーブル) が含まれています。テーブルはリンクのコンテナーです。各テーブルには複数のリンクが含まれています。

チェーンはルールのコンテナであり、実際のフィルタリング ルールはチェーンに属します。

レベル紹介

iptables 国

表の州

チェーンマーケット

ルールズ郡

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 受け入れる

一致するネットワークステータス

-m 状態 --状態

NEW: 新しい接続が開始されました

確立済み: 接続が確立されました

関連: 新しい接続が開始されました

無効: 違法または認識不能

FTPサービスは特別なので、ステートフル接続が必要です。

関連するステータス パケットの通過を許可する (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 1​​72.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パラメータの紹介

-n 番号

-L リスト

-F はすべてのルールをクリアし、デフォルトのルールを処理しません

-X ユーザー定義チェーンを削除する

-Zチェーンカウンターがクリアされました

-A 指定されたチェーンの最後にルールを追加します。最後の

-I 指定されたチェーンの先頭にルールを追加します。最初の

-tはテーブルを指定します。指定しない場合は、デフォルトはフィルターです。

-pはプロトコル(all.tcp、udp.icmp)を指定します。デフォルトではall

-P デフォルトのルールを設定する

-sは送信元アドレスを指定します

-d 宛先アドレス

--dportはポートを指定します

-j 処理動作 ACCPET 受信、DROP 破棄、REJECT 拒否

-iinputは入力ネットワークインターフェースと一致します

-ooutputは送信ネットワークカードインターフェースと一致します

-m state --state ネットワークの状態を一致させる

Linuxのアンチウォールiptablesの詳細については、以下の関連リンクを参照してください。

以下もご興味があるかもしれません:
  • ファイアウォールの iptables 戦略を使用して Linux サーバー上のポートを転送する方法
  • Linux iptables の一般的なファイアウォール ルールの詳細な説明
  • LINUX での IPTABLES ファイアウォールの基本的な使用方法のチュートリアル
  • Linuxはiptablesを使用して複数のIPからのサーバーへのアクセスを制限します
  • Linux iptablesコマンドの詳細な説明
  • Linux ファイアウォールの iptables ルールを表示、追加、削除、変更する方法の概要
  • Linux ファイアウォール iptables で IP を禁止およびブロック解除するための一般的なコマンドの詳細な説明
  • Linux での iptables によるポートのブロックとオープンの例
  • Linux iptables とインターフェースを使用してコンテナ ネットワークを管理する Docker の詳細な説明
  • Linux VPS サーバー共通サービス iptables 戦略
  • iptables を使用して Linux を構成し、すべてのポートのログインを禁止し、指定されたポートを開く方法
  • 新しくインストールした Linux システムの /etc/sysconfig ディレクトリに iptables ファイルが存在しない問題の解決方法
  • Alibaba Cloud Linux サーバーで iptables を使用してセキュリティ ポリシーを設定する方法
  • Linuxはiptablesを通じてTCP接続と周波数を制限することでDDOS攻撃を防御します
  • Linux サーバーで iptables+Denyhost によるブルートフォース攻撃に抵抗する設定方法
  • Linux ファイアウォール iptables 入門チュートリアル
  • Linux で iptables ファイアウォール ルールを追加する例

<<:  Windows での MySQL 8.0.12 のインストール手順と基本的な使用方法のチュートリアル

>>:  React+TS を使用したシンプルな Jira プロジェクトを実装するためのベスト プラクティス

推薦する

ES6のシンボルデータ型について詳しく説明します

目次シンボルデータタイプシンボルが表示される理由シンボルの特徴シンボルの応用rbオブジェクトにupメ...

CSS フレックスレイアウトのリストの最後の行を左揃えにする N 通りの方法 (要約)

張新旭氏の記事を引用して皆さんにシェアしたいと思います。 変更を加えたい場合は、対応する画像によって...

ローカルの Windows リモート デスクトップから Alibaba Cloud Ubuntu 16.04 サーバーに接続する方法

ローカル Windows リモート デスクトップが Alibaba Cloud Ubuntu 16....

JavaScript イベント キャプチャ バブリングとキャプチャの詳細

目次1. イベントの流れ1. コンセプト2. DOMイベントフロー2. イベントの委任1. イベント...

CSS background-blend-modeの仕組みを深く理解する

この記事は共有および集約することを歓迎します。全文を転載する必要はありません。著作権を尊重してくださ...

MySQL ファジークエリの使用法 (通常、ワイルドカード、組み込み関数)

目次1. MySQL ワイルドカード ファジー クエリ (%,_) 1-1. ワイルドカードの分類1...

VMware仮想マシンにLinux(CentOS)をインストールするための詳細な構成手順

CentOS7をダウンロード私がダウンロードしたイメージはCentOS-7-x86_64-DVD-1...

CSSを使用してアダプティブスクエアを実装する方法の例

伝統的な方法は、正方形を固定形式で書くことです。長さ=幅を直接書き、次のように固定値を書きます。 。...

Kubernetes ポッドオーケストレーションとライフサイクルの詳細な説明

目次K8Sマスター基本アーキテクチャポッドオーケストレーションコンセプトPod オブジェクトのプロパ...

Docker環境を構築する簡単な方法

まず、Docker とは何かを理解しましょう。 Docker は、アプリケーションをデプロイするため...

Baidu 入力メソッドが API を公開、自由に移植して使用できると主張

百度入力方式の担当者は、百度入力方式のオープンAPIの最大の利点は操作が便利であることであり、プラッ...

MySQLの高可用性と高パフォーマンスのクラスタを構築する方法

目次MySQL NDB Clusterとはクラスター構築のための準備作業クラスターのデプロイを開始す...

MySQL で置換操作を使用したときにデータ損失が発生する問題の解決策

序文同社の開発者は、データの更新時に replace into ステートメントを使用していました。不...

画像比較を実現するjQueryプラグイン

この記事の例では、画像比較を実現するためのjQueryプラグインの具体的なコードを参考までに共有して...