Sponsored Link

iptablesの設定



 戻る

 とりあえずの設定です(^-^)/ 実験環境についてはこちらをごらん下さい。

 参考文献:『はじめてのRedHat Linux8.0 サーバー構築編』アイティーブースト著 秀和システム
        『TCP/IPバッケトフィルタリング 常時接続時代の基本セキュリティ』宇野 俊夫著 エーアイ出版

 iptablesにはひとつひとつコマンド入力していく方法と、iptablesコマンドをまとめたスクリプトを作成しそれを実行する方法があります。
手馴れた人ならひとつひとつコマンド入力していってもいいかと思いますが、わたしのような初心者はスクリプトを使った方がいいだろう
ということで、スクリプトを書きました。
 ポリシー?!としては、IPマスカレードは使わない。Delegateでhttp・pop・smtp・ftpをプロクシする。dhcpdntpd・ssh・samba・cups
LAN側のクライアントに対してのみ使う。そして、必要なポートだけ開ける…  以前の設定

<変更> サーバーの設定を確実にし、少しでもルールを減らしてiptablesを軽くする。50くらいルールが減りましたが…い・い・の・か??

さて、まずスクリプトを作ります。

# mkdir /root/bin
# vi bin/filter
とします。以下がその内容です。

スキップ

===================================================================================
#!/bin/sh

# command
iptables=/sbin/iptables

# IP map
F_DNS=***.***.***.*** # プロバイダのDNSサーバーのアドレス
S_DNS=***.***.***.*** # プロバイダのDNSサーバーのアドレス
ROUTER=192.168.0.1
WAN=192.168.0.2
WAN_NET=192.168.0.0/24
LAN=192.168.2.1
LAN_NET=192.168.2.0/24
HOST=192.168.2.2

# delegate port map 本当のDrelegateのftpのポートは8021です
deleftp=8020

# policy 許可しないものは全て禁止にします
$iptables -P INPUT DROP
$iptables -P FORWARD DROP
$iptables -P OUTPUT DROP

# dns DNS通信を許可します
$iptables -A INPUT -m state --state ESTABLISHED -p udp --sport 53 --dport 1024: -d $WAN -i eth0 -j ACCEPT
$iptables -A OUTPUT -p udp --sport 1024: -s $WAN --dport 53 -d $ROUTER -o eth0 -j ACCEPT
$iptables -A OUTPUT -p udp --sport 1024: -s $WAN --dport 53 -d $F_DNS -o eth0 -j ACCEPT
$iptables -A OUTPUT -p udp --sport 1024: -s $WAN --dport 53 -d $S_DNS -o eth0 -j ACCEPT

# router config ルーターはhttpで設定します
$iptables -A INPUT -p tcp -m state --state ESTABLISHED --sport 80 -s $ROUTER --dport 1024: -d $WAN -i eth0 -j ACCEPT
$iptables -A OUTPUT -p tcp -m state --state NEW,ESTABLISHED --sport 1024: -s $WAN --dport 80 -d $ROUTER -o eth0 -j ACCEPT

# ingress in eth0から入ってくるルーターとのDNS通信・ルーター設定以外のプライベートアドレスからのバケットを拒否しておきます
$iptables -A INPUT -s 192.168.0.0/16 -i eth0 -j DROP
$iptables -A INPUT -s 192.168.0.0/24 -i eth0 -j DROP
$iptables -A INPUT -s 172.16.0.0/12 -i eth0 -j DROP
$iptables -A INPUT -s 10.0.0.0/8 -i eth0 -j DROP
$iptables -A INPUT -s 127.0.0.1/32 -i eth0 -j DROP

# ingress out ルーターとのDNS通信・ルーター設定以外のeth0へ出て行くプライベートアドレスへのバケットを拒否します
$iptables -A OUTPUT -d 192.168.0.0/32 -o eth0 -j DROP
$iptables -A OUTPUT -d 192.168.0.255/32 -o eth0 -j DROP
$iptables -A OUTPUT -d 192.168.0.0/16 -o eth0 -j DROP
$iptables -A OUTPUT -d 192.168.0.0/24 -o eth0 -j DROP
$iptables -A OUTPUT -d 172.16.0.0/12 -o eth0 -j DROP
$iptables -A OUTPUT -d 10.0.0.0/8 -o eth0 -j DROP

# loopback ループバックを許可
$iptables -A INPUT -i lo -j ACCEPT
$iptables -A OUTPUT -o lo -j ACCEPT

#[SERVICE]

