iptablesをマスターするには時間がかかるものの、セキュリティに関する基本的なニーズを満たすことのできるいくつかのルールを知っておくだけで、あなたのLinuxシステムのセキュリティを向上させることができる。本記事では、その手始めとなる重要なルールを解説する。
iptablesは、Linuxマシンをセキュアにするための強力なツールだ。とは言うものの、その機能の多さには圧倒されてしまいがちである。そして、コマンドの構造をしっかりと理解し、マシンのどの部分をどのようにセキュアにすべきかを把握した後であっても、ややこしいことに変わりはない。しかし、iptablesの良いところは、極めて広いその適用範囲にある。このため、iptablesのルールのいくつかをスクリプトにまとめておくことで、管理作業をずっと容易にすることができるのだ。
こういったことを念頭に置き、コマンドを10個見ていくことにしよう。これらのルールのいくつかはサーバマシン向けのものとなっており、その他のものはデスクトップマシン向けのものとなっている。本記事では、iptablesで使用できるすべてのコマンドやパラメータを網羅的に解説するのではなく、いくつかのルールに的を絞り、それが行うことを解説しようとしている。このため、特定のルールについての詳細や、コマンドやパラメータの全体像を知るには、iptablesのmanページを参照してほしい。
#1:iptables -A INPUT -p tcp --syn -j DROP
これはデスクトップマシン向けのルールであり、次の2つのことを行うものである。まず、この指定によってデスクトップマシンとしての運用が可能になる。あなたのマシンから出ていくネットワークトラフィックには一切影響が及ばないものの、あなたのマシンに入ってくるすべてのTCP/IPトラフィックはそのままドロップされるのだ。この指定によって、トラフィックを受け付ける必要のないLinuxデスクトップのセキュリティは強固なものになるわけだ。では、リモート管理を行うためにssh(セキュアシェル)を使用したいというニーズがあり、特定のネットワークトラフィックを受け付ける必要がある場合にはどうすればよいのだろうか?こういった設定を行う場合、iptablesに該当サービスのルールを追加し、入ってくるトラフィックすべてをドロップするルールの前に、それが実行されるようにしておく必要がある。
#2:iptables -A INPUT -p tcp --syn --destination-port 22 -j ACCEPT
では最初のコマンドをベースにしてルールを追加していくことにしよう。ポート22(セキュアシェル)へのトラフィックを許可するには、この行を追加することになる。この行を指定することによって、ポート22に入ってくるトラフィックがすべて許可されるようになるわけだ。ただし、こういった指定だけでは完璧なセキュリティ設定とは言えない。よりセキュアな設定にするには、このマシンのポート22に実際に接続できるマシンを指定しておくのがよいだろう。幸いなことに、こういったこともiptablesを使って実現することができる。接続元マシンのIPアドレスが判っているのであれば、「-s SOURCE_ADDRESS」指定(ただしSOURCE_ADDRESSは接続元マシンの実IPアドレス)を「--destination-port」指定の直前に追加することができる。