博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NAT+www的发布
阅读量:4041 次
发布时间:2019-05-24

本文共 6937 字,大约阅读时间需要 23 分钟。

#!/bin/bash

#ll于2008年4月9日修改for www-linux。
###--------------------------------------------------------------------###
#以下是定义变量
###--------------------------------------------------------------------###
PATH=/sbin:/usr/sbin:/bin:/usr/bin

#定义外网接口,确定网卡,如果是拨号就用ppp0

EXT_IF=eth1
#定义内网接口
INT_IF=eth0
#定义内网地址范围
LAN_IP_RANGE=“192.168.0.0/16”
#定义内外网固定ip
EXT_IP=“218.28.131.150”
INT_IP=“192.168.30.10”

#port1为外网开放端口port2为内网开放端口

TRUSTED_TCP_PORT1="22 53 "
TRUSTED_UDP_PORT1=“53”
TRUSTED_TCP_PORT2=“22 53 80”
TRUSTED_UDP_PORT2=“53 80”
ALLOWED_ICMP=“0 3 3/4 4 11 12 14 16 18”

###--------------------------------------------------------------------###

#确定iptables安装情况
###--------------------------------------------------------------------###
which iptables &>/dev/null || {
echo
echo “$(basename $0): iptables程序没有找到”
echo “请先安装好这个程序.”
echo
exit 1
}
###--------------------------------------------------------------------###
#废掉ipchains,这是针对redhat以前的版本,新版已经把iptables嵌到内核里了
###--------------------------------------------------------------------###
lsmod | grep ipchains &>/dev/null && {
echo “正在废掉ipchains服务…”
rmmod ipchains
}

###--------------------------------------------------------------------###