# ntpd for server サーバーのためのルールです
$iptables -A INPUT -p udp -m state --state ESTABLISHED --sport 123 --dport 123 -d $WAN -i eth0 -j ACCEPT
$iptables -A OUTPUT -p udp -m state --state NEW,ESTABLISHED --sport 123 -s $WAN --dport 123 -o eth0 -j ACCEPT

# ntpd for client クライアントのためのルールです
$iptables -A INPUT -p udp -m state --state NEW,ESTABLISHED -s $LAN_NET --dport 123 -d $LAN -i eth1 -j ACCEPT
$iptables -A OUTPUT -p udp -m state --state ESTABLISHED --sport 123 -s $LAN -d $LAN_NET -o eth1 -j ACCEPT

# samba for client クライアントのためのルールです
$iptables -A INPUT -p udp --sport 137:138 -s $LAN_NET --dport 137:138 -d $LAN_NET -i eth1 -j ACCEPT
$iptables -A OUTPUT -p udp --sport 137:138 -s $LAN --dport 137:138 -d $LAN_NET -o eth1 -j ACCEPT
$iptables -A INPUT -p tcp --sport 1024:5000 -s $LAN_NET --dport 139 -d $LAN -i eth1 -j ACCEPT

# ssh for host クライアントのためのルールです
$iptables -A INPUT -p tcp -m state --state NEW,ESTABLISHED -s $HOST --dport 22 -d $LAN -i eth1 -j ACCEPT
$iptables -A OUTPUT -p tcp -m state --state ESTABLISHED --sport 22 -s $LAN -d $HOST -o eth1 -j ACCEPT

# samba config (=swat) & cups config クライアントのためのルールです
$iptables -A INPUT -p tcp -m state --state NEW,ESTABLISHED --sport 1024:5000 -s $HOST --dport 631 -d $LAN -i eth1 -j ACCEPT
$iptables -A INPUT -p tcp -m state --state NEW,ESTABLISHED --sport 1024:5000 -s $HOST --dport 901 -d $LAN -i eth1 -j ACCEPT
$iptables -A OUTPUT -p tcp ! --syn -m state --state ESTABLISHED -s $LAN --dport 1024:5000 -d $HOST -o eth1 -j ACCEPT

# DELEGATE FOR SERVER Delegateのサーバーのためのルールです
$iptables -A INPUT -p tcp -m state --state ESTABLISHED --dport 1024: -d $WAN -i eth0 -j ACCEPT
$iptables -A OUTPUT -p tcp -m state --state NEW,ESTABLISHED --sport 1024: -s $WAN -o eth0 -j ACCEPT

# DELEGATE FOR CLIENT Delegateのクライアントのためのルールです
$iptables -A OUTPUT -p tcp -m state --state ESTABLISHED -s $LAN --dport 1024: -d $LAN_NET -o eth1 -j ACCEPT
$iptables -A INPUT -p tcp -m state --state NEW,ESTABLISHED --sport 1024: -s $LAN_NET --dport 1024: -d $LAN -i eth1 -j ACCEPT

# deleftp for client Delegateのftpクライアントのためのルールです  上のルールにRELATEDを付けてみたのですがだめだったので…
$iptables -A OUTPUT -p tcp --sport $deleftp -s $LAN --dport 1024: -d $LAN_NET -o eth1 -j ACCEPT

# ident for delegate Delegateのクライアントのために必要なルールです
$iptables -A OUTPUT -p tcp --sport 1024: -s $LAN --dport 113 -d $LAN_NET -o eth1 -j ACCEPT
$iptables -A INPUT -p tcp ! --syn --sport 113 -s $LAN_NET -d $LAN -i eth1 -j ACCEPT

# log 以上のルールから外れたバケットのログを出すルールです
$iptables -A INPUT -j LOG --log-prefix "### INPUT ###"
$iptables -A OUTPUT -j LOG --log-prefix "### OUTPUT ###"

# End Of Rules
===================================================================================


で、このファイルに実行権限をつけます。
# chmod 700 bin/filter

で、このファイルを実行すれば、その内容がiptablesに反映されます。
# filter

で、後はいろいろ操作してみて、そのログの内容次第…
問題があれば、
# /etc/rc.d/init.d/iptables stop
# vi bin/filter
として、/root/bin/filterを書き直す

で、このままでは再起動後に元の設定に戻ってしまうので、確定したら
# /etc/rc.d/init.d/iptables  save
とすれば、終了なんですが…

現状…この設定でいっていますが…いいと思うけれど…

トップへ