ファイアウォールの概要(1)-iptablesファイアウォール
1つ、iptablesファイアウォール
1.iptablesの概要
- Linuxシステムファイアウォール:IPパケットフィルタリングシステム。実際には、netfilterとiptablesの2つのコンポーネントで構成されています。
- 主にネットワーク層で作業し、IPデータパケットを目指します。パケット内のIPアドレスやポートなどの情報の処理に反映されます。
2、netfilter和iptables
①、netfilter
- Netfilterは、「カーネルスペース」(カーネルスペース、カーネルスペースとも呼ばれます)のファイアウォール機能システムに属しています。
- これはカーネルの一部であり、いくつかのパケットフィルタリングテーブルで構成されています。これらのテーブルには、パケットフィルタリングの処理を制御するためにカーネルが使用する一連のルールが含まれています。
②、iptables
- Iptablesは、「ユーザースペース」(ユーザースペース、ユーザースペースとも呼ばれます)のファイアウォール管理システムに属しています。
- これは、Linuxファイアウォールを管理するために使用されるコマンドプログラムであり、パケットフィルタリングテーブルのルールを簡単に挿入、変更、および削除できます。通常、これは/ sbin / iptablesディレクトリにあります。
③、netfilter / iptables
- Netfilter / iptablesは、後で略してiptablesと呼ばれます。
- iptablesは、raw、mangle、nat、filterの4つの組み込みルールテーブルを備えたカーネルベースのファイアウォールです。テーブル内のすべてのルールが構成された後、それらはサービスを再起動せずにすぐに有効になります。
3.4つの時計と5つのチェーン
- ルールテーブルの役割:さまざまなルールチェーンに対応する
- ルールチェーンの役割:さまざまなファイアウォールルールに対応する
- 概要:テーブルにはチェーンがあり、チェーンにはルールがあります
①、4つのテーブル
-
rawテーブル:パケットのステータスを追跡するかどうかを決定します。OUTPUTとPREROUTINGの2つのルールチェーンが含まれています。
-
マングルテーブル:トラフィックシェーピングに使用されるデータパケットの内容を変更し、データパケットにマークを設定します。INPUT、OUTPUT、FORWARD、PREROUTING、およびPOSTROUTINGの5つのルールチェーンが含まれています。
-
natテーブル:ネットワークアドレス変換を担当し、データパケットの送信元と宛先のIPアドレスまたはポートを変更するために使用されます。OUTPUT、PREROUTING、およびPOTROUTINGの3つのルールチェーンが含まれています。
-
フィルタテーブル:データパケットのフィルタリングと、データパケットを渡すかどうかの決定(フィルタリング)を担当します。INPUT、FORWARD、およびOUTPUTの3つのルールチェーンが含まれています。
- iptablesの4つのルールテーブルの中で、マングルテーブルとrawテーブルの適用は比較的少なくなっています。
②、5チェーン
- 入力:インバウンドデータパケットを処理し、ターゲットIPのデータパケットをこのマシンに一致させます。
- 出力:アウトバウンドデータパケットを処理します。通常、このチェーンでは構成しません。
- 転送:マシンを流れるデータパケットと一致するデータパケットを処理および転送します。
- PREROUTINGチェーン:ルーティングの前にデータパケットを処理し、宛先アドレスを変更するために使用され、DNATに使用されます。これは、内部ネットワークのポート80をルーターの外部ネットワークポートにマッピングすることと同じです。
- POSTROUTINGチェーン:ルーティング選択後にデータパケットを処理し、送信元アドレスを変更するために使用され、SNATに使用されます。これは、ルーターのNAT変換機能を介した内部ネットワークと同等であり、パブリックIPアドレスを介して内部ネットワークホストを実現してオンラインにします。
③、ルールテーブルの一致順序
④、ルールチェーン間の一致順序
-
ホストベースのファイアウォール
- インバウンドデータ(外部からのデータパケット、宛先アドレスはファイアウォールのローカルマシン)
- PREROUTING-> INPUT->ネイティブアプリケーション
- 送信データ(ファイアウォールから外部アドレスに送信されるデータパケット)
- ネイティブアプリケーション->出力->ポストルーティング
- インバウンドデータ(外部からのデータパケット、宛先アドレスはファイアウォールのローカルマシン)
-
ネットワークファイアウォール
- データの転送(ファイアウォールを介して転送する必要があるデータパケット)
- 事前ルーティング->転送->事後ルーティング
- データの転送(ファイアウォールを介して転送する必要があるデータパケット)
-
ルールチェーン内の一致する順序
- 上から下に順番に確認し、一致するルールが見つかったら停止します(関連するログを記録することを意味するLOGポリシーを除く)
- チェーン内に一致するルールが見つからない場合、チェーンのデフォルトポリシーに従って処理されます(変更されていない場合、デフォルトポリシーが許可されます)
4.iptablesのインストール
- CentOS 7はデフォルトでfirewalldファイアウォールを使用します。iptablesファイアウォールを使用する場合、iptablesはインストールされません。iptablesをインストールする前に、firewalldファイアウォールをオフにする必要があります
#关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
#安装并开启iptables服务
yum -y install iptables iptables-services
systemctl start iptables.service
5.iptablesファイアウォールの設定方法
①、コマンドライン構成フォーマット
②、注意が必要な事項
- テーブル名が指定されていない場合、デフォルトでフィルターテーブルを参照します
- チェーン名が指定されていない場合、デフォルトでテーブル内のすべてのチェーンを参照します
- チェーンのデフォルトポリシーが設定されていない限り、一致条件を指定する必要があります
- オプション、チェーン名、およびコントロールタイプには大文字を使用し、残りは小文字にします。
③、一般的に使用される制御タイプ
コントロールタイプ | 効果 |
---|---|
受け入れる | データパケットの通過を許可します。 |
落とす | 応答情報を提供せずに、データパケットを直接ドロップします。 |
拒否する | データパケットの通過を拒否すると、データ送信者に応答メッセージが送信されます。 |
SNAT | データパケットの送信元アドレスを変更します。 |
DNAT | データパケットの宛先アドレスを変更します。 |
仮面舞踏会 | 固定されていないパブリックIPアドレスを装います。 |
ログ | ログ情報を/ var / log / messagesファイルに記録してから、パケットを次のルールに渡します。 LOGは単なる補助アクションであり、実際にはデータパケットを処理しません。 |
④共通の管理オプション
オプション | 説明 |
---|---|
-A | 指定されたチェーンの最後に新しいルールを追加(–append)します |
-私 | 指定されたチェーンの先頭に新しいルールを挿入(–insert)します。シーケンス番号が指定されていない場合、デフォルトで最初のルールになります。 |
-R | 指定されたチェーン内のルールを変更、置換(-replace)し、ルール番号または特定のコンテンツを指定できます |
-P | 指定されたチェーンのデフォルトポリシーを設定します(–policy) |
-D | 指定したチェーン内のルールを削除(-削除)します。ルール番号または特定のコンテンツを指定できます |
-F | 指定されたチェーン内のすべてのルールをフラッシュ(-flush)します。チェーン名が指定されていない場合、テーブル内のすべてのチェーンがクリアされます。 |
-L | 指定されたチェーン内のすべてのルールを一覧表示(–list)します。チェーン名が指定されていない場合は、テーブル内のすべてのチェーンが一覧表示されます。 |
-n | ホスト名の代わりにIPアドレスを表示するなど、出力結果を表示するには、数値形式(–numeric)を使用します |
-v | 各ルールの一致したパケット数や一致したバイト数などの詳細情報を表示します |
–行番号 | ルールを表示すると、ルールのシーケンス番号が表示されます |
⑤、マッチング条件
一致条件 | 説明 |
---|---|
-p | 照合するパケットのプロトコルタイプを指定します |
-s | 照合するパケットの送信元IPアドレスを指定します |
-d | 照合するパケットの宛先IPアドレスを指定します |
-私 | マシンのネットワークインターフェースに入るデータパケットを指定します |
- | データパケットが使用するためにマシンを離れるネットワークインターフェイスを指定します |
-スポーツ | 送信元ポート番号を指定します |
–dport | 宛先ポート番号を指定します |
- 直接使用は、ネットワークプロトコル、IPアドレス、ネットワークインターフェイスなどの条件を含む他の条件や拡張機能に依存しません。
协议匹配:-p 协议名
地址匹配:-s 源地址、-d 目的地址 #可以是IP、网段、域名、空(任何地址)
接口匹配:-i 入站网卡、-o 出站网卡
例:
iptables -A FORWARD ! -p icmp -j ACCEPT
iptables -A INPUT -s 192.168.80.11 -j DROP
iptables -I INPUT -i ens33 -s 192.168.80.0/24 -j DROP
- ポート、TCPタグ、ICMPタイプなどの条件を含む、特定のプロトコルマッチングを前提条件として使用します。
- ポートマッチ
端口匹配:--sport 源端口、--dport 目的端口
#可以是个别端口、端口范围
--sport 1000 匹配源端口是1000的数据包
--sport 1000:3000 匹配源端口是1000-3000的数据包
--sport :3000 匹配源端口是3000及以下的数据包
--sport 1000: 匹配源端口是1000及以上的数据包
注意:--sport 和 --dport 必须配合 -p <协议类型> 使用
例:
iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT
iptables -I FORWARD -d 192.168.80.0/24 -p tcp --dport 24500:24600 -j DROP
- TCPタグマッチング
TCP标记匹配:--tcp-flags TCP标记
iptables -I INPUT -i ens33 -p tcp --tcp-flags SYN,RST,ACK SYN -j ACCEPT
#丢弃SYN请求包,放行其他包
- ICMPタイプマッチング
ICMP类型匹配:--icmp-type ICMP类型
#可以是字符串、数字代码、、目标不可达
“Echo-Request”(代码为 8)表示 请求
“Echo-Reply”(代码为 0)表示 回显
“Destination-Unreachable”(代码为 3)表示 目标不可达
关于其它可用的 ICMP 协议类型,可以执行“iptables -p icmp -h”命令,查看帮助信息
iptables -A INPUT -p icmp --icmp-type 8 -j DROP #禁止其它主机ping 本机
iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT #允许本机ping 其它主机
iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT #当本机ping 不通其它主机时提示目标不可达
#此时其它主机需要配置关于icmp协议的控制类型为 REJECT
iptables -A INPUT -p icmp -j REJECT
- マルチポート、MACアドレス、IP範囲、パケットステータスなどの条件を含め、「-m拡張モジュール」の形式でタイプを明確に示す必要があります。
- マルチポートマッチング
多端口匹配:-m multiport --sports 源端口列表
-m multiport --dports 目的端口列表
例:
iptables -A INPUT -p tcp -m multiport --dport 80,22,21,20,53 -j ACCEPT
iptables -A INPUT -p udp -m multiport --dport 53 -j ACCEPT
- IP範囲マッチング
IP范围匹配:-m iprange --src-range IP范围
iptables -A FORWARD -p udp -m iprange --src-range 192.168.80.100-192.168.80.200 -j DROP
#禁止转发源地址位于192.168.80.100-192.168.80.200的udp数据包
- 状態一致
状态匹配:-m state --state 连接状态
常见的连接状态:
NEW :与任何连接无关的,还没开始连接
ESTABLISHED :响应请求或者已建立连接的,连接态
RELATED :与已有连接有相关性的(如FTP 主被动模式的数据连接),衍生态,一般与ESTABLISHED 配合使用
INVALID :不能被识别属于哪个连接或没有任何状态
iptables -A FORWARD -m state --state NEW -p tcp ! --syn -j DROP
#禁止转发与正常 TCP 连接无关的非--syn 请求数据包(如伪造的网络攻击数据包)
6.SNATの原則と適用
①、SNATアプリケーション環境
- LANホストは、インターネットにアクセスするために単一のパブリックIPアドレスを共有します(プライベートIPはインターネットで通常ルーティングできません)
②SNATの原理
- データパケットの送信元アドレスを変更します。
③、SNAT変換の前提条件
- LAN内の各ホストのIPアドレス、サブネットマスク、およびデフォルトゲートウェイアドレスが正しく設定されている
- LinuxゲートウェイはIPルーティングと転送を可能にします
④、ルーティングと転送の開始方法
临时打开:
echo 1 > /proc/sys/net/ipv4/ip_forward
或
sysctl -w net.ipv4.ip_forward=1
永久打开:
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1 #将此行写入配置文件
sysctl -p #读取修改后的配置
⑤、SNAT変換
SNAT转换1:固定的公网IP地址:
iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o ens33 -j SNAT --to 12.0.0.1
或
iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o ens33 -j SNAT --to-source 12.0.0.1-12.0.0.10
内网IP 出站 外网网卡 外网IP或地址池
SNAT转换2:非固定的公网IP地址(共享动态IP地址):
iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o ens33 -j MASQUERADE
⑥、小さな知識の拡大
- IPアドレスのSNAT変換では、通常、イントラネット上の100〜200のホストがインターネットにアクセスできます。
7.DNATの原理と応用
①DNATアプリケーション環境
- インターネットのローカルエリアネットワークにあるサーバーを公開する
②DNATの原理
- データパケットの宛先アドレスを変更します。
③DNAT変換の前提条件
- ローカルエリアネットワーク内のサーバーはインターネットにアクセスできます
- ゲートウェイの外部ネットワークアドレスに正しいDNS解決レコードがあります
- LinuxゲートウェイはIPルーティングと転送を可能にします
④DNAT変換
1、发布内网的Web服务
#把从ens33进来的要访问web服务的数据包目的地址转换为 192.168.80.11
iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.1 -p tcp --dport 80 -j DNAT --to 192.168.80.11
或
iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.80.11
入站 外网网卡 外网IP 内网服务器IP
iptables -t nat -A PREROUTING -i ens33 -p tcp --dport 80 -j DNAT --to 192.168.80.11-192.168.80.20
-------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------
2、发布时修改目标端口
#发布局域网内部的OpenSSH服务器,外网主机需使用250端口进行连接
iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.1 -p tcp --dport 250 -j DNAT --to 192.168.80.11:22
#在外网环境中使用SSH测试
ssh -p 250 root@12.0.0.1
yum -y install net-tools #若没有 ifconfig 命令可提前使用 yum 进行安装
ifconfig ens33
⑤、小さな知識の拡大
- ホストベースのファイアウォール:主にINPUTチェーンとOUTPUTチェーンを使用し、通常、ルールを設定するときにポートを詳細に指定します
- ネットワークタイプファイアウォール:FORWARDチェーンが主に使用され、ルール設定時にポートが指定されることはめったにありません。通常、IPアドレスまたはネットワークセグメントを指定できます。
8.ファイアウォールルールのバックアップと復元
①、すべてのテーブルのエクスポート(バックアップ)ルール
iptables-save > /opt/ipt.txt
②。ルールのインポート(復元)
iptables-restore < /opt/ipt.txt
将iptables规则文件保存在 /etc/sysconfig/iptables 中,iptables服务启动时会自动还原规则
iptables-save > /etc/sysconfig/iptables
systemctl stop iptables #停止iptables服务会清空掉所有表的规则
systemctl start iptables #启动iptables服务会自动还原/etc/sysconfig/iptables 中的规则