#装载模块modules
###--------------------------------------------------------------------###
echo “模块正在载人…”
modprobe ip_tables &>/dev/null || {
echo -n "$(basename KaTeX parse error: Expected 'EOF', got '}' at position 40: …o "请检查" exit 3 }̲ for file in /l…(basename $file)
modprobe KaTeX parse error: Expected '}', got 'EOF' at end of input: …_*.o do module=(basename $file)
modprobe ${module%.*} &>/dev/null
done
#添加ipp2p模块
#insmod /root/ipp2p-0.7.4/ipt_ipp2p.o

#----ipforwarding-------

echo “打开foward功能”
echo “1” > /proc/sys/net/ipv4/ip_forward

#传统的防syn flood的方法

echo “1” > /proc/sys/net/ipv4/tcp_syncookies
echo “2048” > /proc/sys/net/ipv4/tcp_max_syn_backlog

###---------------------------------------------------###

#清除先前的设定
###---------------------------------------------------###
echo “正在清除先前的设定…”
#清除预定表filter中,所有规则链中的规则
iptables -F
#清除预定表filter中,使用者自定链中的规则
iptables -X
#清除预定表mangle中,所有规则链中的规则
iptables -F -t mangle
#清除预定表mangle中,使用者自定链中的规则
iptables -X -t mangle
#清除nat表中的规则
iptables -F -t nat
iptables -X -t nat
iptables -Z -t nat

###---------------------------------------------------###

#设定预设规则
###---------------------------------------------------###
#预设规则要么为全部丢弃,要么为全部接受
#本列为全部丢弃,然后逐步开放,这是安全系数很高的设法
#若目标为DROP,则policy设为ACCEPT;若目标为ACCEPT,则policy设为DROP
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

#TCP的设定

------------- 端口开启 :sercies1为外网,services2为内网

echo “开启所要的端口services1…”

iptables -N services1
for PORT in $TRUSTED_TCP_PORT1; do
iptables -A services1 -p tcp --dport $PORT -j ACCEPT
done
for PORT in $TRUSTED_UDP_PORT1; do
iptables -A services1 -p udp --dport $PORT -j ACCEPT
done
#iptables -A services1 -p TCP --syn -j ACCEPT
iptables -A services1 -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT

echo “开启所要的端口services2…”

iptables -N services2
for PORT in $TRUSTED_TCP_PORT2; do
iptables -A services2 -p tcp --dport $PORT -j ACCEPT
done
for PORT in $TRUSTED_UDP_PORT2; do
iptables -A services2 -p udp --dport $PORT -j ACCEPT
done
#iptables -A services2 -p TCP --syn -j ACCEPT
iptables -A services2 -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT

#我们丢弃坏的TCP包

iptables -A FORWARD -p TCP ! --syn -m state --state NEW -j LOG --log-prefix “New not syn:”

iptables -A FORWARD -p TCP ! --syn -m state --state NEW -j DROP

#外网只有一个公用ip的情况

iptables -t nat -A POSTROUTING -o $EXT_IF -j MASQUERADE
echo “局域网共享的已实现,请试用局域网机器”

#这一步实现局域网内部机对外部网开放

port forwarding

for PORT in $FWD_TCP_PORT; do

iptables -A FORWARD -i $EXT_IF -o $INT_IF -d $SERVER_IP -p tcp --dport $PORT -m state --state NEW -j ACCEPT
iptables -t nat -A PREROUTING -d $EXT_IP -p tcp --dport $PORT -j DNAT --to-destination $SERVER_IP
iptables -t nat -A POSTROUTING -s $LAN -d $SERVER_IP -p tcp --dport $PORT -j SNAT --to-source $INT_IP
done

for PORT in $FWD_UDP_PORT; do

iptables -A FORWARD -i $EXT_IF -o $INT_IF -d $SERVER_IP -p udp --dport $PORT -m state --state NEW -j ACCEPT
iptables -t nat -A PREROUTING -d $EXT_IP -p udp --dport $PORT -j DNAT --to-destination $SERVER_IP
iptables -t nat -A POSTROUTING -s $LAN -d $SERVER_IP -p udp --dport $PORT -j SNAT --to-source $INT_IP
done

#凡对$EXT_IP:80连线者,则转址到192.168.30.10:80

iptables -t nat -A PREROUTING -d 218.28.131.150 -p tcp --dport 80 -j DNAT --to-destination 192.168.30.10:80
iptables -A FORWARD -p tcp -d 192.168.30.10 --dport 80 -j ACCEPT
iptables -t nat -I POSTROUTING -s 192.168.0.0/255.255.0.0 -p tcp -d 192.168.30.10 --dport 80 -j SNAT --to 192.168.30.10

#192.168.30.12装有提供ssh服务

#iptables -t nat -A PREROUTING -d 218.28.131.150 -p tcp --dport 22 -j DNAT --to-destination 192.168.30.12:22
#iptables -A FORWARD -p tcp -d 192.168.30.12 --dport 22 -j ACCEPT
#允许内网机使用外网的IP访问内网机,把内网机的IP转换成网关IP
#iptables -t nat -I POSTROUTING -s 192.168.0.0/255.255.0.0 -p tcp -d 192.168.30.12 --dport 22 -j SNAT --to 192.168.12.2

#允许要转向的包

iptables -A FORWARD -i $INT_IF -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT
#对于不管来自哪里的ip碎片都进行控制,允许每秒通过100个碎片

iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT

#icmp包通过的控制,防止icmp黑客攻击对不管来自哪里的icmp包都进行限制,允许每秒通过一个包,该限制触发的条件是10个包

#这一条是针对oicq等使用udp服务而接收所有的udp包

iptables -A FORWARD -p udp -d $LAN_IP_RANGE -i $EXT_IF -j ACCEPT

#防止外网用内网ip欺骗

iptables -t nat -A PREROUTING -i $EXT_IF -s 192.168.0.0/16 -j DROP
iptables -t nat -A PREROUTING -i $EXT_IF -s 10.0.0.0/8 -j DROP
iptables -t nat -A PREROUTING -i $EXT_IF -s 172.16.0.0/12 -j DROP

#------------以下是关于网关本身的安全设置------------

#允许ping网关但限制
iptables -A INPUT -p icmp -m limit --limit 6/m --limit-burst 5 -j ACCEPT

#开放services端口

iptables -A INPUT -i $EXT_IF -p tcp -j services1
iptables -A OUTPUT -o $EXT_IF -p tcp -j services1
iptables -A INPUT -i $INT_IF -p tcp -j services2
iptables -A OUTPUT -o $INT_IF -p tcp -j services2

#开放主机的ssh对外联系,使外部能以ssh访问服务器

iptables -A OUTPUT -o $EXT_IF -p tcp -s $EXT_IP --sport 1024:65535 -d any/0 --dport 22 -j ACCEPT
iptables -A INPUT -i $EXT_IF -p tcp ! --syn -s any/0 --sport 22 -d $EXT_IP --dport 1024:65535 -j ACCEPT

#防止轻量型DDOS

iptables -N syn-flood
iptables -A INPUT -p tcp --syn -j syn-flood
iptables -I syn-flood -p tcp -m limit --limit 3/s --limit-burst 6 -j RETURN
iptables -A syn-flood -j REJECT

#把DOS IP给封掉

#iptables -I INPUT -s 211.1.0.0/16 -j DROP
#网络测试用
#iptables -A INPUT -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
#iptables -A OUTPUT -p icmp -j ACCEPT

KaTeX parse error: Expected 'EOF', got '&' at position 28: …tus | grep pid &̲>/dev/null && {…(ifconfig | grep $INT_IF -A 1 | awk /inet/ {print KaTeX parse error: Expected 'EOF', got '}' at position 2: 2}̲ | sed -e s/add…INT_IP" ]; then

echo
echo “$(basename $0): I N T I F 没 有 I P 存 在 " e c h o " 请 检 查 INT_IF没有IP存在" echo "请检查 INTIFIP"echo"INT_IF是否正确配置了”
echo
exit 3
fi
}
exit 0

EOS

转载地址:http://ziodi.baihongyu.com/

你可能感兴趣的文章
IP报文格式学习笔记
查看>>
autohotkey快捷键显示隐藏文件和文件扩展名
查看>>
Linux中的进程
查看>>
学习python(1)——环境与常识
查看>>
学习设计模式(3)——单例模式和类的成员函数中的静态变量的作用域
查看>>
自然计算时间复杂度杂谈
查看>>
当前主要目标和工作
查看>>
使用 Springboot 对 Kettle 进行调度开发
查看>>
一文看清HBase的使用场景
查看>>
解析zookeeper的工作流程
查看>>
搞定Java面试中的数据结构问题
查看>>
慢慢欣赏linux make uImage流程
查看>>
linux内核学习(7)脱胎换骨解压缩的内核
查看>>
以太网基础知识
查看>>
慢慢欣赏linux 内核模块引用
查看>>
kprobe学习
查看>>
慢慢欣赏linux phy驱动初始化2
查看>>
慢慢欣赏linux CPU占用率学习
查看>>
2020年终总结
查看>>
Homebrew指令集
查看>>