• 検索結果がありません。

1 #!/bin/sh 2

3 PATH=/sbin:/bin:/usr/bin:/usr/sbin 4

5 ## 変数の定義

6 INTERNAL_INTERFACE="eth0" # 内側インタフェースの名前 7 EXTERNAL_INTERFACE="eth1" # 外側インタフェースの名前 8 DMZ_INTERFACE="eth2" # DMZ側インタフェースの名前 9

10 # 外側インタフェースのIPアドレス

11 IPADDR=‘ifconfig $EXTERNAL_INTERFACE | \

12 sed -e ’s/^.*inet addr :\([^ ]*\).*$/\1/p’ -e d‘

13

14 # 外部ネットワークのブロードキャスト・アドレス 15 BCAST=‘ifconfig $EXTERNAL_INTERFACE | \ 16 sed -e ’s/^.*Bcast:\([^ ]*\) .*$/\1/p’ -e d‘

17

18 # 内部ネットワークのブロードキャスト・アドレス 19 INTERNAL_BCAST=‘ifconfig $INTERNAL_INTERFACE | \ 20 sed -e ’s/^.*Bcast:\([^ ]*\) .*$/\1/p’ -e d‘

21

22 # 内部ネットワーク・アドレスのネットマスク長

23 INTERNAL_MASK=‘/sbin/ifconfig $INTERNAL_INTERFACE | \ 24 sed -e ’s/^.*Mask:\([^ ]*\) .*$/\1/p’ -e d‘

25

26 # 内部ネットワーク・アドレス

27 INTERNAL_LAN_X=‘netstat -rn | grep $INTERNAL_INTERFACE | \ 28 grep $INTERNAL_MASK | cut -f1 -d’ ’‘

29 INTERNAL_LAN=$INTERNAL_LAN_X/$INTERNAL_MASK 30

31 # DMZネットワーク・アドレスのネットマスク長

32 DMZ_MASK=‘/sbin/ifconfig $DMZ_INTERFACE | \ 33 sed -e ’s/^.*Mask:\([^ ]*\)/\1/p’ -e d‘

34

35 # DMZネットワーク・アドレス

36 DMZ_LAN_X=‘netstat -rn | grep $DMZ_INTERFACE | \ 37 grep $DMZ_MASK | cut -f1 d’ ’‘

38 DMZ_LAN=$DMZ_LAN_X/$DMZ_MASK 39

40 ANYWHERE="0.0.0.0/0"

41

42 ## 以下の設定を実行している間はパケットの転送を停止する 43 echo 0 > /proc/sys/net/ipv4/ip_forward

44

45 ## すでに設定されているルールを消去する

46 iptables -F

47 iptables -F -t nat 48

49 ## ポリシーの初期設定 50 iptables -P INPUT DROP 51 iptables -P OUTPUT ACCEPT 52 iptables -P FORWARD DROP 53

54 ## ループバック・インタフェースの入出力を許可する 55 iptables -A INPUT -i lo -j ACCEPT

56 iptables -A OUTPUT -o lo -j ACCEPT 57

58 ## TCP SYN Flood攻撃を防ぐためにSYN Cookiesを有効にする 59 echo 1 > /proc/sys/net/ipv4/tcp_syncookies

60

61 ## Broadcast pingに応答しないようにする

62 echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses 63

64 ## Source Routedパケットを拒否する

65 for i in /proc/sys/net/ipv4/conf/*/accept_source_route; do 66 eho 0 >$i

67 done 68

69 ## ICMP Redirectパケットを拒否する

70 for i in /proc/sys/net/ipv4/conf/*/accept_redirect; do 71 echo 0 >$i

72 done 73

74 ## 外側インタフェースのIPアドレスが取得できなかった場合は,フィルタを設定しない 75 if [ -z "$IPADDR" ]; then

76 iptables -A INPUT -i $INTERNAL_INTERFACE -j ACCEPT 77 exit 0

78 fi 79

80 ##############################################################################

81 ##

82 ## INPUTチェーンの設定(デフォルト拒否)

83 ##

84 85 ###

86 ### インターネットからルータが受信したパケットのフィルタリング 87 ###

88 ### 注意点

89 ### - ルータへの不必要なアクセスを拒否する 90 ### - smurf 攻撃の踏み台にならないように 91

92 ## 内部ネットワークから送った(ようにみえる)パケットを 93 ## 外部インタフェースから受信するはずはない

94 ## 拒否したパケットのログも記録する

95 iptables -A INPUT -i $EXTERNAL_INTERFACE -s $INTERNAL_LAN -j LOG \ 96 --log-prefix "spoofed packet "

