iptablesに関する世界観です。
ファイアーウォール(パケットフィルタリング)やNAT(ルーティングやアドレス変換)として通信の許可とブロックを行うための、Linuxのネットワーク設定(Netfilter)を設定する技術。過去のLinux(CentOS 6など)で使われる。
IPv4用は/etc/iptables/iptables.rulesに、IPv6用は/etc/iptables/ip6tables.rulesに設定ファイルがある。
後日注記:従来のsysconfigの場合、設定ファイルは/etc/sysconfig/iptablesにある。
基本的に、以下のテーブルを使い、サーバに入ってくるパケットや出ていくパケットに対して、遮断・許可を行うフィルターを記述します。
テーブル | 意味 |
---|---|
テーブル | filter(パケットの通過と遮断) nat(NAT、パケットの送信元・送信先の書き換え) mangle(Quality of Service、Type of Serviceなどの設定) |
コマンド | -F(全フィルタテーブルの消去) -X(デフォルト以外のチェインを全て消去) -A(ルールを追加) -D(ルールを消去) -P(ポリシーを設定) -N(ユーザー定義チェイン) |
チェイン | INPUT(外部から入るパケット) OUTPUT(外部へと出るパケット) FORWARD(経由するパケット) PREROUTING(受信時にアドレスを変換) POSTROUTING(送信時にアドレスを変換) |
パラメータ | -s(送信元IPアドレス) -d(送信先IPアドレス) -p(プロトコル) -i(入るインターフェイス名、たとえばeth0) -o(出るインターフェイス名) -j(ターゲット) --sport(送信元ポート番号) --dport(宛先ポート番号) |
ターゲット (-jで指定する) | DROP(遮断) ACCEPT(許可) REJECT(遮断してメッセージ送信) LOG(ログに記録) REDIRECT(別のポートにリダイレクト) |
(上記の表は【丁寧解説】Linuxファイアウォール iptablesの使い方 - エンジニアの入り口からの引用です。)
たとえば以下のようになる(80番ポートを開放)。
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
詳しくは以下のページが参考になります。
ファイアウォールの設定では、基本的に「全部遮断した上で必要なルールだけ許可する」というやり方を行う。
ルールの削除には、-Dオプションの後にルール番号を指定する。
iptables -D INPUT 2
これで、ルール番号が2のINPUTルールを削除できる。
あるいは、実際にルールを記述することでもルールを削除できる。
iptables -D INPUT -p tcp --dport 80 -j ACCEPT
-Lオプションで、現在設定されている設定の一覧が表示できる。
# iptables -L
設定の保存は、iptables-saveコマンドを使う。
# iptables-save > /etc/sysconfig/iptables
設定の読み込みは、iptables-restoreコマンドを使う。
# iptables-restore < /etc/sysconfig/iptables
(10日でおぼえるFedora Core 6サーバ構築・管理入門教室を参考に執筆しました。)
2023.05.06
パケットフィルタリングで-sと-dを使うことで、「どのアドレスからやってきた(-s)どのアドレスへと向かっていく(-d)パケットをフィルタリングするか」を指定できる。
その上で-j ACCEPTなどとして通信を許可する。--dportはポート番号を指定する。また-pにはプロトコルを指定する(多くの場合tcp)。
ルーティングの設定はPREROUTING(DNAT)とPOSTROUTING(SNAT)で行う。パケットフィルタリングの設定はINPUT, OUTPUT, FORWARDで行う。
基本的に、ルーティングが行われた後で、パケットフィルタリングが行われる。
(iptablesの基本的な使い方 - Qiitaを参考に執筆しました。)
かつてのインターネットでは、ホストの数がとても少なかったので、全員にグローバルアドレスを与えるようなことができたが、今の無数にホストの増えたネットワークではそうはいかない。
グローバルアドレスを全員に与えていると限りがあるため、家庭内のネットワークではプライベートアドレスを用いる。
NATは、このような時に、グローバルアドレスとプライベートアドレスを変換する。
SNATは、プライベートアドレスから発生したグローバルアドレスへの通信で、送信元アドレスを変換する。これに対してDNATは、グローバルアドレスから発生したプライベートアドレスへの通信で、送信先アドレスを変換する。
SNATを使うと、家庭内のネットワークから、外部のネットワークにあるサービスにアクセスできる。
また、DNATを使うと、自分のアドレスを外部に公開し、グローバルアドレスからアクセスしてきたサーバーの利用者に対して、ルーティングを行うことができる。
(NAT と SNAT と DNAT - 隙あらば寝るを参考に執筆しました。)
IPマスカレードとは、動的に割り当てられるポート番号を使ってグローバルアドレスひとつに複数のプライベートアドレスを対応付ける機能。
複数台のマシンがひとつのグローバルアドレスからインターネットに接続できるようになる。
別名は「NAPT」。NAPTのことをLinuxではIPマスカレードと呼ぶ。
2024.02.07
TCPWrapperから読み込まれる、自分自身へのアクセス制御を行うための設定ファイルとして、アクセス許可を行う/etc/hosts.allowとアクセス拒否を行う/etc/hosts.denyがある。
2024.02.07編集
IPv6の場合、iptablesの代わりのコマンドとして、ip6tables、ip6tables-save、ip6tables-restoreを使います。
Linux ファイアウォールを参照のこと。