アットウィキロゴ
 
#! /bin/sh

# 外部メンテナンスホスト
MAINT='xxx.xxx.xxx.xxx'
# 内部ネットワーク
HOME='192.168.0.0/24'

# Linuxルータの外部ネット側アドレス
FW_OUT='yyy.yyy.yyy.yyy'
# Linuxルータの内部ネット側アドレス
FW_IN='192.168.0.1'

# FW内サーバ
# WEB
http_ip='127.0.0.1'
http_port='80'
https_ip='127.0.0.1'
https_port='443'
# MAIL
smtp_ip='192.168.0.2'
smtp_port='25'
pop3_ip='192.168.0.2'
pop3_port='110'

#IPパケットのフォワード(転送)
echo 1 > /proc/sys/net/ipv4/ip_forward

############################
# Flush & Reset
############################
#iptablesの初期化
iptables -F
iptables -t nat -F
iptables -X

############################
# Deafult Rule
############################
#default deny
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

#内部ネットから外部ネットへの接続は無制限
iptables -A FORWARD -i eth1 -o eth0 -s $HOME -j ACCEPT

############################
# loopback
############################
#ループバックアドレスに関してはすべて許可
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

#######################
# ICMP(ping)
#######################
iptables -A INPUT  -p icmp --icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT  -p icmp --icmp-type echo-reply -j ACCEPT

#######################
# FTP(20,21)
#######################
# 外部FTPサーバへのアクセス(Active/Passive)を許可
iptables -A OUTPUT -p tcp -m state --state NEW --dport 21 -j ACCEPT
iptables -A INPUT  -p tcp -m state --state NEW --sport 20 -j ACCEPT

#######################
# SSH(22)
#######################
# MAINT-> myhost
# 外部メンテナンスホストからのssh(TCP 22)を許可
iptables -A INPUT -p tcp -m state --state NEW -s $MAINT -d $FW_OUT --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp -m state --state NEW -s $FW_OUT --sport 22 -d $MAINT -j ACCEPT
#----------------------
# 家庭内でのSSH(22)の使用を許可
iptables -A INPUT  -p tcp -m state --state NEW -s $HOME --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp -m state --state NEW -d $HOME --dport 22 -j ACCEPT

#######################
# DNS(53)
#######################
### DNSサーバからの外部DNS問い合わせを許可 ###
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT  -p udp --sport 53 -j ACCEPT
iptables -A OUTPUT -p tcp -m state --state NEW --dport 53 -j ACCEPT
#家庭内からのDNS問い合わせを許可
iptables -A INPUT  -p udp -s $HOME --dport 53 -j ACCEPT
iptables -A OUTPUT -p udp -d $HOME --sport 53 -j ACCEPT
iptables -A INPUT  -p tcp -m state --state NEW -s $HOME --dport 53 -j ACCEPT

#######################
# SAMBA(137,138,139)
#######################
# MAINT-> myhost
# 外部メンテナンスホストからのファイル共有(NetBIOS)SAMBAを許可
iptables -A INPUT  -p udp -s $MAINT --dport 137:138 -j ACCEPT
iptables -A OUTPUT -p udp -d $MAINT --sport 137:138 -j ACCEPT
iptables -A INPUT  -p tcp -m state --state NEW -s $MAINT --dport 139 -j ACCEPT
#環境によっては、445番を開ける必要あり
#iptables -A INPUT  -p tcp -m state --state NEW -s $MAINT --dport 445 -j ACCEPT
#----------------------
#家庭内でのファイル共有(NetBIOS)SAMBAを許可
iptables -A INPUT  -p udp -s $HOME --dport 137:138 -j ACCEPT
iptables -A OUTPUT -p udp -d $HOME --sport 137:138 -j ACCEPT
iptables -A INPUT  -p tcp -m state --state NEW -s $HOME --dport 139 -j ACCEPT
#環境によっては、445番を開ける必要あり
#iptables -A INPUT  -p tcp -m state --state NEW -s $HOME --dport 445 -j ACCEPT

#######################
# WWW(HTTP:80,HTTPS:443)
#######################
# WWWサーバへのアクセス(HTTP:80,HTTPS:443)を許可
iptables -A INPUT -p tcp -m state --state NEW --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW --dport 443 -j ACCEPT
iptables -A OUTPUT -p tcp -m state --state NEW --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp -m state --state NEW --dport 443 -j ACCEPT

#iptables -A INPUT -p tcp -m state --state NEW -s $MAINT -d $FW_OUT --dport 8080 -j ACCEPT
#iptables -A OUTPUT -p tcp -m state --state NEW -s $FW_OUT --sport 8080 -d $MAINT -j ACCEPT
#iptables -A INPUT -p tcp -m state --state NEW --dport 8080 -j ACCEPT
#iptables -A OUTPUT -p tcp -m state --state NEW --dport 8080 -j ACCEPT

### セッション確立後のパケット疎通は許可
iptables -A INPUT  -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

##############################################

#######################
#DNAT(HTTP)
#######################
#iptables -t nat -A PREROUTING -p tcp -i eth0 -d $FW_OUT --dport 80 -j DNAT --to-destination $http_ip:$http_port
#iptables -A FORWARD -i eth0 -o eth1 -p tcp -d $http_ip --dport $http_port -j ACCEPT
#################
#DNAT(HTTPS)
#################
#iptables -t nat -A PREROUTING -p tcp -i eth0 -d $FW_OUT --dport 443 -j DNAT --to-destination $https_ip:$https_port
#iptables -A FORWARD -i eth0 -o eth1 -p tcp -d $https_ip --dport $https_port -j ACCEPT
#################
#DNAT(SMTP)
#################
iptables -t nat -A PREROUTING -p tcp -i eth0 -d $FW_OUT --dport $smtp_port -j DNAT --to-destination $smtp_ip:$smtp_port
iptables -A FORWARD -i eth0 -o eth1 -p tcp -d $smtp_ip --dport $smtp_port -j ACCEPT
#################
#DNAT(POP3)
#################
iptables -t nat -A PREROUTING -p tcp -i eth0 -d $FW_OUT --dport $pop3_port -j DNAT --to-destination $pop3_ip:$pop3_port
iptables -A FORWARD -i eth0 -o eth1 -p tcp -d $pop3_ip --dport $pop3_port -j ACCEPT

#################
#SNAT(masquerade)
#################
iptables -t nat -A POSTROUTING -o eth0 -s $HOME -j MASQUERADE

################################################
#Outgoing packet should be real internet Address
################################################
#内部アドレスやプライベートアドレスが外部に漏れないようにブロック
iptables -A OUTPUT -o eth0 -d 10.0.0.0/8 -j DROP
iptables -A OUTPUT -o eth0 -d 176.16.0.0/12 -j DROP
iptables -A OUTPUT -o eth0 -d 192.168.0.0/16 -j DROP
iptables -A OUTPUT -o eth0 -d 127.0.0.0/8 -j DROP

#########
#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 FORWARD -j LOGGING

######################
### 設定内容の保存 ###
######################
/etc/rc.d/init.d/iptables save

/etc/rc.d/init.d/iptables restart
最終更新:2006年07月01日 09:16