linux防火墙shell脚本,linux中使用shell脚本配置iptables防火墙

要放假了,今天实在是闲得蛋疼,本来只想写个配置iptables的脚本的,没想到被自己搞得这么复杂了,还是分享出来给大家,有兴趣的可以自己再改改.

ps:本脚本只支持centos5和centos6,不支持centos 7,并且在脚本里也限制了.

脚本内容:

#!/bin/sh

# By rocdk890

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin

export PATH

#Begin

start(){

sshport=`netstat -ntlp|grep sshd |awk -F: '{if($4!="")print $4}'`

# Require root to run this script.

echo "  check user......"

if [[ $(whoami) != root ]];then

echo "Please run this script as root !"

exit 1

fi

echo "  check lsb_release....."

chlsb=`rpm -qa|grep redhat-lsb|wc -l`

if [ $chlsb -ge 1 ];then

echo "  has installed redhat-lsb."

else

echo "  no found. install redhat-lsb......"

yum -y install redhat-lsb

fi

#===============================================================================

#this script is only for CentOS 5 and CentOS 6

#check the OS

#===============================================================================

version=`lsb_release -r |awk '{print substr($2,1,1)}'`

if [ $version != 5 ] || [ $version != 6 ];then

echo "the platform is ok !"

else

echo "this script is only for CentOS 5 or CentOS 6 !"

exit 1

fi

#iptables setting

echo "Iptables Setting..."

/sbin/iptables -P INPUT ACCEPT

#清空所有规则

/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 -X -t mangle

#允许来自于lo接口的数据包,通过127.0.0.1访问本地服务

/sbin/iptables -A INPUT -i lo -j ACCEPT

#允许dns和ntp的数据通过

/sbin/iptables -A INPUT -p udp -m udp --sport 53 -j ACCEPT

/sbin/iptables -A INPUT -p udp -m udp --sport 123 -j ACCEPT

#限制对内部封包的发送速度

/sbin/iptables -A INPUT -f -m limit --limit 100/sec --limit-burst 100 -j ACCEPT

/sbin/iptables -A INPUT -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -m limit --limit 20/sec --limit-burst 200 -j ACCEPT

#/sbin/iptables -A INPUT -p icmp -m limit --limit 12/min --limit-burst 5 -j DROP

#限制建立联机的转发速度

/sbin/iptables -A FORWARD -f -m limit --limit 100/sec --limit-burst 100 -j ACCEPT

/sbin/iptables -A FORWARD -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -m limit --limit 20/sec --limit-burst 200 -j ACCEPT

#开放ssh端口

/sbin/iptables -A INPUT -p tcp --dport $sshport -j ACCEPT

#开放web服务默认端口80

/sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT

#开放https服务默认端口443

#/sbin/iptables -A INPUT -p tcp --dport 443 -j ACCEPT

#开放指定ip,指定端口

#/sbin/iptables -A INPUT -p tcp -s 100.240.143.33 --dport 8080 -j ACCEPT

#允许ping

/sbin/iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT

#允许TCP建立连接,接受成功状态握手

/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

/sbin/iptables -A INPUT -m state --state INVALID,NEW -j DROP

#屏蔽规则外请求

/sbin/iptables -P INPUT DROP

/sbin/iptables -P FORWARD DROP

BADIPS="`curl -s http://feeds.dshield.org/block.txt | awk '/^[1-9]/ {print $1 "/" $3}'`"

if [ "$BADIPS" ];then

for ip in $BADIPS

do

iptables -I INPUT -s $ip -j DROP

done

fi

}

stop(){

echo "Cleaning your Iptables:..."

iptables -F

iptables -X

iptables -Z

iptables -P INPUT ACCEPT

iptables -P OUTPUT ACCEPT

/etc/init.d/iptables stop

if [ "$?" == "0" ];then

echo "Done!"

fi

}

save(){

echo "Save your Iptables:..."

/etc/init.d/iptables save

/etc/init.d/iptables restart

}

case "$1" in

start)

start

;;

stop)

stop

;;

restart)

stop && start

;;

save)

start && save

;;

*)

echo $"Usage: $0 {start|stop|restart|save}"

exit 1

esac

exit 0

#End

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值