![]() |
LINUX |
firewall-masqの設定
*iptable-1.4.8を使用しています
*ADSLの起動スクリプト(pppoe)が読み込んで実効します
*/etc/sysctl.confでip_forward、rp_filterを有効にしています
*外部 (internet) からは、固定グローバルIPでの接続です
*サブミッションポートの設定は、SMTPサーバの構成に合わせてください
*紫色部分:実行が確認できたらコメント行にしても良い
**以降はコメントです
*完全コピーしないこと(エラーが出ることあり)
*エディタ、ファイラーの操作は省略します
*"#" で始まる行はコメントとして解釈され、"$" の付いた文字は変数を表します
*スクリプトの先頭で, 処理を行うシェルを明示します (#!/bin/bash)
*設定を間違えれば、通信不能になったり、不要なポートを開けることになります
*netfilter.org のドキュメントなどに目を通してください
*iptablesマニュアルも読みましょう
/etc/ppp/firewall-masq (root root 644)#!/bin/bash
### ADSL起動時にNetfilterを設定します
# wan World Area Network # lan Local Area Network # lsv Local Server # fwz Firewall zone
## 一時的にフォワーディング設定を無効にします
echo 0 > /proc/sys/net/ipv4/ip_forward
## iptablesコマンドを絶対パスで変数に設定します
IPTABLES='/usr/local/sbin/iptables'
## 既存のルールをフラッシュ(解除)します
$IPTABLES -P INPUT ACCEPT $IPTABLES -P OUTPUT ACCEPT $IPTABLES -P FORWARD ACCEPT
$IPTABLES -F $IPTABLES -t nat -F $IPTABLES -X $IPTABLES -t nat -X $IPTABLES -Z
## 必要なモデュールをロードします
/sbin/modprobe ip_conntrack_ftp /sbin/modprobe ip_nat_ftp
## IPアドレス・ネットワーク・インターフェースを変数に設定します
WAN_IF=ppp0 WAN_IP='219.117.201.3' #SSH_IP1='xxx.xxx.xxx.xxx' #SSH_IP2='yyy.yyy.yyy.yyy'
LAN_IF=eth0 LOCAL='192.168.0.0/24' LSV_IP='192.168.0.21'
## 基本ポリシーをDROPに変更します
$IPTABLES -P INPUT DROP $IPTABLES -P OUTPUT DROP $IPTABLES -P FORWARD DROP
## サーバ内の接続は全て許可します
$IPTABLES -A INPUT -i lo -j ACCEPT $IPTABLES -A OUTPUT -o lo -j ACCEPT
## 不正アクセスのログを取ります
# ( syn-flood ) ログのための設定です
$IPTABLES -N syn-flood
$IPTABLES -A syn-flood -m limit --limit 3/s --limit -burst 15 -j RETURN
$IPTABLES -A syn-flood -j LOG --log-level info --log-prefix "IPT syn-flood:"
$IPTABLES -A syn-flood -j DROP
# ( port-scan ) ログのための設定です
$IPTABLES -N port-scan $IPTABLES -A port-scan -m limit --limit 1/s -j RETURN $IPTABLES -A port-scan -j LOG --log-level info --log-prefix "IPT port-scan:" $IPTABLES -A port-scan -j DROP
# ( ping-death ) ログのための設定です
$IPTABLES -N ping-death
$IPTABLES -A ping-death -m limit --limit 1/s -j RETURN
$IPTABLES -A ping-death -j LOG --log-level info --log-prefix "IPT ping-death:"
$IPTABLES -A ping-death -j DROP
# ( stealth ) ログのための設定です
$IPTABLES -N stealth
$IPTABLES -A stealth -j LOG --log-level info --log-prefix "IPT stealth:"
$IPTABLES -A stealth -j DROP
## MSSを自動で調整する設定です (pppoeのkernelモードで必須)
$IPTABLES -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
## ローカルネットワーク(ローカルサーバ)とインターネットとの接続です
# 不正にIPを使われた場合に、使われた相手に拒否の応答をする
$IPTABLES -A FORWARD -i $WAN_IF -p tcp --tcp-flags SYN,ACK SYN,ACK \ -m state --state NEW -j REJECT --reject-with tcp-reset
# 新しいチェーンを作ります
$IPTABLES -N lan-wan $IPTABLES -N wan-lan $IPTABLES -N wan-lsv $IPTABLES -A FORWARD -s $LOCAL -i $LAN_IF -o $WAN_IF -j lan-wan $IPTABLES -A FORWARD -i $WAN_IF -o $LAN_IF -d $LOCAL -j wan-lan $IPTABLES -A FORWARD -i $WAN_IF -o $LAN_IF -d $LSV_IP -j wan-lsv
# パケットを最初に不正アクセスのチェックに渡します # 不正がなければ、リターンされて下のチェックに回されます
$IPTABLES -A wan-lsv -p tcp --syn -j syn-flood $IPTABLES -A wan-lsv -p tcp ! --syn -m state --state NEW -j stealth $IPTABLES -A wan-lsv -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j port-scan $IPTABLES -A wan-lsv -p icmp --icmp-type echo-request -j ping-death
# グローバルからの新しい接続をローカルサーバに通します
$IPTABLES -A wan-lsv -p tcp -m state --state NEW --dport 80 -j ACCEPT $IPTABLES -A wan-lsv -p tcp -m state --state NEW --dport 443 -j ACCEPT $IPTABLES -A wan-lsv -p tcp -m state --state NEW --dport 25 -j ACCEPT $IPTABLES -A wan-lsv -p tcp -m state --state NEW --dport 465 -j ACCEPT $IPTABLES -A wan-lsv -p tcp -m state --state NEW --dport 993 -j ACCEPT
# IDENTサーバへの接続拒否を応答します
$IPTABLES -A wan-lsv -p tcp --dport 113 -j REJECT --reject-with tcp-reset
# ローカル(ローカルサーバ)からの新しい接続をグローバルに通します
$IPTABLES -A lan-wan -m state --state NEW -j ACCEPT $IPTABLES -A lan-wan -p tcp ! --syn -m state --state NEW -j stealth
# sambaのパケットをドロップします
$IPTABLES -A lan-wan -p tcp --dport 135:139 -j DROP $IPTABLES -A lan-wan -p udp --dport 135:139 -j DROP $IPTABLES -A lan-wan -p tcp --dport 445 -j DROP $IPTABLES -A lan-wan -p udp --dport 445 -j DROP $IPTABLES -A lan-wan -p tcp --dport 593 -j DROP $IPTABLES -A lan-wan -p udp --dport 593 -j DROP
# 確実なパケットの接続 (ルータ内からの接続への応答) を許可します
$IPTABLES -A wan-lan -m state --state ESTABLISHED,RELATED -j ACCEPT $IPTABLES -A lan-wan -m state --state ESTABLISHED,RELATED -j ACCEPT
## グローバルとFirewall上のサーバデーモンとの接続です
# 不正にIPを使われた場合に、使われた相手に拒否の応答をする
$IPTABLES -A INPUT -i $WAN_IF -p tcp --tcp-flags SYN,ACK SYN,ACK \ -m state --state NEW -j REJECT --reject-with tcp-reset
# 新しいチェーンを作ります
$IPTABLES -N wan-fwz $IPTABLES -N fwz-wan $IPTABLES -A INPUT -i $WAN_IF -d $WAN_IP -j wan-fwz $IPTABLES -A OUTPUT -s $WAN_IP -o $WAN_IF -j fwz-wan
# パケットを最初に不正アクセスのチェックに渡します # 不正がなければ、リターンされてping以下のチェックに回されます
$IPTABLES -A wan-fwz -p tcp --syn -j syn-flood $IPTABLES -A wan-fwz -p tcp ! --syn -m state --state NEW -j stealth $IPTABLES -A wan-fwz -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j port-scan $IPTABLES -A wan-fwz -p icmp --icmp-type echo-request -j ping-death
# pingパケットを許可します
$IPTABLES -A wan-fwz -p icmp --icmp-type echo-request -j ACCEPT $IPTABLES -A fwz-wan -p icmp --icmp-type destination-unreachable -j ACCEPT $IPTABLES -A fwz-wan -p icmp --icmp-type echo-reply -j ACCEPT $IPTABLES -A fwz-wan -p icmp --icmp-type echo-request -j ACCEPT $IPTABLES -A wan-fwz -p icmp --icmp-type destination-unreachable -j ACCEPT $IPTABLES -A wan-fwz -p icmp --icmp-type echo-reply -j ACCEPT
# DNSサーバへの接続を許可します
$IPTABLES -A wan-fwz -p udp --dport 53 -j ACCEPT $IPTABLES -A fwz-wan -p udp --sport 53 -m state --state ESTABLISHED -j ACCEPT $IPTABLES -A wan-fwz -p tcp --dport 53 -j ACCEPT $IPTABLES -A fwz-wan -p tcp --sport 53 -m state --state ESTABLISHED -j ACCEPT $IPTABLES -A fwz-wan -p udp --dport 53 -j ACCEPT $IPTABLES -A wan-fwz -p udp --sport 53 -m state --state ESTABLISHED -j ACCEPT $IPTABLES -A fwz-wan -p tcp --dport 53 -j ACCEPT $IPTABLES -A wan-fwz -p tcp --sport 53 -m state --state ESTABLISHED -j ACCEPT
# SSH サーバへの接続を許可します
$IPTABLES -A wan-fwz -p tcp --dport 722 -j ACCEPT $IPTABLES -A fwz-wan -p tcp --sport 722 -j ACCEPT
# IDENTサーバへの接続拒否を応答します
$IPTABLES -A wan-fwz -p tcp --dport 113 -j REJECT --reject-with tcp-reset
# NTPサーバへの接続を許可します # 接続が確立したパケットのみ受け入れます
$IPTABLES -A fwz-wan -p udp --dport 123 -j ACCEPT $IPTABLES -A wan-fwz -p udp --sport 123 -m state --state ESTABLISHED -j ACCEPT
# yumでhttpサーバへの接続を許可します # 接続が確立したパケットのみ受け入れます
$IPTABLES -A fwz-wan -p tcp --dport 80 -j ACCEPT $IPTABLES -A wan-fwz -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
## ローカルとFirewall上のサーバデーモンとの接続です
# 新しいチェーンを作ります
$IPTABLES -N lan-fwz $IPTABLES -N fwz-lan $IPTABLES -A INPUT -s $LOCAL -i $LAN_IF -j lan-fwz $IPTABLES -A OUTPUT -o $LAN_IF -d $LOCAL -j fwz-lan
# pingパケットを許可します
$IPTABLES -A lan-fwz -p icmp --icmp-type echo-request -j ACCEPT $IPTABLES -A fwz-lan -p icmp --icmp-type echo-reply -j ACCEPT $IPTABLES -A fwz-lan -p icmp --icmp-type echo-request -j ACCEPT $IPTABLES -A lan-fwz -p icmp --icmp-type echo-reply -j ACCEPT
# DNSサーバへの接続を許可します
$IPTABLES -A lan-fwz -p udp --dport 53 -j ACCEPT $IPTABLES -A fwz-lan -p udp --sport 53 -j ACCEPT $IPTABLES -A lan-fwz -p tcp --dport 53 -j ACCEPT $IPTABLES -A fwz-lan -p tcp --sport 53 -j ACCEPT
# FTPサーバ(PASSIVEモード)での接続を許可します
$IPTABLES -A lan-fwz -p tcp --dport 21 -j ACCEPT $IPTABLES -A fwz-lan -p tcp --sport 21 -j ACCEPT $IPTABLES -A lan-fwz -p tcp --dport 50000:50030 -j ACCEPT $IPTABLES -A fwz-lan -p tcp --sport 50000:50030 -j ACCEPT
# SSHサーバへの接続を許可します
$IPTABLES -A lan-fwz -p tcp --dport 22 -j ACCEPT $IPTABLES -A fwz-lan -p tcp --sport 22 -j ACCEPT $IPTABLES -A fwz-lan -p tcp --dport 22 -j ACCEPT $IPTABLES -A lan-fwz -p tcp --sport 22 -j ACCEPT
# SMTPサーバへの接続を許可します
$IPTABLES -A fwz-lan -p tcp --dport 25 -j ACCEPT $IPTABLES -A lan-fwz -p tcp --sport 25 -j ACCEPT
# NTPサーバへの接続を許可します
$IPTABLES -A lan-fwz -p udp --dport 123 -j ACCEPT $IPTABLES -A fwz-lan -p udp --sport 123 -j ACCEPT
# dropbearの接続を許可します
$IPTABLES -A lan-fwz -p tcp --dport 922 -j ACCEPT $IPTABLES -A fwz-lan -p tcp --sport 922 -j ACCEPT
## グローバルアドレスをローカルサーバのアドレスに変換します
# サブミッションポートをSMTPのデフォルトポートへリダイレクトします
$IPTABLES -t nat -A PREROUTING -p tcp --dport 587 -j REDIRECT --to-ports 25
# 公開するサーバのポートをローカルサーバへリダイレクトします
$IPTABLES -t nat -A PREROUTING -p tcp -i $WAN_IF --dport 80 -j DNAT --to $LSV_IP $IPTABLES -t nat -A PREROUTING -p tcp -i $WAN_IF --dport 443 -j DNAT --to $LSV_IP $IPTABLES -t nat -A PREROUTING -p tcp -i $WAN_IF --dport 25 -j DNAT --to $LSV_IP $IPTABLES -t nat -A PREROUTING -p tcp -i $WAN_IF --dport 465 -j DNAT --to $LSV_IP $IPTABLES -t nat -A PREROUTING -p tcp -i $WAN_IF --dport 993 -j DNAT --to $LSV_IP
## ローカルアドレスをグローバルアドレスに変換します
$IPTABLES -t nat -A POSTROUTING -s $LOCAL -o $WAN_IF -j SNAT --to $WAN_IP
## パケットフォワーディングを有効にします
echo 1 > /proc/sys/net/ipv4/ip_forward
簡単な説明IPTABLES='/usr/local/sbin/iptables' WAN_IP='219.117.201.3' WAN_IF=ppp0 $IPTABLES -N wan-fwz $IPTABLES -N fwz-wan $IPTABLES -A INPUT -i $WAN_IF -d $WAN_IP -j wan-fwz $IPTABLES -A OUTPUT -s $WAN_IP -o $WAN_IF -j fwz-wan $IPTABLES -A wan-fwz -p tcp --dport 53 -j ACCEPT $IPTABLES -A fwz-wan -p tcp --sport 53 -j ACCEPT
# 上記の組み合わせから DNSサーバの受信の設定は
/usr/local/sbin/iptables -A INPUT -i ppp0 -d 219.117.201.3 -p tcp --dport 53 -j ACCEPT
# 上記の組み合わせから DNSサーバの送信の設定は
/usr/local/sbin/iptables -A OUTPUT -s 219.117.201.3 -o ppp0 -p tcp --sport 53 -j ACCEPT
![]() |
Copyright(c) 528p.com All Rights Reserved. |

