iptablesの設定

iptablesはパケットフィルタによるファイアーウォール構築のプログラムです。
iptablesの設定のしかたを簡単に説明します。

iptablesのコマンドは/sbinの中に入っています。実行する際には
/sbin/iptables -P INPUT ACCEPT
等とします。

しかし、iptablesを設定したあと、再起動すると、また1から設定しなおさなければなりません。それではめんどうなので、
/etc/sysconfig/iptables
に保存することにより、設定がここから読み込まれることになります。

/etc/sysconfig/iptables に保存するには、
/sbin/service iptables save
又は、
/etc/init.d/iptables save
と実行します。
そうすると/etc/sysconfig/iptables が作成、もしくは上書きされます。

ちなみに、iptablesが自動起動されるようになっていないとだめです。RedHat7.3では、デフォルトで、ipchains、iptables両方が起動されるようになっています。両方起動した場合、反映されるのはipchainsのほうなので、ipchainsはサービスを停止させておきます。

くれぐれも、SSH等、リモートでiptablesを設定してて
/sbin/iptables -P INPUT DROP
としないように。瞬間フリーズです。


以下に記述例を紹介します。このファイルに設定した後は、必ず、ルートしか読めないようにパーミッションを設定します。


//////Debianの場合///////////////////////////////////////////

/etc/detault/iptables を編集
enable_autosave = false → true

セーブするには
/etc/init.d/iptables save active
すると、
/var/lib/iptables/active
ができる


#eth0 WAN側デバイス
#eth1 LAN側デバイス
 
 
iptables -F --------------------全てのチェインを初期化
iptables -F -t nat --------------------natテーブルを初期化
iptables -X --------------------ユーザー定義チェインを初期化
iptables -Z --------------------全てのカウンタを初期化
 
iptables -P INPUT DROP --------------------パケットの受信を拒否
iptables -P OUTPUT ACCEPT --------------------パケットの送信を許可
iptables -P FORWARD DROP --------------------パケットの転送を拒否
 
iptables -A INPUT -p ICMP -j ACCEPT -------------------ICMPパケットの着信を許可
iptables -A INPUT -i lo -j ACCEPT --------------------自分自身からの入力を許可
iptables -A INPUT -i eth1 -j ACCEPT --------------------LANからの入力を許可
iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT ------------ポート80をあける
iptables -A INPUT -i eth0 -p udp --sport 53 --dport 1024: -j ACCEPT ------------DNS問い合わせを許可
 
iptables -A INPUT -p tcp --dport 113 -i eth0 -j REJECT --reject-with tcp-reset
iptables -A OUTPUT -p tcp --sport 113 -i eth0 -j ACCEPT
#------------ポート113宛のパケットを拒否してTCP RSTパケットを返信
 
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE 
#-----------------WAN側から出て行くパケットに対し、IP変換を行う
 
iptables -A PREROUTING -t nat -p tcp -d 172.0.0.0 --dport 80 -j DNAT --to 192.168.0.10:80
iptables -A FORWARD -o eth0 -p tcp --sport 80 -j ACCEPT
iptables -A FORWARD -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
#-----------------WEBサーバー172.0.0.0宛を192.168.0.10に転送
 
iptables -t nat -A PREROUTING -p tcp -i eth1 --dport 135:139 -j DROP
iptables -t nat -A PREROUTING -p udp -i eth1 --dport 137:139 -j DROP
#-----------------NetBIOS系パケットの漏洩を防止
 
iptables -t nat -A PREROUTING -p tcp -i eth1 --dport 445 -j DROP
iptables -t nat -A PREROUTING -p udp -i eth1 --dport 445 -j DROP
#-----------------SMBパケットの漏洩を防止
 
iptables -A FORWARD -m state --state NEW,INVALID -i eth0 -j DROP
#-----------------内部に転送される接続開示パケットと不正なパケットを破棄
 

チェインの種類

INPUT 入力(受信)パケット
OUTPUT 出力(送信)パケット
FORWARD 転送パケット
PREROUTING 受信時に変換するチェイン
POSTROUTING 送信時に変換するチェイン

オプションの種類

-A ルールを追加
-D ルールを削除
-P ポリシーを追加
-X ユーザー定義チェインを削除
-N ユーザー定義チェインを作成
-Z 全てのチェインのパケットカウンタとバイトカウンタをゼロにする。

パラメーターの種類

-p プロトコルの指定
-s 送信元アドレス
-d 送信先アドレス
-i 着信元デバイス
-o 送信元デバイス
-j ルールに合致したときの処理
-t テーブルの指定
! 条件反転
--sport 送信元ポート 「-p tcp」を指定したときに使用
--dport 送信先ポート 「-p tcp」を指定したときに使用
--icmp-type ICMPのタイプを指定  「-p icmp」を指定したときに使用
DNAT 送信先アドレスを変換 natテーブルと PREROUTING、OUTPUTチェインで有効
SNAT 送信元アドレスを変換 natテーブルと POSTROUTINGチェインで有効
--to 変換対象アドレスDNAT、 SNATで使う
-m state ステータスの指定 「-m state --state」として使う
--syn フラグ指定

処理の種類

ACCEPT パケットの通過を許可
DROP パケットを破棄
REJECT パケットを拒否し、ICMPパケットを返信
REDIRECT 特定ポートにリダイレクト

ステータスの種類

NEW 新しいコネクションを開始するパケット
ESTABLISHED すでに確立している接続に属するパケット 応答パケット
RELATED エラー通知パケットなど
INVALID どの接続にも関連せず、接続を開始するものでもない不正なパケット
無効なパケット