97 iptables -A INPUT -i $EXTERNAL_INTERFACE -s $INTERNAL_LAN -j DROP 98

99 ## 自分が送った(ようにみえる)パケットを 100 ## 外部インタフェースから受信するはずはない 101 ## 拒否したパケットのログも記録する

102 iptables -A INPUT -i $EXTERNAL_INTERFACE -s $IPADDR -j LOG \ 103 --log-prefix "spoofed packet "

104 iptables -A INPUT -i $EXTERNAL_INTERFACE -s $IPADDR -j DROP 105

106 ## DHCPのパケットを許可する

107 ## (CATV,ISP用,DHCPを使用ない場合はコメントアウトする)

108 # iptables -A INPUT -i $EXTERNAL_INTERFACE -p udp -s $ANYWHERE \ 109 # -d $ANYWHERE --sport bootps --dport bootpc -j ACCEPT

110

111 ## 他ホストの DHCP パケットを拒否する

112 iptables -A INPUT -i $EXTERNAL_INTERFACE -p udp --sport bootpc \ 113 --dport bootps -j DROP

114

115 ## 始点・終点アドレスがプライベートIPアドレスのパケットを拒否する 116 ## ISPからプライベートIPアドレスを割り当てられている場合は,

117 ## 該当エントリを削除する

118 iptables -A INPUT -i $EXTERNAL_INTERFACE -s 10.0.0.0/8 -j DROP 119 iptables -A INPUT -i $EXTERNAL_INTERFACE -s 172.16.0.0/12 -j DROP 120 iptables -A INPUT -i $EXTERNAL_INTERFACE -s 192.168.0.0/16 -j DROP 121 iptables -A INPUT -i $EXTERNAL_INTERFACE -d 10.0.0.0/8 -j DROP 122 iptables -A INPUT -i $EXTERNAL_INTERFACE -d 172.16.0.0/12 -j DROP 123 iptables -A INPUT -i $EXTERNAL_INTERFACE -d 192.168.0.0/16 -j DROP 124

125 ## ブロードキャスト・パケットを拒否する

126 iptables -A INPUT -i $EXTERNAL_INTERFACE -d 255.255.255.255 -j DROP 127 iptables -A INPUT -i $EXTERNAL_INTERFACE -d 224.0.0.1 -j DROP 128 if [ -n "$BCAST" ]; then

129 iptables -A INPUT -i $EXTERNAL_INTERFACE -d $BCAST -j DROP 130 fi

131

132 ## IDENTにはTCP RESETを返す

133 iptables -A INPUT -i $EXTERNAL_INTERFACE -p tcp --dport ident -j REJECT \ 134 --reject-with tcp-reset

135

136 ## コネクションの戻りパケットを許可する

137 iptables -A INPUT -i $EXTERNAL_INTERFACE -m state --state ESTABLISHED \ 138 -j ACCEPT

139

140 ## その他,拒否したパケットのログを記録する

141 iptables -A INPUT -i $EXTERNAL_INTERFACE -j LOG

142 143 ###

144 ### 内部ネットワークからルータが受信したパケットのフィルタリング 145 ###

146

147 ## すべて許可する

148 iptables -A INPUT -i $INTERNAL_INTERFACE -j ACCEPT 149

150 ###

151 ### DMZネットワークからルータが受信したパケットのフィルタリング

152 ###

153

154 ## DNSとNTPのみ許可する

155 iptables -A INPUT -i $DMZ_INTERFACE -p udp --dport 53 -j ACCEPT 156 iptables -A INPUT -i $DMZ_INTERFACE -p udp --dport 123 -j ACCEPT 157

158 ## その他,拒否したパケットのログを記録する 159 iptables -A INPUT -i $DMZ_INTERFACE -j LOG 160

161 ##############################################################################

162 ##

163 ## FORWARDチェーンの設定(デフォルト拒否)

164 ##

165

166 ## Ingressフィルタリング(RFC2827)

167 ## 拒否したパケットのログを記録する

168 iptables -A FORWARD -i $DMZ_INTERFACE -s ! $DMZ_LAN -j LOG \ 169 --log-prefix "ingress filtering "

170 iptables -A FORWARD -i $DMZ_INTERFACE -s ! $DMZ_LAN -j DROP 171

172 iptables -A FORWARD -i $INTERNAL_INTERFACE -s ! $INTERNAL_LAN -j LOG \ 173 --log-prefix "ingress filtering "

