iptables

更新日2017-08-12 (土) 17:33:09

ネットワーク、IPの追加

エイリアス等でネットワークやIPを追加するときは「iptables」でルールを決めた後に指定する必要がある。DROP当でその関係が拒否されると、ifconfig,route addも消えるようだ。

pptpパススルー

iptablesでは内部LANのpptpクライアントから外部のpptpサーバに接続するためのpptpパススルーがipマスカレードと併用して利用できる。しかし、Vine4.xではGREプロトコルを通すモジュール「ip_nat_pptp」をつけ加えなくてはいけない

構成図

-----------------         eth0:1----------        
|pptpクライアント|==============| GW     |
------------------        |eth0 |        |   
                          |     ----------       ------------    -------------
                          |======================|WAN       |====|pptpサーバ |
                                                 ------------    -------------

設定方法

# /sbin/ifconfig eth0:1 10.99.99.98
# /sbin/modprobe iptable_nat
# /sbin/modprobe ip_nat_pptp   <==このモジュール(pptpパススルー)が必要
# echo 1 > /proc/sys/net/ipv4/ip_forward
# /sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

スプーフィング対策としてカーネルパラメータのrp_filterを有効
送信アドレスの偽装を防ぐらしい。

# echo 1 >/proc/sys/net/ipv4/conf/eth1/rp_filter
# echo 1 >/proc/sys/net/ipv4/conf/eth0/rp_filter

確認

# /sbin/lsmod
Module                  Size  Used by
ipt_MASQUERADE          7680  1
ip_nat_pptp            10244  0
ip_conntrack_pptp      14736  1 ip_nat_pptp
iptable_nat            12036  1
ip_nat                 21548  3 ipt_MASQUERADE,ip_nat_pptp,iptable_nat
ip_tables              17108  1 iptable_nat
ip_conntrack           52568  5 ipt_MASQUERADE,ip_nat_pptp,ip_conntrack_pptp,iptable_nat,ip_nat
nfnetlink              10520  2 ip_nat,ip_conntrack
x_tables               16644  3 ipt_MASQUERADE,iptable_nat,ip_tables

(略)

ファイアウォール

Vine4.xでは、iptablesがファイアウォールとしてインストールされる。
設定は/etc/sysconfig/iptablesにあるのでそれを以下のように編集しiptablesを再起動すればOK

ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp  dpt:http
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:https  <==追加

しかしこれだけだとX上のユーティリティに反映されないので以下も変更しておく

/etc/sysconfig/system-config-securitylevel

# system-config-securitylevel config written out by anaconda

-f
--enabled
--port=22:tcp
--port=80:tcp
--port=443:tcp   <==追加
--port=25:tcp

環境

インストールするマシンは以下ようなネット接続で G/Wおよび、各種サーバ (WWW,Mail 等)として利用する
よって、ローカル側からはipマスカレードを利用しインターネットにアクセスしインターネット側からはローカルネットへのアクセス禁止とG/W内部へのアクセスも必要以外のポートを禁止する。

                              ---------
(インターネット)<------>(eth1)| G/W   |(eth0)<----->(ローカルネット) 
                              ---------

ipchainsの停止

ipchainsが動作しているときはこれを停止する

# /sbin/lsmod  (確認コマンド)

sis900                 11264   1 (autoclean)
ipchains               38976   0 (unused)
^^^^^^^^<-ipchainsが動作している
usb-uhci               20720   0 (unused)
# /sbin/rmmod ipchains  (停止コマンド)

起動時に動作させないようように

# /sbin/chkconfig --list (確認コマンド)

apmd            0:オフ  1:オフ  2:オン  3:オン  4:オン  5:オン  6:オフ
ipchains        0:オフ  1:オフ  2:オン  3:オン  4:オン  5:オン  6:オフ
                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^これをオフにする
iptables        0:オフ  1:オフ  2:オン  3:オン  4:オン  5:オン  6:オフ
identd          0:オフ  1:オフ  2:オフ  3:オフ  4:オフ  5:オフ  6:オフ
# /sbin/chkconfig --del ipchains (起動時起動しないようにする)

