使用iptables建置Linux 防火牆(2)(轉)
陸、應用例項
#!/bin/sh
#
# 石牌國小防火牆設定指令稿
# 2002/8/27
# 設定者:李忠憲(修改自 iptables tutorial 1.1.11 by Oskar Andreasson )
# 原檔案是依 DMZ 需求設計,已根據校園 NAT 網路之需求修改,其餘改動部份包括:
# 新增通訊協議定義區塊
# 新增執行時,自動清除已設定之規則
# 支援 FTP
# 修改所有規則,改採 multiport 方式以簡化規則
# 原檔案僅支援 IP 偽裝(多對一對應),已擴充為支援一對一對應及多對多對應
# 原檔案僅支援 DNS 及 WEB,新增 ftp、mail、wam、PCAnywhere、ssh......等多種伺服器
# 修改若干規則設定上的小錯誤
#
# Copyright (C) 2001 Oskar Andreasson
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program or from the site that you downloaded it
# from; if not, write to the Free Software Foundation, Inc., 59 Temple
# Place, Suite 330, Boston, MA 02111-1307 USA
#
###########################################################################
#
# 1. Configuration options.
#
# 1.0 Protocols Configuration.
# 定義會用到的通訊協議
HTTP="80"
HTTPS="443"
FTP="21"
FTP_DATA="20"
SMTP="25"
POP3="110"
IMAP="143"
SSH="22"
TELNET="23"
PCAW_TCP="5631"
PCAW_UDP="5632"
WEBMIN="10000"
WAM="12000"
DNS="53"
#
# 1.1 Internet Configuration.
#
# 定義 NIC IP 及 WAN 介面
INET_IP="163.21.xxx.253"
HTTP1_IP="163.21.xxx.2"
HTTP2_IP="163.21.xxx.4"
HTTP3_IP="163.21.xxx.9"
HTTP4_IP="163.21.xxx.6"
HTTP5_IP="163.21.xxx.7"
HTTP6_IP="163.21.xxx.10"
FTP1_IP="163.21.xxx.2"
FTP2_IP="163.21.xxx.6"
FTP3_IP="163.21.xxx.7"
MAIL1_IP="163.21.xxx.6"
MAIL2_IP="163.21.xxx.7"
PCAW1_IP="163.21.xxx.2"
PCAW2_IP="163.21.xxx.4"
WAM1_IP="163.21.xxx.6"
WAM2_IP="163.21.xxx.7"
DNS_IP="163.21.xxx.2"
IP_POOL="163.21.xxx.240-163.21.xxx.250"
INET_IFACE="eth1"
#
# 1.2 Local Area Network configuration.
#
# 定義 NAT IP 及 LAN 介面
LAN_IP="192.168.1.253"
LAN_HTTP1_IP="192.168.1.2"
LAN_HTTP2_IP="192.168.1.4"
LAN_HTTP3_IP="192.168.1.9"
LAN_HTTP4_IP="192.168.1.6"
LAN_HTTP5_IP="192.168.1.7"
LAN_HTTP6_IP="192.168.1.53"
LAN_FTP1_IP="192.168.1.2"
LAN_FTP2_IP="192.168.1.6"
LAN_FTP3_IP="192.168.1.7"
LAN_MAIL1_IP="192.168.1.6"
LAN_MAIL2_IP="192.168.1.7"
LAN_PCAW1_IP="192.168.1.2"
LAN_PCAW2_IP="192.168.1.4"
LAN_WAM1_IP="192.168.1.6"
LAN_WAM2_IP="192.168.1.7"
LAN_DNS_IP="192.168.1.2"
LAN_IP_RANGE="192.168.0.0/16"
LAN_BROADCAST_ADDRESS="192.168.1.255"
LAN_IFACE="eth0"
#
# 1.4 Localhost Configuration.
#
# 定義 Loopback IP 及介面
LO_IFACE="lo"
LO_IP="127.0.0.1"
#
# 1.5 IPTables Configuration.
#
# 設定 iptables 指令路徑
IPTABLES="/sbin/iptables"
#
# 1.6 Other Configuration.
#
###########################################################################
#
# 2. Module loading.
#
#
# Needed to initially load modules
# 整理核心支援模組之清單
/sbin/depmod -a
#
# 2.1 Required modules
# 載入會用到的模組
/sbin/modprobe ip_tables
/sbin/modprobe ip_conntrack
/sbin/modprobe iptable_filter
/sbin/modprobe iptable_mangle
/sbin/modprobe iptable_nat
/sbin/modprobe ipt_LOG
/sbin/modprobe ipt_limit
/sbin/modprobe ipt_state
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_nat_ftp
#
# 2.2 Non-Required modules
# 其餘未使用之模組
#/sbin/modprobe ipt_owner
#/sbin/modprobe ipt_REJECT
#/sbin/modprobe ipt_MASQUERADE
#/sbin/modprobe ip_conntrack_irc
#/sbin/modprobe ip_nat_irc
###########################################################################
#
# 3. /proc set up.
#
#
# 3.1 Required proc configuration
# 啟動 Forward 介面
echo "1" > /proc/sys/net/ipv4/ip_forward
#
# 3.2 Non-Required proc configuration
# 其餘未使用之介面
#echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter
#echo "1" > /proc/sys/net/ipv4/conf/all/proxy_arp
#echo "1" > /proc/sys/net/ipv4/ip_dynaddr
###########################################################################
#
# 4. rules set up.
#
######
# 4.1 Filter table
#
# 4.1.0 Reset the default policies in the nat table.
# 清除所有已設定之規則,回覆到不設防狀態
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -t nat -P PREROUTING ACCEPT
$IPTABLES -t nat -P POSTROUTING ACCEPT
$IPTABLES -t nat -P OUTPUT ACCEPT
$IPTABLES -t mangle -P PREROUTING ACCEPT
$IPTABLES -t mangle -P OUTPUT ACCEPT
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -t mangle -F
$IPTABLES -X
$IPTABLES -t nat -X
$IPTABLES -t mangle -X
#
# 4.1.1 Set policies
# 定義安全政策為正面表列
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP
#
# 4.1.2 Create userspecified chains
#
#
# 新增使用者自訂規則煉 bad_tcp_packets、 allowed 和 icmp_packets
$IPTABLES -N bad_tcp_packets
$IPTABLES -N allowed
$IPTABLES -N icmp_packets
#
# 4.1.3 Create content in userspecified chains
#
#
# bad_tcp_packets chain
# bad_tcp_packets 規則煉的功能是:將要求重導向的聯機記錄起來,然後將封包丟棄(防止聯機被綁架,但會檔掉需要三方交談的服務,例如:M$ Media Server)
$IPTABLES -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j LOG --log-level INFO --log-prefix "New not syn:"
$IPTABLES -A bad_tcp_packets -p TCP ! --syn -m state --state NEW -j DROP
# allowed chain
# allowed 規則煉的功能是:允許要求聯機封包或響應封包進入,將其餘封包丟棄
$IPTABLES -A allowed -p TCP --syn -j ACCEPT
$IPTABLES -A allowed -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A allowed -p TCP -j DROP
#
# ICMP rules
# icmp_packets 規則煉的功能是:允許 ping 封包進入,將其餘封包丟棄
$IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j ACCEPT
$IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT
#
# 4.1.4 INPUT chain(過濾要到達防火牆的封包)
#
#
# 進入防火牆主機的 TCP 封包必須先進行 bad_tcp_packets 過濾
$IPTABLES -A INPUT -p tcp -j bad_tcp_packets
# 從 WAN 進入防火牆主機的 ICMP 封包必須先進行 icmp_packets 過濾,這是為了避免駭客傳送不完整的 IP 封包,系統會響應 ICMP 封包通知對方,導致主機位置被偵測出來
$IPTABLES -A INPUT -p ICMP -i $INET_IFACE -j icmp_packets
# 從 LAN 進入防火牆主機的全部 unicast 和 broadcast 封包,通通放行;額外檢查目的地 IP 可以將 multicast 封包濾除
$IPTABLES -A INPUT -p ALL -i $LAN_IFACE -d $LAN_IP -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LAN_IFACE -d $LAN_BROADCAST_ADDRESS -j ACCEPT
# 從 Loopback 介面進入防火牆主機的所有封包,檢查是否來自本機,若是則放行;此規則去檢查來源 IP ,似乎有些畫蛇添足,因為只有來自本機的封包才有機會進入 Loopback 介面
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $LO_IP -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $LAN_IP -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $INET_IP -j ACCEPT
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-955550/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用iptables建置Linux 防火牆(3)(轉)Linux防火牆
- linux防火牆iptablesLinux防火牆
- iptables 配置LINUX防火牆Linux防火牆
- 動態 iptables 防火牆(轉)防火牆
- NAT iptables防火牆(script)(轉)防火牆
- 使用netfilter/iptables配置防火牆(轉)Filter防火牆
- 使用IPtables搭建防火牆的規則(轉)防火牆
- Linux防火牆之IPtables概念與用法(轉)Linux防火牆
- 防火牆IPTABLES防火牆
- iptables防火牆防火牆
- Linux設定防火牆iptablesLinux防火牆
- Linux 防火牆 學習 iptablesLinux防火牆
- 動態iptables防火牆dynfw(轉)防火牆
- Iptables防火牆規則使用梳理防火牆
- Linux基礎命令---iptables防火牆Linux防火牆
- 簡易防火牆建置與流量統計-前言 (轉)防火牆
- Linux防火牆iptables實用設定Linux防火牆
- Linux 防火牆開放特定埠 (iptables)Linux防火牆
- Linux 自帶防火牆 Iptables 基本配置Linux防火牆
- Iptables防火牆應用防火牆
- iptables防火牆規則防火牆
- 防火牆iptables 設定防火牆
- 動態iptables 防火牆防火牆
- 簡易防火牆建置與流量統計之一(轉)防火牆
- 簡易防火牆建置與流量統計之二(轉)防火牆
- 簡易防火牆建置與流量統計之三(轉)防火牆
- 簡易防火牆建置與流量統計之四(轉)防火牆
- iptables配置-Linux系統安全防火牆Linux防火牆
- Linux IPTables:如何新增防火牆規則Linux防火牆
- Linux中iptables防火牆的簡單配置Linux防火牆
- 基於iptables防火牆堵漏防火牆
- Centos iptables防火牆設定CentOS防火牆
- Linux系統iptables與Firewalld防火牆區別?Linux防火牆
- Linux 防火牆配置(iptables和firewalld)詳細教程。Linux防火牆
- 使用IP鏈建立Linux防火牆(轉)Linux防火牆
- Linux 防火牆:關於 iptables 和 firewalld 的那些事Linux防火牆
- Linux防火牆介紹和iptables常用命令Linux防火牆
- 用一臺linux主機做iptables防火牆薦Linux防火牆