iptables 脚本实例

#!/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

时间: 2024-10-02 20:05:24

iptables 脚本实例的相关文章

RedHat iptables配置实例

iptables配置实例 iptables 基本命令使用举例一.链的基本操作  1.清除所有的规则.  1)清除预设表filter中所有规则链中的规则.  # iptables -F  2)清除预设表filter中使用者自定链中的规则.  #iptables -X  #iptables -Z  2.设置链的默认策略.一般有两种方法.  1)首先允许所有的包,然后再禁止有危险的包通过放火墙.  #iptables -P INPUT ACCEPT  #iptables -P OUTPUT ACCEP

7个shell脚本实例--shell脚本练习必备

概述 看多shell脚本实例自然就会有shell脚本的编写思路了,所以我一般比较推荐看脚本实例来练习shell脚本.下面分享几个shell脚本实例. 一.监测Nginx访问日志Exception情况,并做相应动作 假设服务器环境为lnmp,监控出现Exception错误,并钉钉通知. #场景: #1.访问日志文件的路径:/data/logs/plateno-coupon-server/plateno-coupon-server.log#2.脚本死循环,每10秒检测一次,10秒的日志条数为300条

[转]关于Unity3D对象和脚本实例调用的顺序探究

http://blog.csdn.net/liangzg_2011/article/details/8150844 关于Unity3D对象和脚本实例调用的顺序探究 我们先来看一些有趣Unity实例顺序的小实验.有图有真相!! 注:以上打印的代码语句如下: [csharp] view plaincopy <span style="font-size:18px;">    void Start () { print("-----" + this.transf

iptables经典实例

Q:一局域网192.168.1.0/24,有web和ftp服务器192.168.1.10.192.168.1.11,网关linux,内网eth0,IP为192.168.1.1,外网eth1,IP为a.b.c.d,怎样作NAT能使内外网都能访问公司的服务器? A:# web# 用DNAT作端口映射iptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 80 -j DNAT --to 192.168.1.10# 用SNAT作源地址转换(关键),

shell之脚本实例

一 检查用户是否是root权限的方式:#!/bin/bashROOT_UID=0 # Root has $UID 0.E_WRONG_USER=65 # Not root? E_NOSUCHUSER=70SUCCESS=0 if [ "$UID" -ne "$ROOT_UID" ]then echo echo "Only root can run this script." echo exit $E_WRONG_USERelse echo ech

常用iptables配置实例

常用iptables配置实例 iptables命令可用于配置Linux的包过滤规则,常用于实现防火墙.NAT.咋一看iptables的配置很复杂,掌握规律后,其实用iptables完成指定任务并不难,下面我们通过具体实例,学习iptables的详细用法. 1.删除已有规则 在新设定iptables规则时,我们一般先确保旧规则被清除,用以下命令清除旧规则: iptables -F (or iptables --flush) 2.设置chain策略 对于filter table,默认的chain策略

Loadrunner之HTTP接口测试脚本实例

Loadrunner之HTTP接口测试脚本实例 接口测试的原理是通过测试程序模拟客户端向服务器发送请求报文,服务器接收请求报文后对相应的报文做出处理然后再把应答报文发送给客户端,客户端接收应答报文结果与预期结果进行比对的过程,接口测试可以通过Java发送 http post或者get请求来实现,也可以通过loadrunner来实现,今天介绍下loadrunner接口自动化测试实例: loadrunner接口测试原理是web_submit_data函数发送post或者get请求,将测试用例数据进行

VBS脚本实例

一.一键升级哨位台核心板程序脚本. ############################################################ Set ws=WScript.CreateObject("wscript.shell")PATH= createobject("Scripting.FileSystemObject").GetFile(Wscript.ScriptFullName).ParentFolder.PathIP="192.1

【shell脚本实例】一个恶作剧—— kill掉占用CPU较高的matlab进程

我们实验室有台服务器,博士们在服务器上跑MATLAB,基本都是4核都是超过95%的CPU占用,想了个恶作剧的shell 定时kill掉MATLAB程序,是不是很邪恶啊,哈哈~~~  不过我只是干过一次,因为老伯们也不容易啊,屌丝何苦为难屌丝... 废话不多说了上脚本! ? 1 2 3 找出CPU占用超过90%的MATLAB进程,grep -v 去掉"grep"进程 pids=`ps aux|grep "MATLAB"|grep -v "grep"