174 iptables -A FORWARD -i $INTERNAL_INTERFACE -s ! $INTERNAL_LAN -j DROP 175

176 ## 内部ネットワークから送った(ようにみえる)パケットを外部インタフェースから受信するはずはない 177 ## 拒否したパケットのログも記録する

178 iptables -A FORWARD -i $EXTERNAL_INTERFACE -s $INTERNAL_LAN -j LOG \ 179 --log-prefix "spoofed packet "

180 iptables -A FORWARD -i $EXTERNAL_INTERFACE -s $INTERNAL_LAN -j DROP 181

182 ## 始点アドレスがプライベートIPアドレスのパケットを拒否する

183 ## ISPからプライベートアドレスを割り当てられる場合は,該当エントリを削除する

184 iptables -A FORWARD -i $EXTERNAL_INTERFACE -s 10.0.0.0/8 -j DROP 185 iptables -A FORWARD -i $EXTERNAL_INTERFACE -s 172.16.0.0/12 -j DROP 186 iptables -A FORWARD -i $EXTERNAL_INTERFACE -s 192.168.0.0/16 -j DROP 187

188 ## Windows DCE RPC,NetBIOS,Direct Hosting SMBパケットを拒否する 189 iptables -A FORWARD -p tcp -m multiport \

190 --source-port 135,137,138,139,445 -j DROP 191 iptables -A FORWARD -p udp -m multiport \ 192 --source-port 135,137,138,139,445 -j DROP 193 iptables -A FORWARD -p tcp -m multiport \

194 --destination-port 135,137,138,139,445 -j DROP 195 iptables -A FORWARD -p udp -m multiport \

196 --destination-port 135,137,138,139,445 -j DROP 197

198 ###

199 ### インターネット ⇔ DMZ 間のフィルタリング 200 ###

201

202 ## IDENTにはTCP RESETを返す

203 iptables -A FORWARD -i $DMZ_INTERFACE -p tcp --dport ident -j REJECT \ 204 --reject-with tcp-reset

205

206 ## サーバーへの接続を許可する

207 ## 許可するポート番号はDNATで決まるので,ここで指定はしなくてよい 208 ## サーバーがグローバルIPアドレスの場合は,許可するプロトコルと 209 ## ポート番号を指定すること

210 iptables -A FORWARD -i $EXTERNAL_INTERFACE -o $DMZ_INTERFACE \ 211 -m state --state NEW,ESTABLISHED -j ACCEPT

212

213 ## 戻りパケットを許可する

214 ## DMZ → インターネットへの接続は許可しない

215 iptables -A FORWARD -i $DMZ_INTERFACE -o $EXTERNAL_INTERFACE \ 216 -m state --state ESTABLISHED -j ACCEPT

217 218 ###

219 ### DMZ ⇔ 内部 間のフィルタリング 220 ###

221

222 ## 内部 → DMZ はデフォルト許可

223 iptables -A FORWARD -i $INTERNAL_INTERFACE -o $DMZ_INTERFACE \ 224 -m state --state NEW,ESTABLISHED -j ACCEPT

225

226 ## 戻りパケットを許可する

227 ## 注意:DMZ → 内部の接続は許可してはいけない

228 iptables -A FORWARD -i $DMZ_INTERFACE -o $INTERNAL_INTERFACE \ 229 -m state --state ESTABLISHED,RELATED -j ACCEPT

230 231 ###

232 ### インターネット ⇔ 内部 間のフィルタリング 233 ###

234

235 ## 内部 → インターネット はデフォルト許可

236 iptables -A FORWARD -i $INTERNAL_INTERFACE -o $EXTERNAL_INTERFACE \ 237 -m state --state NEW,ESTABLISHED -j ACCEPT

238

239 ## 戻りパケットを許可する

240 ## 注意:インターネット → 内部の接続は許可してはいけない

241 iptables -A FORWARD -i $EXTERNAL_INTERFACE -o $INTERNAL_INTERFACE \ 242 -m state --state ESTABLISHED,RELATED -j ACCEPT

243

244 ##############################################################################

245 ##

246 ## NATの設定 247 ##

248

249 ## 端末型接続の場合は IP masquerade

250 iptables -A POSTROUTING -t nat -o $EXTERNAL_INTERFACE -j MASQUERADE 251

252 ## インターネット → DMZ のWebアクセスを転送する

253 iptables -A PREROUTING -t nat -i $EXTERNAL_INTERFACE \ 254 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.2 255

256 ## パケットの転送を開始する

257 echo 1 > /proc/sys/net/ipv4/ip_forward 258

259 exit 0

関連したドキュメント