|
|
有2个防火墙脚本...一个是一直用的,一个是最近找到的...
大家看看,我用那一个比较好呢??
以前一直用的脚本::
- #!/bin/sh
- #
- # firewall starting firewall
- #
- # chkconfig: 2345 98 01
- # description: setting firewall
- ##########################################################################
- # 设定参数
- ##########################################################################
- INNER_NET=192.168.0.0/24 # LAN 局域网 自由设定
- FWALL_IP=192.168.0.1 # 防火墙的IP 你的机器的真实IP
- INNER_PORT=eth1 # 局域网端IP
- OUTER_PORT=ppp0 # Wan端IP
- IPTABLES="/sbin/iptables" # iptables 命令
- MODPROBE="/sbin/modprobe" # modprobe 命令
- ##########################################################################
- # 模块的加载和设定为内核工作
- ##########################################################################
- $MODPROBE ip_tables
- $MODPROBE iptable_filter
- $MODPROBE ip_conntrack
- $MODPROBE iptable_nat
- $MODPROBE ip_nat_ftp
- $MODPROBE ip_conntrack_ftp
- $MODPROBE ipt_state
- $MODPROBE ipt_MASQUERADE
- $MODPROBE ipt_LOG
- $MODPROBE ipt_REJECT
- $MODPROBE ipt_limit
- # 允许IP masquerade(变换)
- echo 1 > /proc/sys/net/ipv4/ip_forward
- # 忽视ping的broadcast
- echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
- # 检查源IP
- for f in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 1 > $f; done
- # 记录不可能的(虚假)IP
- for f in /proc/sys/net/ipv4/conf/*/log_martians; do echo "1" > $f; done
- # 忽视ICMP redirect message
- for f in /proc/sys/net/ipv4/conf/*/accept_redirects; do echo 1 > $f; done
- ##########################################################################
- # 初始化规则
- ##########################################################################
- $IPTABLES -P INPUT DROP # 清空INPUT原始定义
- $IPTABLES -P OUTPUT DROP # 清空OUPUT原始定义
- $IPTABLES -P FORWARD DROP # 清空FORWARD原始定义
- $IPTABLES -F # flash chain
- $IPTABLES -F -t nat
- $IPTABLES -X # 删除用户定义的Chain
- ##########################################################################
- # 用户定义的chain
- ##########################################################################
- #
- # 记录并丢弃非法的包
- #
- $IPTABLES -N DROPPACKET # DROPPACKT chain的生成
- $IPTABLES -A DROPPACKET -j LOG --log-prefix "INVALID_PACKET: " \
- --log-level=3 -m limit --limit 1/s --limit-burst 10
- $IPTABLES -A DROPPACKET -j DROP
- #
- # 检查SYNFlood攻击的chain
- #
- $IPTABLES -N SYNFLOOD # SYNFLOOD chain的生成
- # 没有超过限定值的话返回
- $IPTABLES -A SYNFLOOD -m limit --limit 10/s --limit-burst 20 -j RETURN
- # 超过限定值,就视为SYNFLOOD攻击,记录并丢弃
- $IPTABLES -A SYNFLOOD -m limit --limit 1/s --limit-burst 10 -j LOG \
- --log-level=1 --log-prefix "SYNFLOOD: "
- $IPTABLES -A SYNFLOOD -j DROP
- #
- # 记录非法的Flag TCP,并丢弃
- #
- $IPTABLES -N DROPFLAGS # DROPFLAGS chain的生成
- $IPTABLES -A DROPFLAGS -j LOG --log-prefix "INVALID_FLAGS: " \
- --log-level=3 -m limit --limit 1/s --limit-burst 10
- $IPTABLES -A DROPFLAGS -j DROP
- #
- # 检查TCP Flag的非法组合
- #
- $IPTABLES -N CHKFLAGS
- $IPTABLES -A CHKFLAGS -p tcp --tcp-flags ACK,FIN FIN -j DROPFLAGS
- $IPTABLES -A CHKFLAGS -p tcp --tcp-flags ACK,PSH PSH -j DROPFLAGS
- $IPTABLES -A CHKFLAGS -p tcp --tcp-flags ACK,URG URG -j DROPFLAGS
- $IPTABLES -A CHKFLAGS -p tcp --tcp-flags FIN,RST FIN,RST -j DROPFLAGS
- $IPTABLES -A CHKFLAGS -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROPFLAGS
- $IPTABLES -A CHKFLAGS -p tcp --tcp-flags SYN,RST SYN,RST -j DROPFLAGS
- $IPTABLES -A CHKFLAGS -p tcp --tcp-flags ALL ALL -j DROPFLAGS
- $IPTABLES -A CHKFLAGS -p tcp --tcp-flags ALL NONE -j DROPFLAGS
- $IPTABLES -A CHKFLAGS -p tcp --tcp-flags ALL FIN,PSH,URG -j DROPFLAGS
- $IPTABLES -A CHKFLAGS -p tcp --tcp-flags ALL SYN,FIN,PSH,URG -j DROPFLAGS
- $IPTABLES -A CHKFLAGS -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROPFLAGS
- #
- # 拒绝 Microsoft 网络相关的FORWARD
- #
- $IPTABLES -N CHKMSNET
- $IPTABLES -A CHKMSNET -p tcp --dport 42 -j DROP # wins dup
- $IPTABLES -A CHKMSNET -p tcp --dport 135 -j DROP # MS-RPC
- $IPTABLES -A CHKMSNET -p udp --dport 135 -j DROP # MS-RPC
- $IPTABLES -A CHKMSNET -p udp --dport 137:138 -j DROP # MS browse
- $IPTABLES -A CHKMSNET -p udp --dport 137:138 -j DROP # MS browse
- $IPTABLES -A CHKMSNET -p tcp --dport 139 -j DROP # SMB
- $IPTABLES -A CHKMSNET -p tcp --dport 445 -j DROP # DHSMB
- ##########################################################################
- # INPUT Chain
- ##########################################################################
- # Localhost的话,全部许可
- $IPTABLES -A INPUT -i lo -j ACCEPT
- # 检查包的正确性
- $IPTABLES -A INPUT -m state --state INVALID -j DROPPACKET
- # 检查包是否是SYN攻击
- $IPTABLES -A INPUT -p tcp --syn -j SYNFLOOD
- # TCP FLAG的检查
- $IPTABLES -A INPUT -p tcp -j CHKFLAGS
- # 许可LAN内的连接
- $IPTABLES -A INPUT -i $INNER_PORT -s $INNER_NET -j ACCEPT
- # 许可已经建立的连接
- $IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
- # 检查是否是IP伪装
- $IPTABLES -A INPUT -i $OUTER_PORT -s $INNER_NET -j DROP
- #
- # 许可的服务(对外部公开的服务,在下面记述)
- #
- $IPTABLES -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT # SSH
- $IPTABLES -A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT # HTTP
- $IPTABLES -A INPUT -p tcp --dport 443 -m state --state NEW -j ACCEPT # HTTPS
- $IPTABLES -A INPUT -p tcp --dport 53 -m state --state NEW -j ACCEPT # DOMAIN(DNS)
- $IPTABLES -A INPUT -p udp --dport 53 -m state --state NEW -j ACCEPT # DOMAIN(DNS)
- $IPTABLES -A INPUT -m state --state NEW -m tcp -p tcp --dport 20000:30000 -j ACCEPT # PASV_PORTS
- $IPTABLES -A INPUT -p tcp --dport 21 -m state --state NEW -j ACCEPT # FTP
- # 拒绝AUTH请求
- $IPTABLES -A INPUT -p tcp --dport 113 -j REJECT --reject-with tcp-reset
- # icmp(IN)
- $IPTABLES -A INPUT -p icmp --icmp-type echo-request -s $INNER_NET -j ACCEPT
- $IPTABLES -A INPUT -p icmp --icmp-type echo-reply -s $INNER_NET -j ACCEPT
- $IPTABLES -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
- $IPTABLES -A INPUT -p icmp --icmp-type source-quench -j ACCEPT
- $IPTABLES -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT
- $IPTABLES -A INPUT -p icmp --icmp-type parameter-problem -j ACCEPT
- # 除了上面以外所有的包,都记录下来,并通过Default Policy丢弃
- $IPTABLES -A INPUT -j LOG --log-prefix "UNDEFIND_INPUT: " \
- --log-level=3 -m limit --limit 1/s --limit-burst 10
- ##########################################################################
- # OUTPUT Chain
- ##########################################################################
- # 许可由localhost出来的包
- $IPTABLES -A OUTPUT -o lo -j ACCEPT
- # TCP FLAG的检查
- $IPTABLES -A OUTPUT -p tcp -j CHKFLAGS
- # 许可从服务器到Lan的连接
- $IPTABLES -A OUTPUT -o $INNER_PORT -s $FWALL_IP -j ACCEPT
- # 检查Microsoft网络
- $IPTABLES -A OUTPUT -j CHKMSNET
- # 许可已经连接的包
- $IPTABLES -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
- # 许可由服务器到互联网的新加连接
- $IPTABLES -A OUTPUT -m state --state NEW -j ACCEPT
- # icmp(OUT)
- $IPTABLES -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
- $IPTABLES -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
- $IPTABLES -A OUTPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
- $IPTABLES -A OUTPUT -p icmp --icmp-type fragmentation-needed -j ACCEPT
- $IPTABLES -A OUTPUT -p icmp --icmp-type source-quench -j ACCEPT
- $IPTABLES -A OUTPUT -p icmp --icmp-type parameter-problem -j ACCEPT
- # 除了上面以外所有的包,都记录下来,并通过Default Policy丢弃
- $IPTABLES -A OUTPUT -j LOG --log-prefix "UNDEFIND_ICMP: " --log-level=3 \
- -m limit --limit 1/s --limit-burst 10
- ##########################################################################
- # IP变换
- ##########################################################################
- # 检查Microsoft网络
- $IPTABLES -A FORWARD -j CHKMSNET
- # 许可Lan内机器的IP变换
- $IPTABLES -t nat -A POSTROUTING -o $OUTER_PORT -s $INNER_NET -j MASQUERADE
- # 从外部到Lan的连接,许可已经连接的FROWARD
- $IPTABLES -A FORWARD -i $OUTER_PORT -o $INNER_PORT -d $INNER_NET -m state \
- --state ESTABLISHED,RELATED -j ACCEPT
- # 许可LAN到外部的连接
- $IPTABLES -A FORWARD -i $INNER_PORT -o $OUTER_PORT -s $INNER_NET -m state \
- --state NEW,ESTABLISHED,RELATED -j ACCEPT
- exit 0
复制代码
最近找的脚本(台湾鸟哥的脚本)
- #!/bin/bash
- #
- # ========================================================
- # 脚本说明:
- # 欢迎使用iptables.rule这个script来建立您的防火墙
- # 这个script还需要您自己根据您的环境设定后,方可工作
- # 基本规则定义为::[拒绝所有,开放特定]
- #
- # 强烈建议
- # 不了解Linux防火墙机制iptables的朋友使用这个script
- # 可能会不太了解每个命令的意义,如果这样
- # 欢迎您参考以下几个网页:
- # http://www.study-area.org/linux/servers/linux_nat.htm
- # http://linux.vbird.org/linux_server/0240network-secure-1.php
- # http://linux.vbird.org/linux_server/0250simple_firewall.php
- #
- # 使用说明
- # 请先将这个脚本权限更改为可执行:
- # chmod 755 iptables.rule
- # 将此脚本放置在 /usr/local/virus/iptables 下
- # mkdir -p /usr/local/virus/iptables
- # mv /您的完整的路径/iptables.rule /usr/local/virus/iptables
- # 执行测试:
- # /usr/local/virus/iptables/iptables.rule
- # iptables -L -n (这个动作检查防火墙规则)
- # 将下面一行加入 /etc/rc.d/rc.local 中
- # /usr/local/virus/iptables/iptables.rule
- # 取消防火墙
- # iptables -F
- # iptables -X
- # iptables -t nat -F
- # iptables -t nat -X
- #
- # ========================================================
- # 版权提示:
- # 此脚本为 GPL 授权,任何人都可以使用
- # 使用此 scripts 发生任何问题时
- # 本人不负任何责任
- # VBird <vbird@tsai.adsldns.org>
- # ========================================================
- # 历史纪录:
- # 2002/08/20 VBird 首次
- # 2003/04/26 VBird 加入砍站软体的相关执行文件
- # 2003/08/25 VBird 修改 INPUT 的 Policy 为 DROP
- # ========================================================
- # 0.0 Please key in your parameters
- # 这个EXTIF后面接的为[对外的网卡"WAN"]
- # 一般来说,如果是ADSL/FTTH等,就是"ppp0"
- # 如果是固定IP,那么就是"eth0"
- # The interface that connect Internet
- EXTIF="ppp0"
- # 下面的INIF为对内网卡(Lan)
- # 如果您的Linux没有对内网卡,请留空
- # INIF=""
- #
- # the inside interface. if you don't have this one
- # and you must let this be black ex> INIF=""
- INIF="eth1"
- INNET="192.168.1.0/24" # This is for NAT's network
- # 1.0 测试您的Linux内核版本及防火墙模组
- kver=`uname -r | cut -c 1-3`
- if [ "$kver" != "2.4" ] && [ "$kver" != "2.5" ]; then
- echo "Your Linux Kernel Version may not be suported by this script!"
- echo "This scripts will not be runing"
- exit
- fi
- ipchains=`lsmod | grep ipchains`
- if [ "$ipchains" != "" ]; then
- echo "unload ipchains in your system"
- rmmod ipchains 2> /dev/null
- fi
- # 2.0 载入模组
- PATH=/sbin:/bin:/usr/sbin:/usr/bin
- export PATH EXTIF INIF INNET
- modprobe ip_tables > /dev/null 2>&1
- modprobe iptable_nat > /dev/null 2>&1
- modprobe ip_nat_ftp > /dev/null 2>&1
- modprobe ip_nat_irc > /dev/null 2>&1
- modprobe ip_conntrack > /dev/null 2>&1
- modprobe ip_conntrack_ftp > /dev/null 2>&1
- modprobe ip_conntrack_irc > /dev/null 2>&1
- # 3.0 清除所有的防火墙规则
- /sbin/iptables -F
- /sbin/iptables -X
- /sbin/iptables -Z
- /sbin/iptables -F -t nat
- /sbin/iptables -X -t nat
- /sbin/iptables -Z -t nat
- /sbin/iptables -P INPUT DROP
- /sbin/iptables -P OUTPUT ACCEPT
- /sbin/iptables -P FORWARD ACCEPT
- /sbin/iptables -t nat -P PREROUTING ACCEPT
- /sbin/iptables -t nat -P POSTROUTING ACCEPT
- /sbin/iptables -t nat -P OUTPUT ACCEPT
- # 4.0 先允许任何网络,包括lo这个界面
- # 以及刚才指定的内部界面(LAN)
- # 当然,重点是启动您的Linux为NAT服务器功能
- /sbin/iptables -A INPUT -i lo -j ACCEPT
- if [ "$INIF" != "" ]; then
- /sbin/iptables -A INPUT -i $INIF -j ACCEPT
- echo "1" > /proc/sys/net/ipv4/ip_forward
- /sbin/iptables -t nat -A POSTROUTING -s $INNET -o $EXTIF -j MASQUERADE
- fi
- # 5.0 开始载入任何可以拒绝的网络设定的文件
- # 下面2个文件可以自行建立
- if [ -f /usr/local/virus/iptables/iptables.deny ]; then
- sh /usr/local/virus/iptables/iptables.deny
- fi
- if [ -f /usr/local/virus/iptables/iptables.allow ]; then
- sh /usr/local/virus/iptables/iptables.allow
- fi
- # 6.0 下面这个文件如果存在,则执行!!
- # 请注意::这个文件与防止砍站的软件有关
- if [ -f /usr/local/virus/httpd-err/iptables.http ]; then
- sh /usr/local/virus/httpd-err/iptables.http
- fi
-
- # 7.0 允许ICMP封包,允许已建立的连接通过
- /sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
- AICMP="0 3 3/4 4 11 12 14 16 18"
- for tyicmp in $AICMP
- do
- /sbin/iptables -A INPUT -i $EXTIF -p icmp --icmp-type $tyicmp -j ACCEPT
- done
- # 8.0 Allow services,请关闭您的服务器没有开放的服务..在行前加"#"..
- /sbin/iptables -A INPUT -p TCP -i $EXTIF --dport 22 -j ACCEPT # SSH
- /sbin/iptables -A INPUT -p TCP -i $EXTIF --dport 25 -j ACCEPT # SMTP
- /sbin/iptables -A INPUT -p UDP -i $EXTIF --dport 53 -j ACCEPT # DNS
- /sbin/iptables -A INPUT -p TCP -i $EXTIF --dport 53 -j ACCEPT # DNS
- /sbin/iptables -A INPUT -p TCP -i $EXTIF --dport 80 -j ACCEPT # WWW
- /sbin/iptables -A INPUT -p TCP -i $EXTIF --dport 110 -j ACCEPT # POP3
- /sbin/iptables -A INPUT -p TCP -i $EXTIF --dport 113 -j ACCEPT # auth
- /sbin/iptables -A INPUT -p tcp -i eth1 -s 192.168.1.0/24 --dport 137:139 -j ACCEPT #SAMBA
- /sbin/iptables -A INPUT -p udp -i eth1 -s 192.168.1.0/24 --dport 137:139 -j ACCEPT #Samba
复制代码 |
|