iptablesの起動および設定

以下のようなスクリプトを実行

#!/bin/sh
##nat用モジュールをロードする
/sbin/modprobe iptable_nat
echo 1 > /proc/sys/net/ipv4/ip_forward

##テーブルの条件を初期化する(ただしポリシーは変更できない)

テーブル名チェイン名
filterINPUT
OUTPUT
FORWARD
natOUTPUT
PREROUTING
POSTROUTING
チェイン名説明
INPUT受信したパケットに対するチェイン
OUTPUT送信したパケットに対するチェイン
FORWARD対象サーバを経由するパケットに対するチェイン
PREROUTING受信時にパケットのアドレス変換をするチェイン
POSTROUTING送信時にパケットのアドレス変換をするチェイン
# /sbin/iptables -t filter -F FORWARD  <--FORWARDの初期化
# /sbin/iptables -t filter -F INPUT    <--INPUTの初期化
# /sbin/iptables -t nat -F POSTROUTING <--POSTROUTINGの初期化

全ての初期化なら 

/sbin/iptables -F

でよい

##ipマスカレードの設定(LAN側[eth0]に別ネットワークがあった場合route addされているとマスカレードされないで元IPでその追加されたLAN側のネットワークにアクセスに行く)

/sbin/iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

(指定IPだけNAT: /sbin/iptables -t nat -A POSTROUTING -o eth1 -s 10.0.0.0/8 -j MASQUERADE)

注1)マスカレードの設定をしても、filterテーブルのFORWARDチェインのポリシーがDROPだと、パケットがforwardされない.

##ポリシーを決める(通過およびマシンが応答するパケットは基本的に禁止)

/sbin/iptables -t filter -P FORWARD DROP
/sbin/iptables -t filter -P INPUT DROP

## 確立しているコネクションのFORWARDを許可---(1)

/sbin/iptables -t filter -A FORWARD  -m state --state ESTABLISHED,RELATED -j ACCEPT

ESTABLISHED: このパケットは、過去双方向にパケットがやり取りされた接続に属するパケットである。
NEW: このパケットが新しい接続を開始したか、 双方向にはパケットがやり取りされていない接続に属するパケットである。 RELATED: このパケットが新しい接続を開始しているが、 FTP データ転送や ICMP エラーのように、既存の接続に関係している。 注)NEWを入れると、WAN側からも新しいも入ってくるので、WAN側からLAN側にも接続できるようになる.

## pingの通過および応答を許可

/sbin/iptables -t filter -A FORWARD -i eth0 -p icmp -j ACCEPT

(注1で一切パケットをWAN側に流さないのでicmpだけインターフェイスeth0(LAN)だけ 許可する。両方許可するとWANからもicmpが流れてくる) /sbin/iptables -t filter -A INPUT -i eth1 -p icmp -j ACCEPT

## DNS問い合わせの通過および応答を許可

/sbin/iptables -t filter -A FORWARD  -i eth0 -p udp --dport 53  -j ACCEPT
/sbin/iptables -t filter -A INPUT -i eth1 -p udp --dport 53  -j ACCEPT

## wwwの通過および応答を許可

/sbin/iptables -t filter -A FORWARD  -i eth0 -p tcp --dport 80  -j ACCEPT
/sbin/iptables -t filter -A INPUT  -i eth1 -p tcp --dport 80  -j ACCEPT

## POPの通過および応答を許可

/sbin/iptables -t filter -A FORWARD  -i eth0 -p tcp --dport 110 -j ACCEPT
/sbin/iptables -t filter -A INPUT  -i eth1 -p tcp --dport 110 -j ACCEPT

## SMTPの通過および応答を許可

/sbin/iptables -t filter -A FORWARD  -i eth0 -p tcp --dport 25  -j ACCEPT
/sbin/iptables -t filter -A INPUT  -i eth1 -p tcp --dport 25 -j ACCEPT

