Chinaunix首页 | 论坛 | 博客
  • 博客访问: 920307
  • 博文数量: 130
  • 博客积分: 10010
  • 博客等级: 上将
  • 技术积分: 1900
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-24 16:41
文章存档

2009年(17)

2008年(113)

我的朋友

分类: LINUX

2009-05-19 23:07:32

六、应用实例
  #!/bin/sh
  #
  # 石牌国小防火墙设定指令稿
  # 2002/8/27
  # 设定者:李忠宪(修改自 iptables tutorial 1.1.11 by Oskar Andreasson
  # 原文件是依 DMZ 需求设计,已根据校园 NAT 网络之需求修改,其余改动部份包括:
  # 新增通讯协议定义区块
  # 新增执行时,自动清除已设定之规则
  # 支援 FTP
  # 修改所有规则,改采 multiport 方式以简化规则
  # 原文件仅支持 IP 伪装(多对一对应),已扩充为支持一对一对应及多对多对应
  # 原文件仅支援 DNS WEB,新增 ftpmailwamPCAnywheressh......等多种服务器
  # 修改若干规则设定上的小错误
  #
  # 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 eset 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
  
  # LAN 进入防火墙主机的 DHCP 封包,予以放行,只有当防火墙担任 DHCP 时才使用
  #$IPTABLES -A INPUT -p UDP -i $LAN_IFACE --dport 67 --sport 68 -j ACCEPT
  
  # WAN 进入防火墙主机的所有封包,检查是否为响应封包,若是则予以放行
  $IPTABLES -A INPUT -p ALL -d $INET_IP -m state --state ESTABLISHED,RELATED -j ACCEPT
  
  # 限制过滤规则的比对频率为每分钟平均流量三个封包(超过上限的封包将暂停比对),并将瞬间流量设定为一次最多处理三个封包(超过上限的封包将丢弃不予处理),这类封包通常是骇客用来进行阻断式攻击 
  $IPTABLES -A INPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level INFO --log-prefix "IPT INPUT packet died: "
  
  #
  # 4.1.5 FORWARD chain(过滤要通过防火墙的封包)
  #
  #
  # 通过防火墙的 TCP 封包必须先进行 bad_tcp_packets 过滤
  $IPTABLES -A FORWARD -p TCP -j bad_tcp_packets
  
  # LAN 要到 WAN 的封包通通放行
  $IPTABLES -A FORWARD -i $LAN_IFACE -o $INET_IFACE -j ACCEPT
  
  # WAN 要到 LAN 的封包仅放行回应封包
  $IPTABLES -A FORWARD -i $INET_IFACE -o $LAN_IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT
  
  # 允许来自 WAN Ping 封包,递送到校内所有的服务器
  $IPTABLES -A FORWARD -p ICMP -i $INET_IFACE -o $LAN_IFACE -d $LAN_HTTP1_IP -j icmp_packets
  $IPTABLES -A FORWARD -p ICMP -i $INET_IFACE -o $LAN_IFACE -d $LAN_HTTP2_IP -j icmp_packets
  $IPTABLES -A FORWARD -p ICMP -i $INET_IFACE -o $LAN_IFACE -d $LAN_HTTP3_IP -j icmp_packets
  $IPTABLES -A FORWARD -p ICMP -i $INET_IFACE -o $LAN_IFACE -d $LAN_HTTP4_IP -j icmp_packets
  $IPTABLES -A FORWARD -p ICMP -i $INET_IFACE -o $LAN_IFACE -d $LAN_HTTP5_IP -j icmp_packets
  $IPTABLES -A FORWARD -p ICMP -i $INET_IFACE -o $LAN_IFACE -d $LAN_HTTP6_IP -j icmp_packets
  
  # 允许来自 WAN HTTPHTTPS 封包,递送到校内所有的 WEB 服务器
  $IPTABLES -A FORWARD -p TCP -i $INET_IFACE -o $LAN_IFACE -d $LAN_HTTP1_IP -m multiport --dport $HTTP,$HTTPS -j allowed
  $IPTABLES -A FORWARD -p TCP -i $INET_IFACE -o $LAN_IFACE -d $LAN_HTTP2_IP -m multiport --dport $HTTP,$HTTPS -j allowed
  $IPTABLES -A FORWARD -p TCP -i $INET_IFACE -o $LAN_IFACE -d $LAN_HTTP3_IP -m multiport --dport $HTTP,$HTTPS -j allowed
  $IPTABLES -A FORWARD -p TCP -i $INET_IFACE -o $LAN_IFACE -d $LAN_HTTP4_IP -m multiport --dport $HTTP,$HTTPS -j allowed
  $IPTABLES -A FORWARD -p TCP -i $INET_IFACE -o $LAN_IFACE -d $LAN_HTTP5_IP -m multiport --dport $HTTP,$HTTPS -j allowed
  $IPTABLES -A FORWARD -p TCP -i $INET_IFACE -o $LAN_IFACE -d $LAN_HTTP6_IP -m multiport --dport $HTTP,$HTTPS -j allowed
  
  # 允许来自 WAN FTP 封包,递送到校内所有的 FTP 服务器
  $IPTABLES -A FORWARD -p TCP -i $INET_IFACE -o $LAN_IFACE -d $LAN_FTP1_IP -m multiport --dport $FTP,$FTP_DATA -j allowed
  $IPTABLES -A FORWARD -p TCP -i $INET_IFACE -o $LAN_IFACE -d $LAN_FTP2_IP -m multiport --dport $FTP,$FTP_DATA -j allowed
  $IPTABLES -A FORWARD -p TCP -i $INET_IFACE -o $LAN_IFACE -d $LAN_FTP3_IP -m multiport --dport $FTP,$FTP_DATA -j allowed
  
  # 允许来自 WAN SMTPPOP3IMAP 封包,递送到校内所有的 MAIL 服务器
  $IPTABLES -A FORWARD -p TCP -i $INET_IFACE -o $LAN_IFACE -d $LAN_MAIL1_IP -m multiport --dport $SMTP,$POP3,$IMAP -j allowed
  $IPTABLES -A FORWARD -p TCP -i $INET_IFACE -o $LAN_IFACE -d $LAN_MAIL2_IP -m multiport --dport $SMTP,$POP3,$IMAP -j allowed
  
  # 允许来自 WAN SSHTELNETWEBMINWAM 封包,递送到校内所有的 LINUX 服务器
  $IPTABLES -A FORWARD -p TCP -i $INET_IFACE -o $LAN_IFACE -d $LAN_WAM1_IP -m multiport --dport $SSH,$TELNET,$WEBMIN,$WAM -j allowed
  $IPTABLES -A FORWARD -p TCP -i $INET_IFACE -o $LAN_IFACE -d $LAN_WAM2_IP -m multiport --dport $SSH,$TELNET,$WEBMIN,$WAM -j allowed
  
  # 允许来自 WAN PCanywhere 封包,递送到校内所有的 PCanywhere 服务器
  $IPTABLES -A FORWARD -p TCP -i $INET_IFACE -o $LAN_IFACE -d $LAN_PCAW1_IP --dport $PCAW_TCP -j allowed
  $IPTABLES -A FORWARD -p UDP -i $INET_IFACE -o $LAN_IFACE -d $LAN_PCAW1_IP --dport $PCAW_UDP -j ACCEPT
  $IPTABLES -A FORWARD -p TCP -i $INET_IFACE -o $LAN_IFACE -d $LAN_PCAW2_IP --dport $PCAW_TCP -j allowed
  $IPTABLES -A FORWARD -p UDP -i $INET_IFACE -o $LAN_IFACE -d $LAN_PCAW2_IP --dport $PCAW_UDP -j ACCEPT
  
  # 允许来自 WAN DNS 封包,递送到校内的 DNS 服务器
  $IPTABLES -A FORWARD -p TCP -i $INET_IFACE -o $LAN_IFACE -d $LAN_DNS_IP --dport $DNS -j allowed
  $IPTABLES -A FORWARD -p UDP -i $INET_IFACE -o $LAN_IFACE -d $LAN_DNS_IP --dport $DNS -j ACCEPT
  
  # 限制过滤规则的比对频率为每分钟平均流量三个封包(超过上限的封包将暂停比对),并将瞬间流量设定为一次最多处理三个封包(超过上限的封包将丢弃不予处理),这类封包通常是骇客用来进行阻断式攻击 
  $IPTABLES -A FORWARD -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level DEBUG --log-prefix "IPT FORWARD packet died: "
  
  #
  # 4.1.6 OUTPUT chain(过滤从防火墙送出的封包)
  #
  #
  # 从防火墙送出的 TCP 封包必须先进行 bad_tcp_packets 过滤
  $IPTABLES -A OUTPUT -p TCP -j bad_tcp_packets
  
  # 从防火墙网卡送出的所有封包,通通放行
  $IPTABLES -A OUTPUT -p ALL -s $LO_IP -j ACCEPT
  $IPTABLES -A OUTPUT -p ALL -s $LAN_IP -j ACCEPT
  $IPTABLES -A OUTPUT -p ALL -s $INET_IP -j ACCEPT
  
  # 限制过滤规则的比对频率为每分钟平均流量三个封包(超过上限的封包将暂停比对),并将瞬间流量设定为一次最多处理三个封包(超过上限的封包将丢弃不予处理),这类封包通常是骇客用来进行阻断式攻击 
  $IPTABLES -A OUTPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level DEBUG --log-prefix "IPT OUTPUT packet died: "
  
  ######
  # 4.2 nat table
  #
  #
  # 4.2.1 Set policies
  #
  #
  # 4.2.2 Create user specified chains
  #
  #
  # 4.2.3 Create content in user specified chains
  #
  #
  # 4.2.4 PREROUTING chain(定义目的地地址转译)
  #
  # WAN 要到校内服务器的封包,在封包过滤前先转译目的地 IP NAT IP
  $IPTABLES -t nat -A PREROUTING -d $HTTP1_IP -j DNAT --to-destination $LAN_HTTP1_IP
  $IPTABLES -t nat -A PREROUTING -d $HTTP2_IP -j DNAT --to-destination $LAN_HTTP2_IP
  $IPTABLES -t nat -A PREROUTING -d $HTTP3_IP -j DNAT --to-destination $LAN_HTTP3_IP
  $IPTABLES -t nat -A PREROUTING -d $HTTP4_IP -j DNAT --to-destination $LAN_HTTP4_IP
  $IPTABLES -t nat -A PREROUTING -d $HTTP5_IP -j DNAT --to-destination $LAN_HTTP5_IP
  $IPTABLES -t nat -A PREROUTING -d $HTTP6_IP -j DNAT --to-destination $LAN_HTTP6_IP
  
  #
  # 4.2.5 POSTROUTING chain(定义来源地址转译)
  #
  # 从校内服务器要到 WAN 的封包,在送出之前先转译来源 IP NIC IP,配合上面区块的设定,就可以做到一对一对应
  $IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -s $LAN_HTTP1_IP -j SNAT --to-source $HTTP1_IP
  $IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -s $LAN_HTTP2_IP -j SNAT --to-source $HTTP2_IP
  $IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -s $LAN_HTTP3_IP -j SNAT --to-source $HTTP3_IP
  $IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -s $LAN_HTTP4_IP -j SNAT --to-source $HTTP4_IP
  $IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -s $LAN_HTTP5_IP -j SNAT --to-source $HTTP5_IP
  $IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -s $LAN_HTTP6_IP -j SNAT --to-source $HTTP6_IP
  # 从校内一般单机要到 WAN 的封包,在送出之前先转译来源 IP 为预设的 NIC IP,这就是多对一对应,若指定成 IP 范围,就变成多对多对应,例如本范例即是如此
  $IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -j SNAT --to-source $IP_POOL
  
  #
  # 4.2.6 OUTPUT chain
  #
  ######
  # 4.3 mangle table
  #
  #
  # 4.3.1 Set policies
  #
  #
  # 4.3.2 Create user specified chains
  #
  #
  # 4.3.3 Create content in user specified chains
  #
  #
  # 4.3.4 PREROUTING chain
  #
  #
  # 4.3.5 INPUT chain
  #
  #
  # 4.3.6 FORWARD chain
  #
  #
  # 4.3.7 OUTPUT chain
  #
  #
  # 4.3.8 POSTROUTING chain
  #
  
  七、Log 分析
  分析 iptables 防火墙 Log 的免费软件相当多,底下仅介绍 iptables_logger_v0.3,这个软件提供一个 perl 程序,可以读取系统 LOG,并将数据写入 MySql 数据库,然后还提供 php 程序,可以从数据库读取数据,整理成网页提供浏览,因此要安装此分析软件,必须先安装 perlphpmysql apache,有关这些套件的安装在这里不再介绍,请自行参考相关文件,或参加 Linux 进阶班课程。你可以从这里取得 iptables_logger_v0.3 程序,其安装程序如下:
  安装数据表:
  这个套件解压缩后,可以看到有一个数据夹叫做 sql,数据夹内有一个 sql 的指令稿叫做 db.sql,这个指令稿是用来建立摆放联机纪录所需的数据表,请利用以下指令来安装,如果您还不熟悉 mysql 的指令,请自行阅读 man mysql 文件。
  root@firewall sql# mysql -u root -p(以 root 身分登入 MySql 主控台)
  mysql>; create database iptables;(建立一个数据库叫做 iptables,数据库也可以自行命名,但是要记得修改相关程序)
  mysql>; grant create,select,insert on iptables.* to iptables_admin@localhost identified by 'xx';(将 iptables 数据库新建、读取和写入权限授权给 iptables_admin 这个账号,并限制只能从本机联机,密码为 xx,请自行修改上述指令中之账号与密码)
  mysql>; grant create,select on iptables.* to iptables_user@localhost identified by 'xx';(将 iptables 数据库读取权限授权给 iptables_user 这个账号,并限制只能从本机联机,密码为 xx,请自行修改上述指令中之账号与密码)
  root@firewall sql# cat db.sql | mysql -u iptables_admin -p iptables(以 iptables_admin 身分来执行 db.sql,如果你改了数据库的名字,请记得修改 db.sql
  修改 iptables 指令稿:
  由于这支 Log 分析程序是以读取系统 LOG 加以分析后才汇入到数据库的方法,来处理联机纪录,并非使用 ULOG 直接由 iptables 将纪录写入 mysql 数据库,感觉上效能比较差,但在 ULOG 机制尚未被实体化之前,这也不失为一个好的解决方案。
  原则上只要在 iptables 指令稿中有产生 LOG 的动作,这些信息就会被分析汇入到数据表(由 feed_db.pl 负责这个工作),特别要注意的是 LOG 产生时会加入一个标头(prefix),程序是透过标头来分析这笔 LOG 的意义,请将 LOG 标头取名为 IPTABLES DROP IPTABLES ACCEPT,以方便事后的统计。范例如下:
  首先建立一个新的规则炼 LOG_DROP,这个规则炼用来将要丢弃的封包先 LOG 到系统日志文件,然后再丢弃。
  iptables -N LOG_DROP
  iptables -A LOG_DROP -j LOG --log-tcp-options --log-ip-options --log-prefix '[IPTABLES DROP] : '
  iptables -A LOG_DROP -j DROP
  接着修改所有规则,只要是需进行 DROP 动作,都改为跳到 LOG_DROP 规则炼,例如:
  $IPTABLES -A bad_tcp_packets -p TCP ! --syn -m state --state NEW -j DROP
  改为
  $IPTABLES -A bad_tcp_packets -p TCP ! --syn -m state --state NEW -j LOG_DROP
  至于需要进行 ACCEPT 处理的规则也如法炮制,先建立 LOG_ACCEPT 规则炼:
  iptables -N LOG_ACCEPT
  iptables -A LOG_ACCEPT -j LOG --log-tcp-options --log-ip-options --log-prefix '[IPTABLES ACCEPT] : '
  iptables -A LOG_ACCEPT -j ACCEPT
  接着修改所有规则,例如:
  $IPTABLES -A allowed -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT
  改为
  $IPTABLES -A allowed -p TCP -m state --state ESTABLISHED,RELATED -j LOG_ACCEPT
  安装显示分析结果的 PHP 程序:
  在解压缩的数据夹中,找到一个叫做 web 的子数据夹,里面就是要给人从网页浏览分析结果的 PHP 程序,如果你的 Apache 已经设定好支持 php php_mysql,那么只要将此数据夹复制到 Apache 的根文件目录就行了。方法如下:
  cp -R web /var/www/iptables
  拷贝完成后请修改 config.php ,目的是为了让 PHP 程序执行时,能以正确的账号密码连上 MySql ,以便从数据库读取数据,请找到底下三行:
  $db_host="localhost";(一般不需修改,除非数据库在另一台主机上)
  $db_user="iptables_user";(修改为仅具有读取权限的账号,如果之前安装数据库有自设帐号的话)
  $db_password="xxxx";(请将密码修改为自设的密码)
  安装 feed_db.pl
  前面已经介绍过这支程序的作用,请务必修改这支程序中有关数据库联机的 SQL 指令,将指令中的账号密码,改成你当初所设定的账号密码,建议最好不要用 root 身分联机,以免影响防火墙的安全性。这支程序是放在解压缩后数据夹内的 scripts 子数据夹,请修改下面这三行:
  my $dsn = 'DBI:mysql:iptables:localhost';(请将 iptables 改成你自订的数据库名称)
  my $db_user_name = 'iptables_admin';(请将 iptables_admin 改成你自订的管理账号)
  my $db_password = 'xxxx';(请将 xxxx 改成管理账号的密码)
  程序修改好后,请将它拷贝到 /usr/local/bin 数据夹,接着将程序执行起来,注意:这支程序会跑一个无穷尽循环,持续分析系统 LOG,因此必须在背景执行,同时只能有一支程序执行,以避免造成 IO 过大的负载,执行方式如下:
  tail --follow=name --retry /var/log/syslog | /usr/local/bin/feed_db.pl &
  如果这些动作都作了,但程序并未执行成功,有可能是因为 perl_DBI BD 套件没安装,请自行用 rpm 补装该套件。
  查看分析结果:
  完成以上所有安装步骤后,就可以坐下来享受一下成果,请打开浏览器输入底下网址
  http://192.xx.1.254/iptables
  安装 LOG 分析后的安全防范:
  防火墙上安装越多套件,系统安全性也就越低,改进的方法有两个:
  1. apache mysql 架设在内部网络的一台机器上,防火墙上仅安装 mysql client,这样可以避免 apache mysql 的漏洞被骇客利用
  2. 在防火墙上设定规则,仅允许来自内部的网络,进行 HTTP MySql 联机,这个方法比较简单,本文所介绍的 iptables 范例也是采用此法,缺点是无法在校外查看 LOG 分析结果 。。。
阅读(1169) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2009-05-22 14:05:17

好服月租型IT服务台登录中国,诚邀阁下莅临体验! 月租型ITSM软件,注册即可使用! 详情请登录官方网站:http://www.servicezon.com