一:SNAT和DNAT原理
1.SNAT 和 DNAT
#SNAT 配合POSTROUTING链使用,修改来源的私有地址为公网地址
#DNAT 配合PREROUTING链使用,修改数据报头目的地址为私有地址
2.vim /etc/sysctl.conf #开启iptables防火墙filter表里的FORWARD链
net.ipv4.ip_forward = 1
运行:sysctl -p命令使设置生效
二:实现要求
(1).内部服务器与:ftp(20,21)/http(80)/snmp(25)/ssh(22)
(2).内部服务器能够解析域名和ping通域名或者IP地址
(3).能够访问NAT服务器上的ssh服务,其余服务都拒绝
三:脚本编写
-
#!/bin/bash
-
# firewall.sh
-
# <说明:本脚本没有启用内核的SYN Cookie模块,对于ping回应请求是通过防火墙的相应设置来阻挡>#
-
# NAT服务器(eth0 && eth1)
-
# 1.外部网络使用eth0网卡,ip:10.10.54.151/24
-
# 2.内部网络使用eth1网卡,ip:172.31.31.254/24
-
# 内部服务器(eth0)
-
# 网卡eth0 ip:172.31.31.51/24 gateway:172.31.31.254
-
###########################第一部分:系统环境设置
-
# 相关变量设置
-
eth_pub="eth0" # public ip网卡
-
eth_pri="eth1" # private ip 网卡
-
ip_out="10.10.54.151" # NAT服务器对外共有ip
-
innet="172.31.31.0/24" # 内部网络
-
ip_in="172.31.31.51" # 内部服务器私有ip
-
export eth_pub eth_pri innet ip_out ip_in
-
# 设置/etc/sysctl.conf 开启filter表的FORWARD链
-
sed -i "s/\(net.ipv4.ip_forward\) = 0/\1 = 1/g" /etc/sysctl.conf
-
##########################第二部分:针对NAT服务器本身的防火墙设置
-
# 1.清除规则,设置默认策略,开放lo接口
-
iptables -F
-
iptables -X
-
iptables -Z
-
iptables -P INPUT DROP # NAT服务器INPUT链设置原则:关闭所有连接,开放特定服务
-
iptables -P OUTPUT ACCEPT
-
iptables -P FORWARD ACCEPT
-
iptables -A INPUT -i lo -j ACCEPT # loopback接口
-
# 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
-
if [ -f /usr/local/virus/httpd-err/iptables.http ]; then
-
sh /usr/local/virus/httpd-err/iptables.http
-
fi
-
# 3.让NAT服务器通过主动向外发出请求而相应的数据包可以进入本机
-
iptables -t filter -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-
# 4.允许外部主机访问NAT服务器上的ssh服务,其余全部拒绝
-
iptables -t filter -A INPUT -p tcp --sport 1024:65534 --dport 22 -j ACCEPT
-
# 5.仅允许内部服务器ping NAT服务器
-
iptables -A INPUT -i $eth_pri -p icmp -s $innet -j ACCEPT
-
##########################第三部分,与内部服务器有关的防火墙设置有关
-
# 1.清除nat表的规则,设置默认策略
-
iptables -F -t nat
-
iptables -X -t nat
-
iptables -Z -t nat
-
iptables -t nat -P POSTROUTING ACCEPT
-
iptables -t nat -P PREROUTING ACCEPT
-
iptables -t nat -P OUTPUT ACCEPT
-
# 2.内部服务器开放特定服务:ftp/http/snmp/ssh
-
iptables -t nat -A PREROUTING -i $eth_pub -p tcp --sport 1024:65534 --dport 20 -j DNAT --to-destination ${ip_in}:20 # ftp/20
-
iptables -t nat -A PREROUTING -i $eth_pub -p tcp --sport 1024:65534 --dport 21 -j DNAT --to-destination ${ip_in}:21 # ftp/21
-
iptables -t nat -A PREROUTING -i $eth_pub -p tcp --sport 1024:65534 --dport 80 -j DNAT --to-destination ${ip_in}:80 # http/80
-
iptables -t nat -A PREROUTING -i $eth_pub -p tcp --sport 1024:65534 --dport 25 -j DNAT --to-destination ${ip_in}:25 # snmp/25
-
iptables -t nat -A PREROUTING -i $eth_pub -p tcp --sport 1024:65534 --dport 4000 -j DNAT --to-destination ${ip_in}:22 # ssh/22
-
# 3.内部服务器可以使用域名解析和ping
-
iptables -t nat -A POSTROUTING -o $eth_pub -p udp --sport 1024:65534 --dport 53 -j SNAT --to-source ${ip_out} # 域名解析
-
iptables -t nat -A POSTROUTING -o $eth_pub -p icmp -j SNAT --to-source ${ip_out} # ping服
-
务
4.存储规则
/etc/init.d/iptables save
阅读(542) | 评论(0) | 转发(0) |