(全てをLAN側からのみ通過させるには[ipマスカレードを使用時:
マスカレード使用しないと戻りパケットがLAN側のみの場合は通過しない。また、
確立しているコネクションのFORWARDを許可(1)[SPI(ステートフルインスペクション)]を設定する必要がある]
/sbin/iptables -t filter -A FORWARD -i eth0 -j ACCEPT
とすればよい)

## ftp通信用モジュールのロード(FTPの通過および応答を許可)

/sbin/iptables -t filter -A FORWARD  -i eth0 -p tcp --dport 21  -j ACCEPT
/sbin/iptables -t filter -A INPUT -i eth1 -p tcp --dport 21  -j ACCEPT
/sbin/modprobe ip_nat_ftp
/sbin/modprobe ip_conntrack_ftp

注)
filterで自分自身を許可する場合は自分のIPではなく127.0.0.1でしか有効にならない場合もあるようだ。

IPファイルタ

条件の追加
ポリシはすべてACCEPT、ポート21を192.168.10.0/24以外からのアクセスを拒否

# /sbin/iptables -A INPUT -p tcp --dport 21 -s ! 192.168.10.0/24 -j DROP

設定状況の表示

# /sbin/iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
DROP       tcp  -- !192.168.10.0/24      anywhere           tcp dpt:ftp

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

NATの表示は

# /sbin/iptables -t nat -n -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
MASQUERADE  all  --  0.0.0.0/0            0.0.0.0/0

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

許可するアドレスが1つしか設定できないので許可するアドレスを羅列して その後それ以外を拒否

全てを拒否

# /sbin/iptables -A INPUT -p tcp --dport 21 -s 0.0.0.0/0 -j DROP
# /sbin/iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
DROP       tcp  --  anywhere             anywhere           tcp dpt:ftp

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

許可するアドレスを追加
DROPより先に追加する必要があるので、-I INPUT 1(<=1行目に追加の意味)

# /sbin/iptables -I INPUT 1 -p tcp --dport 21 -s 192.168.10.24 -j ACCEPT
                ^^^^^^^^^^^順番に注意(チェイン名の後にNoを指定)
# /sbin/iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     tcp  --  192.168.10.24        anywhere           tcp dpt:ftp
DROP       tcp  --  anywhere             anywhere           tcp dpt:ftp

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

設定の削除

条件の指定

# /sbin/iptables -D INPUT -p tcp --dport 21 -s 192.168.10.24 -j ACCEPT

行数の指定

# /sbin/iptables -D INPUT 2

Logの表示

/sbin/iptables -I INPUT 1 -j LOG --log-prefix "iptables_log: "

/var/messagesにiptables_log:の文字列とともにlogがとれる
ただし、入力されるパケットが全て記録されるので、デバッグ以外使用しないほうが
いいかも?これも1行目であれば全て記録するが、適用な行のときはその行の以前に
適用されたルールは記録されない。

うまくいったら、/etc/rc.d/rc.localにでも書けばOK

または、

# /sbin/service iptables save

/etc/sysconfig/iptablesに保存される
/etc/sysconfig/iptables
*filter <---(1)
:INPUT ACCEPT [325:26749]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [306:44475]
[0:0] -A INPUT -s ! 192.168.10.0/255.255.255.0 -p tcp -m tcp --dport 21 -j DROP
^^^^^^^^^^^保存された内容
COMMIT

(1)は-tオプションで指定されるテーブルで、filter,nat,mangleがある。デフォルトは
filterで,
filter: INPUT,OUTPUT,FORWARDがある
nat:このテーブルは新しい接続を開くようなパケットに対して参照される。
  PREROUTING, OUTPUT がある
mangle: このテーブルは特別なパケット変換に使われる。
詳しくはman参照。

/sbin/service iptables saveでsaveしてもよいが
直接編集しても良い。
[0:0]部分はなくても動作するようだ
編集後

/etc/rc.d/init.d/iptables restart

でiptablesを再起動


元ページ

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS