iptablesを設定する

2006.09.17 初稿

iptables設定

以下の作業はすべてrootで行う。
 # cd /etc/init.d
 # vi iptables.sh (内容は別途)
 ちなみに /etc/init.d/iptables というのが既に存在するが使い方良くわかってないので無視(^^;)
 # chmod 755 iptables.sh
 # ./iptables.sh
 設定が間違っていたりすると、ここで通信不能になる場合がある。
 # iptables -L
 内容を確認する。
 /var/log/syslogの内容を確認しながら、設定に問題ないかを検証する。
 起動時に自動で動くようにする。
 ここはiptables.shで問題ないという確認が十分にできてから行うこと。
 # cd /etc/rcS.d
 # ln -s ../init.d/iptables.sh S99iptables.sh
 これで自動起動するようになる。ちなみに辞めたいときは頭S以外で始まるファイル名にするか削除する。拡張子.bakとかじゃだめ。
 また、今後設定を変えるときには、iptables.shを直接書き換えると危険なので別ファイルで確認してから更新すること。

/etc/init.d/iptables.sh 作りかけの例
#!/bin/sh

# (参考)http://www.atmarkit.co.jp/flinux/rensai/iptables01/iptables01f.html
#
# ・外部からの接続パケットは基本的にすべて破棄
#  ただし接続済み通信のパケットは許可
# ・内部からの接続パケットは基本的にすべて許可
# ・ループバックアドレスに関してはすべて許可
# ・一部のホストからのping, ssh, telnet, www, samba を許可
#  ただし接続の最初時にSYNで始まらない接続パケットは破棄


KUROBOX='192.168.0.100'

HOST1='192.168.0.101'
HOST2='192.168.0.102'
HOST3='192.168.0.103'
HOST4='192.168.2.1'
HOST5='192.168.2.2'
ANY='0.0.0.0/0'

ACCEPT_ICMP="   $KUROBOX    $HOST1  $HOST2  $HOST3"
ACCEPT_SSH="    $KUROBOX    $HOST1  $HOST2  $HOST3"
ACCEPT_TELNET=" $KUROBOX    $HOST1"
ACCEPT_WWW="    $KUROBOX    $HOST1"
ACCEPT_SAMBA="  $KUROBOX    $HOST1  $HOST2  $HOST3"

#
# Flush & Reset
#
iptables -F
iptables -X

#
# Deafult Rule
#
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
#iptables -P OUTPUT DROP
#iptables -P FORWARD DROP
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

#
# loopback
#
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT


#
# ICMP
#
for HOST in $ACCEPT_ICMP
do
    iptables -A INPUT -p icmp --icmp-type echo-request -s $HOST -d $KUROBOX -j ACCEPT
    iptables -A OUTPUT -p icmp --icmp-type echo-reply  -s $KUROBOX -d $HOST -j ACCEPT

    iptables -A OUTPUT -p icmp --icmp-type echo-request -s $KUROBOX -d $HOST -j ACCEPT
    iptables -A INPUT -p icmp --icmp-type echo-reply -s $HOST -d $KUROBOX -j ACCEPT
done


#
# ssh
#
for HOST in $ACCEPT_SSH
do
    iptables -A INPUT -p tcp -m state --state NEW,ESTABLISHED,RELATED -s $HOST -d $KUROBOX --dport 22 -j ACCEPT
    iptables -A OUTPUT -p tcp -s $KUROBOX --sport 22 -d $HOST -j ACCEPT
done


#
# telnet
#
for HOST in $ACCEPT_TELNET
do
    iptables -A INPUT -p tcp -m state --state NEW,ESTABLISHED,RELATED -s $HOST -d $KUROBOX --dport 23 -j ACCEPT
    iptables -A OUTPUT -p tcp -s $KUROBOX --sport 23 -d $HOST -j ACCEPT
done


#
# www
#
for HOST in $ACCEPT_WWW
do
    iptables -A INPUT -p tcp -m state --state NEW,ESTABLISHED,RELATED -s $HOST -d $KUROBOX --dport 80 -j ACCEPT
    iptables -A OUTPUT -p tcp -s $KUROBOX --sport 80 -d $HOST -j ACCEPT
done


#
# samba
#
for HOST in $ACCEPT_SAMBA
do
    iptables -A INPUT -p tcp -s $HOST -d $KUROBOX --dport 137:139 -j ACCEPT
    iptables -A INPUT -p tcp -s $HOST -d $KUROBOX --dport 445 -j ACCEPT
    iptables -A INPUT -p udp -s $HOST --dport 137:139 -j ACCEPT
    iptables -A INPUT -p udp -s $HOST --dport 445 -j ACCEPT
    iptables -A OUTPUT -p tcp -s $KUROBOX --sport 137:139 -d $HOST -j ACCEPT
    iptables -A OUTPUT -p tcp -s $KUROBOX --sport 445 -d $HOST -j ACCEPT
    iptables -A OUTPUT -p udp -s $KUROBOX --sport 137:139 -j ACCEPT
    iptables -A OUTPUT -p udp -s $KUROBOX --sport 445 -j ACCEPT
done

#
# logging
#
iptables -N LOGGING
iptables -A LOGGING -j LOG --log-level warning --log-prefix "DROP:" -m limit
iptables -A LOGGING -j DROP
iptables -A INPUT -j LOGGING
iptables -A OUTPUT -j LOGGING


戻る