論理的に言えば。ファイアウォールは、ホストファイアウォールとネットワークファイアウォールに大別できます。
ホストファイアウォール:単一のホストから保護します。
ネットワークファイアウォール:多くの場合、ネットワークの入り口またはエッジで、ネットワークの入り口から保護し、ファイアウォールの背後にあるローカルLANにサービスを提供します。
ネットワークファイアウォールとホストファイアウォールの競合はなく、ネットワークファイアウォールは主に外部(集合)であり、ホストファイアウォールは主に内部(個別)であることがわかります。
物理的に言えば、ファイアウォールはハードウェアファイアウォールとソフトウェアファイアウォールに分けることができます。
ハードウェアファイアウォール:ファイアウォール機能の一部はハードウェアレベルで実装され、他の部分はソフトウェアに基づいて実装され、高性能で高コストです。
ソフトウェアファイアウォール:一般的なハードウェアプラットフォームで実行されるアプリケーションソフトウェア処理ロジックを備えたファイアウォールで、パフォーマンスとコストが低くなります。
DNAT:宛先ネットワークアドレス変換は、ネットワークパケットの宛先IPアドレスを変更することです。
送信元IPアドレスを変更する目的は、通常、このパケットが自分自身に戻ることを可能にすることです。そのため、iptablesでは、SNATが出口にあります。つまり、POSTROUTING
チェーンが役割を果たします。
宛先IPアドレスを変更する理由は、通常、パケットの宛先を変更して、パケットをそのまま残すのでPREROUTING
はなく放出させるためです。したがって、iptablesでは、DNATは入口、つまりチェーンで役割を果たし、パケットがFORWARD
テーブルに入るようにします。
iptablesは実際には実際のファイアウォールではありません。クライアントプロキシとして理解できます。ユーザーはiptablesプロキシを介して、ユーザーのセキュリティ設定は対応する「セキュリティフレームワーク」に実装されます。この「セキュリティフレームワーク」は実際のファイアウォールです、このフレームワークの名前はnetfilterです。
Netfilterはファイアウォールの真のセキュリティフレームワークであり、カーネルスペースにあります。
iptablesは実際にはコマンドラインツールであり、ユーザー空間にあります。このツールを使用して、実際のフレームワークを操作します。
Netfilter / iptables(以下、iptablesと呼びます)は、Linuxプラットフォームでパケットフィルタリングファイアウォールを形成します。ほとんどのLinuxソフトウェアと同様に、このパケットフィルタリングファイアウォールは無料で、高価な商用ファイアウォールソリューションに取って代わり、完全なパケットフィルタリングを行うことができます。リダイレクトやネットワークアドレス変換(NAT)などの機能
Netfilterは、Linuxオペレーティングシステムのコアレイヤー内のパケット処理モジュールで、次の機能を備えています。
ネットワークアドレス変換(Network Address Translate)、パケットコンテンツの変更、パケットフィルタリングファイアウォール機能
したがって、サービスiptables startを使用してiptables "services"を開始しますが、実際には、iptablesにはデーモンプロセスがないため、実際のサービスではなく、カーネルによって提供される関数である必要があります。
iptablesはルールに従って動作することがわかっています。ルールについて話しましょう。ルールは実際にはネットワーク管理者によって事前に定義された条件です。ルールは通常、「パケットヘッダーがこのような条件を満たす場合、このようにデータを処理します。パッケージ "。ルールは、カーネルスペースのパケットフィルタリングテーブルに格納されます。これらのルールは、送信元アドレス、宛先アドレス、伝送プロトコル(TCP、UDP、ICMPなど)、およびサービスタイプ(HTTP、FTP、SMTPなど)を指定します。データパケットがルールに一致すると、iptablesは、受け入れ、拒否、ドロップなどのルールで定義された方法に従ってデータパケットを処理します。ファイアウォールを設定する主な仕事は、これらのルールを追加、変更、削除することです。
詳細:
このマシンのプロセスへのメッセージ:PREROUTING-> INPUT
このマシンによって転送されたメッセージ:PREROUTING-> FORWARD-> POSTROUTING
メッセージ(通常は応答メッセージ)がマシン上のプロセスによって送信されます:OUTPUT-> POSTROUTING
PREROUTINGのルールは、rawテーブル、mangleテーブル、natテーブルに存在できます。
INPUTのルールは、mangleテーブル、filterテーブルに存在できます(centos6ではなく、centos7にもnatテーブルがあります)。
FORWARDルールは、マングルテーブル、フィルターテーブルに存在できます。
OUTPUTルールは次の場所に存在できます:rawテーブルmangleテーブル、natテーブル、filterテーブル。
POSTROUTINGルールは、mangleテーブル、natテーブルに存在できます。
未加工テーブルのルールは、チェーン:PREROUTING、OUTPUTで使用できます。
マングルテーブルのルールを使用できるチェーン:PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING
natテーブルのルールを使用できるチェーン:PREROUTING、OUTPUT、POSTROUTING(centos6ではなくcentos7にもINPUTがあります)
フィルターテーブルのルールは、チェーンINPUT、FORWARD、OUTPUTで使用できます。
ACCEPT:允许数据包通过。
DROP:直接丢弃数据包,不给任何回应信息,这时候客户端会感觉自己的请求泥牛入海了,过了超时时间才会有反应。
REJECT:拒绝数据包通过,必要时会给数据发送端一个响应的信息,客户端刚请求就会收到拒绝的信息。
SNAT:源地址转换,解决内网用户用同一个公网地址上网的问题。
MASQUERADE:是SNAT的一种特殊形式,适用于动态的、临时会变的ip上。
DNAT:目标地址转换。
REDIRECT:在本机做端口映射。
LOG:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则,也就是说除了记录以外不对数据包做任何其他操作,仍然让下一条规则去匹配。
iptablesコマンドの構文規則
iptables [-tテーブル]コマンド[チェーン]クレティリア-jアクション
-tテーブル、操作テーブルを参照、フィルター、nat、マングル、またはraw、フィルターはデフォルトで使用されます
コマンド、サブコマンド、ルールの管理を定義します
チェーン、リンクを示す
クレティリア、一致条件または基準
アクション、操作アクション、上記のコードセグメントの内容を参照してください
たとえば、10.8.0.0 / 16ネットワークはポート80 / tcpにアクセスできません。
iptables -A INPUT -s 10.8.0.0/16 -d 172.16.55.7 -p tcp --dport 80 -j DROP
iptablesリストを表示
iptables -nL
チェーン管理
-N、--new-chain chain:新しいカスタムチェーンを作成します。
-X、--delete-chain [chain]:参照カウントが0のユーザー定義の空のチェーンを削除します。
-F、--flush [chain]:指定されたルールチェーンのルールをクリアします。
-E、--rename-chain old-chain new-chain:チェーンの名前を変更します。
-Z、--zero [chain [rulenum]]:ゼロカウンター;
-P、-policyチェーンターゲット、リンクのデフォルトポリシーを設定
ルール管理
-A、--append chain rule-specification:指定したチェーンの最後に新しいルールを追加します。
-I、--insert chain [rulenum] rule-specification:指定されたチェーンの指定された位置に新しいルールを挿入します。デフォルトはヘッダーです。
-R、--replace chain rulenum rule-specification:指定されたルールを新しいルールで置き換えます。
-D、--delete chain rulenum:ルール番号に従ってルールを削除します。
ルールを表示
-L、--list [chain]:ルールをリストします。
-v、-verbose:詳細情報。
-vv、-vvvの詳細情報
-n、-numeric:ホストアドレスとポート番号をデジタル形式で表示します。
-x、--exact:カウンターの正確な値を表示します。
--line-numbers:ルールを一覧表示するときに、チェーン上の対応する番号を表示します。
-S、--list-rules [chain]:指定されたチェーンのすべてのルールを表示します。
ルールの一般的な内容を表示します。
一致条件
一致条件には、一般的な一致条件と拡張一致条件があります。
一般的な一致条件は、単一のソースIP、単一のソースポート、単一のターゲットIP、単一のターゲットポート、ネットワークカード、およびデータパケットが流れるプロトコルを含む、ソースアドレスとターゲットアドレスの一致を指します。
拡張一致条件とは、一般的な一致以外の一致条件を指します。
一般的な一致条件
[!] -s、--source address [/ mask] [、...]:パケットの送信元IPアドレスがここで指定された範囲に適合しているか、またはここで指定されたアドレスと等しいかどうかを確認します。
[!] -d、--destination address [/ mask] [、...]:パケットの宛先IPアドレスが、ここで指定された範囲に適合しているか、またはここで指定されたアドレスと等しいかどうかを確認します。
[!] -p、--protocol protocol:メッセージ内のプロトコルに一致します。使用可能な値はtcp、udp、udplite、icmp、icmpv6、esp、ah、sctp、mh、または「all」であり、プロトコルは数値形式でも指定できます;
[ !] -i、--in-interface name:INPUT、FORWARD、PREROUTINGチェーンに入るパケットのみ。
[!] -o、--out-interface name:制限されたパケットは、指定されたインターフェースからのみ流出できます; FORWARD、OUTPUTおよびPOSTROUTINGチェーンに入るパケットの場合。
拡張一致条件
- 暗黙的に拡張された一致条件
-p tcp:tcp拡張モジュールの特別なオプションを直接使用できます;
[!] --source-port、--sport port [:port]はメッセージの送信元ポートと一致します;複数のポートを指定できますが、それらは連続することしかできませんポートの範囲 。
[!] --destination-port、-dport port [:port]は、メッセージの宛先ポートと一致します。複数のポートを指定できますが、連続した範囲のポートのみです。
[!] --tcp-flags mask compは、パケット内のtcpプロトコルフラグと一致します。フラグは次のとおりです:SYN ACK FIN RST URG PSH ALL NONE;
マスク:確認するフラグリスト、カンマで区切られる;
comp:マスク指定された多くのFLAGSのうち、FLAGSの値は1で、残りの値は0でなければなりません。
[!] --syn:--tcp-flags SYN、ACK、FIN、RST SYN
-p udp:udpプロトコル拡張モジュールの特別なオプションを直接使用できます。
[!] --source-port、-スポーツポート[:ポート]
[!] --destination-port、-dport port [:port]
-p icmp
[!] --icmp-type {type [/ code] | typename}
0/0:エコー応答
8/0:エコーリクエスト
- 一致条件を明示的に展開する
拡張マッチングのタイプを指定するには 、-mオプションを使用する必要があります。一般的なものは次のとおりです。
マルチポート
最大15までの離散的または連続的な方法でマルチポート一致条件を定義します;
[!] --Source-ports、--sports port [、port |、port:port] ...:複数の送信元ポートを指定します。
[!] --destination-ports、-dports port [、port |、port:port] ...:複数の宛先ポートを指定します。
iptables -I INPUT -d 172.16.0.7 -p tcp -m multiport --dports 22,80,139,445,3306 -j ACCEPT
iprange
複数のIPアドレスの一致条件を連続したアドレスブロックの形式で指定します。
[!] --src-range from [-to]
[!] --dst-range from [-to]
#iptables -I INPUT -d 172.16.0.7 -p tcp -m multiport --dports 22,80,139,445,3306 -m iprange --src-range 172.16.0.61-172.16.0.70 -j REJECT
時間
パケット到着時間と一致
--timestart hh:mm [:ss]
--timestop hh:mm [:ss]
[!]-平日日[、日...]
[!]-月間日[、日...]
--datestart YYYY [-MM [-DD [Thh [:mm [:ss]]]]]]
--datestop YYYY [-MM [-DD [Thh [:mm [:ss]]]]]]
--kerneltz:デフォルトのUTCの代わりにカーネルによって構成されたタイムゾーンを使用します;
文字列
はパケット内の文字と一致します
--algo {bm | kmp}
[!]-文字列パターン
[!] --hex-string pattern
--from offset
-オフセットします
〜]#iptables -I OUTPUT -m string --algo bm --string "gay" -j REJECT
connlimitは
、同じIPで確立できる接続の数を制限するために使用されます
-connlimit-upto n
--connlimit-above n
〜]#iptables -I INPUT -d 172.16.0.7 -p tcp --syn --dport 22 -m connlimit --connlimit-above 2 -j REJECT
limit
は、データパケットの送受信レートを制限します- 制限
レート[/秒| /分| /時間| /日]
-限界バースト数
〜]#iptables -I OUTPUT -s 172.16.0.7 -p icmp --icmp-type 0 -j ACCEPT
状態は
パケットの送受信の状態を制限します
[!] --state state
INVALID、ESTABLISHED、NEW、RELATEDまたはUNTRACKED。NEW
:新しい接続要求。
ESTABLISHED:確立された接続。
INVALID:認識されない接続。
関連:関連付けられた接続。現在の接続は新しい要求ですが、既存の接続にアタッチされています。
UNTRACKED:追跡されていない接続、
状態の拡張:
カーネルモジュールの読み込み:
nf_conntrack
nf_conntrack_ipv4
手動読み込み:
nf_conntrack_ftp
追跡された接続:
/ proc / net / nf_conntrack
記録できる接続の最大数を調整します:
/ proc / sys / net / nf_conntrack_max
タイムアウト期間:
/ proc / sys / net / netfilter / *タイムアウト*
参照リンク: SNATとDNATの違い