一个对IpCop有用的Iptables脚本

  一个对IpCop有用的iptables脚本(朋友写的),不记得是哪一个写的了,麻烦你mail(ayihu@qq.com)下告诉我一声:

#!/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)
# 拒绝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

时间: 2024-09-21 22:58:55

一个对IpCop有用的Iptables脚本的相关文章

简单有用的SQL脚本 (行列互转,查询一个表内相同纪录等)_mssql2005

行列互转 复制代码 代码如下: create table test(id int,name varchar(20),quarter int,profile int) insert into test values(1,'a',1,1000) insert into test values(1,'a',2,2000) insert into test values(1,'a',3,4000) insert into test values(1,'a',4,5000) insert into tes

MLSBS dev分支,iptables脚本增加特性

#MLSBS git的dev分支 MLSBS is the abbreviation of "My linux's bash script"! "MLSBS"是"My linux's bash script"的缩写linux运维技术人员日常需要写一堆脚本来简化工作量."MLSBS"的目的就是把我日常在linux下的工作通过脚本整合到一个项目中,需要的时候几个点击就可以完成任务了.(其实,写这脚本的最初原因是,我有一些搞开发朋友

值得收藏的几个有用的Javascript脚本

javascript|脚本 用javascript对中文的unicode编码和反编码 <script> function unicode(s){ var len=s.length; var rs=""; for(var i=0;i<len;i++){ var k=s.substring(i,i+1); rs+=""+s.charCodeAt(i)+";"; } return rs; } function runicode(s){

iptables脚本模板

注意:以下只是部分总结,并没有进行验证,只做本人参考,后续将会验证之 #/bin/bash # #===============<<load modules>>=================== # # 整理核心支持模块之清单 #/sbin/depmod -a # #modprobe the modules we need # #/sbin/modprobe ip_conntrack #/sbin/modprobe ip_conntrack_ftp #/sbin/modprob

一个经典实用的iptables shell脚本

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://navyaijm.blog.51cto.com/4647068/816634 这个iptables脚本不错,很实用,根据实际应用改一下就可以自己用.分享出来,供大家来参考.原作者佚名.源代码如下: #!/bin/sh # modprobe ipt_MASQUERADE modprobe ip_conntrack_ftp modprobe ip_nat_ftp iptables -

保护你的Web服务器 iptables防火墙脚本全解读

本文假设你已经对iptables有基本的了解,否则请先阅读iptables入门. 在我们的Web服务器上,系统的默认策略是INPUT为DROP,OUTPUT:FORWARD链为ACCEPT,DROP则设置得比较宽松,因为我们知道出去的数据包比较安全. 准备工作 为了验证脚本的通用性,我特地查看了服务器的内核及iptables版本: # uname -aLinux ud50041 2.6.9-34.ELsmp #1 SMP Fri Feb 24 16:54:53 EST 2006 i686 i68

Linux下针对路由功能配置iptables的方法详解

  作为公司上网的路由器需要实现的功能有nat地址转换.dhcp.dns缓存.流量控制.应用程序控制,nat地址转换通过iptables可以直 接实现,dhcp服务需要安装dhcpd,dns缓存功能需要使用bind,流量控制可以使用tc,应用程序控制:例如对qq的封锁可以使用 netfilter-layer7-v2.22+17-protocols-2009-05-28.tar.gz来实现 1.网络规划 操作系统是centos5.8 2.安装dhcpd 代码如下: yum install dhcp

Clearbox 3:很酷的仿Lightbox脚本

LightBox是一个很酷的,也是很有用的js脚本,可以很方便的查看页面中的图片.但是自从Lightbox诞生之后,一大批的仿Lightbox的脚本就不断涌现,其中不乏优秀的完全超越Lightbox的作品,我们之前也收集过< 10个最佳Mootools Lightbox效果脚本收集>和< 10个最佳jQuery Lightbox效果插件收集>今天就向大家介绍一下 clearbox 3,它在实现lightbox基本功能的同时,也有很多创新之处. Clearbox 是一个独立的脚本,不

SQL Server可写脚本和编程扩展SSIS包

微软的SQL Server 2005中用来替代数据传输服务(DTS)的SQL Server综合服务(SSIS),包含了很多工具用于导入数据并将其转换为有意义的信息,而不仅仅是被动的导入.但是还有一点要注意的是,你会发现这个新的SSIS工具有时候并不能完全覆盖你要做的所有事情. 因此,微软提供了两种基本方法来扩展SSIS的功能.一种方法对那些没有很多编程经验,或者是不需要编写复杂程序的人们来说相对简单;另一种方法就是复杂的,它可以让喜欢挑战的程序员深入SSIS,对其进行很大程度上的扩展. 简单方式