本文共 3021 字,大约阅读时间需要 10 分钟。
一: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" # 内部服务器私有ipexport 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 说明:本脚本没有启用内核的syn>
转载于:https://blog.51cto.com/3974020/1390757