
Home > Debian > 基本設定 > iptablesでパケットフィルタリング
| iptablesでパケットフィルタリング |
ルータ配下にあるサーバマシンを想定して、パケットフィルタリングの設定を行なう。
iptablesコマンドで順次ルールを追加して保存ということもできるが、ここではスクリプトを作成し、
このスクリプトを実行することで、パケットフィルタリングできるようにする。
/rootにfirewall.shという名前で以下のスクリプトを作成した。
# vi firewall.sh #!/bin/sh # # NAME: # firewall.sh # # ################################################################################ # 基本設定 ################################################################################ # # 変数の設定 # LOCALNET=192.168.1.0/24 # LANネットワーク(自分の環境に) IPTABLES='/sbin/iptables' # iptablesコマンド # # ルールの初期化 # /sbin/iptables -F # # デフォルトのルール設定 # $IPTABLES -P INPUT DROP # インバウンド、基本は破棄 $IPTABLES -P FORWARD DROP $IPTABLES -P OUTPUT DROP # アウトバンド、基本は破棄 # # ループバックアドレス # $IPTABLES -A INPUT -i lo -j ACCEPT # ローカルホストからのものは許可 $IPTABLES -A OUTPUT -o lo -j ACCEPT # ローカルホストから出るものは許可 ################################################################################ # INPUTチェイン ################################################################################ # LAN内からの接続を許可 $IPTABLES -A INPUT -s $LOCALNET -j ACCEPT # 接続済みは許可 $IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # # 外部へ公開するサービス # ここにサービスで使用するポートを追加する # $IPTABLES -A INPUT -p tcp --dport 20 -m state --state NEW -j ACCEPT # FTP-DATA $IPTABLES -A INPUT -p tcp --dport 21 -m state --state NEW -j ACCEPT # FTP $IPTABLES -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT # SSH $IPTABLES -A INPUT -p tcp --dport 25 -m state --state NEW -j ACCEPT # SMTP $IPTABLES -A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT # HTTP $IPTABLES -A INPUT -p tcp --dport 110 -m state --state NEW -j ACCEPT # POP3 $IPTABLES -A INPUT -p tcp --dport 143 -m state --state NEW -j ACCEPT # IMAP $IPTABLES -A INPUT -p tcp --dport 443 -m state --state NEW -j ACCEPT # HTTPS $IPTABLES -A INPUT -p tcp --dport 6010:6100 -m state --state NEW -j ACCEPT # FTP PASV $IPTABLES -A INPUT -p tcp --dport 995 -m state --state NEW -j ACCEPT # POP3-SSL # AUTHリクエスト拒否 $IPTABLES -A INPUT -p tcp --dport 113 -j REJECT --reject-with tcp-reset ################################################################################ # OUTPUTチェイン ################################################################################ # 接続済みは許可 $IPTABLES -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # サーバからインターネットへ新規接続を許可 $IPTABLES -A OUTPUT -m state --state NEW -j ACCEPT |
オールインワンサーバにおいて必要と思われるサービスのポートへのアクセスは許可の
設定にしているので、不要なものがあればそのサービスの行を削除していただきたい。
また、LAN内の他のマシンからの通信は全て許可の設定にしてある。INPUTチェインにあるFTP PASVは
後にFTPサービスの設定をする際に、パッシブモードで使用するポートを6010〜6100に限定する予定なので予め記述しておいた。
このfirewall.shはwgetで入手できるようにしている。また、このスクリプトのハッシュ値は、
6ad958b93e358881fd62f04c4207b8d8 だ。wgetで入手した際は、確認してもらいたい。
入手方法とハッシュ値のチェック方法は以下の通りだ。
# wget http://chibi.name/download/firewall.sh # md5sum firewall.sh 6ad958b93e358881fd62f04c4207b8d8 firewall.sh |
このスクリプトの使い方だが、先ずは実行権限を与える。
そのあとで実行すればルールが適用されるようになっている。なお、ルール適用後にfirewall.shを
編集し、ルールを変更した場合には、再び実行すれば、ルールが適用されるようになっている。
# chmod 700 firewall.sh ←rootのみに実行権限 # ./firewall.sh ←実行 # iptables -L ←ルールを確認 Chain INPUT (policy DROP) target prot opt source destination ACCEPT all -- anywhere anywhere ACCEPT all -- 192.168.1.0/24 anywhere ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED ACCEPT tcp -- anywhere anywhere tcp dpt:ftp-data state NEW ACCEPT tcp -- anywhere anywhere tcp dpt:ftp state NEW ACCEPT tcp -- anywhere anywhere tcp dpt:ssh state NEW ACCEPT tcp -- anywhere anywhere tcp dpt:smtp state NEW ACCEPT tcp -- anywhere anywhere tcp dpt:www state NEW ACCEPT tcp -- anywhere anywhere tcp dpt:pop3 state NEW ACCEPT tcp -- anywhere anywhere tcp dpt:imap2 state NEW ACCEPT tcp -- anywhere anywhere tcp dpt:https state NEW ACCEPT tcp -- anywhere anywhere tcp dpts:6010:6100 state NEW ACCEPT tcp -- anywhere anywhere tcp dpt:pop3s state NEW REJECT tcp -- anywhere anywhere tcp dpt:auth reject-with tcp-reset Chain FORWARD (policy DROP) target prot opt source destination Chain OUTPUT (policy DROP) target prot opt source destination ACCEPT all -- anywhere anywhere ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED ACCEPT all -- anywhere anywhere state NEW |
以上が確認できたら、このスクリプトがシステム起動時に実行され設定が反映されるようにする
# vi /etc/network/interfaces
auto eth0
iface eth0 inet static
address 192.168.1.11
network 192.168.1.0
netmask 255.255.255.0
broadcast 192.168.1.255
gateway 192.168.1.1
pre-up /root/firewall.sh ←追加(/rootにある場合の記述)
|
最終更新 : 10/15/2005