1、linux下使用iptables NAT上网
linux# vi /root/iptables_nat.sh
#echo "Starting kerryhu-iptables rules..."
#!/bin/bash
# BY kerryhu
# QQ:263205768
# MAIL:king_819@163.com
# BLOG:http://kerry.blog.51cto.com
#this is a common firewall created by 2010-3-22
#启用内核ip转发
echo 1 > /proc/sys/net/ipv4/ip_forward
#加载需要的模块 
modprobe iptable_nat 
modprobe ip_conntrack_ftp 
modprobe ip_nat_ftp
 
#define some variable
IPT=/sbin/iptables
LAN="192.168.0.0/24"
WAN="222.118.115.55"
DNS="61.177.7.1:53"
#Remove any existing rules
$IPT -F
$IPT -t nat -F
#setting default firewall policy
$IPT -P FORWARD DROP
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
#setting for loopback interface
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
#外面53端口的UDP数据进来
$IPT -A INPUT -i eth0 -p udp --sport 53 -j ACCEPT
#允许局域网设置DNS为eth1(网关内网IP)
iptables -A PREROUTING -t nat -p udp -s $LAN -d 192.168.0.1 --dport 53 -j DNAT --to-destination $DNS
#允许局域网设置DNS为eth0(网磁外网IP)
iptables -A PREROUTING -t nat -p udp -s $LAN -d $WAN --dport 53 -j DNAT --to-destination $DNS
# Stealth Scans and TCP State Flags
# All of the bits are cleared
$IPT -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
# SYN and FIN are both set
$IPT -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
# SYN and RST are both set
$IPT -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
# FIN and RST are both set
$IPT -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j DROP
# FIN is the only bit set, without the expected accompanying ACK
$IPT -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j DROP
# PSH is the only bit set, without the expected accompanying ACK
$IPT -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j DROP
# URG is the only bit set, without the expected accompanying ACK
$IPT -A INPUT -p tcp --tcp-flags ACK,URG URG -j DROP
 
#允许外网访问里面
$IPT -A FORWARD -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
#允许外网访问本机
$IPT -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
#允许内网访问本机
$IPT -A INPUT -i eth1 -p tcp -s $LAN --dport 22 -j ACCEPT
#$IPT -A INPUT -i eth1 -p tcp -s 192.168.0.23 -m mac --mac-source 00:00:F0:71:23:60 --dport 22 -j ACCEPT
$IPT -A INPUT -i eth1 -s $LAN -m state --state ESTABLISHED,RELATED -j ACCEPT
#允许本机访问内网
$IPT -A OUTPUT -o eth1 -d  $LAN -j ACCEPT
#允许外面的UDP数据进来
#$IPT -A INPUT -i eth0 -p udp  -j ACCEPT
#允许本机上网(如果专作服务器就可以不要)
#时钟同步
$IPT -A OUTPUT -o eth0 -d 192.43.244.18 -j ACCEPT
#允许ping出
$IPT -A OUTPUT -o eth0  -p icmp -j ACCEPT
$IPT -A OUTPUT -o eth0 -p udp  --dport 53 -j ACCEPT
$IPT -A OUTPUT -o eth0 -p tcp  --dport 80 -j ACCEPT
$IPT -A OUTPUT -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
#允许内网外出
#$IPT -A FORWARD -p tcp -s $LAN -j ACCEPT
#允许内网外出(只允许访问外网的80、53端口)
$IPT -A FORWARD -p tcp -s $LAN --dport 80 -j ACCEPT
$IPT -A FORWARD -p udp -s $LAN --dport 53 -j ACCEPT
$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
#内网外出实现IP+MAC绑定
#$IPT -A FORWARD -s 192.168.0.23 -m mac --mac-source 00:00:F0:71:23:60 -j ACCEPT
#实现NAT多电脑上网
$IPT -t nat -A POSTROUTING -o eth0 -s $LAN -j SNAT --to $WAN
# 将 对于 80、443、21端口的访问 重定向到内网服务器上
#$IPT -t nat -A PREROUTING -i eth0 -d $WAN -p tcp --dport 80 -j DNAT --to 192.168.0.23:80
$IPT -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.0.23:80
$IPT -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j DNAT --to 192.168.0.23:443
$IPT -A FORWARD -i eth0 -p tcp --dport 80 -d 192.168.0.23 -j ACCEPT
$IPT -A FORWARD -i eth0 -p tcp --dport 443 -d 192.168.0.23 -j ACCEPT
#将本机的10010端口映射到内网服务器上的3389端口上
$IPT -t nat -A PREROUTING -i eth0 -p tcp --dport 10010 -j DNAT --to 192.168.0.23:3389
$IPT -A FORWARD -i eth0 -p tcp --dport 3389 -d 192.168.0.23 -j ACCEPT
#ftp转发
$IPT -t nat -A PREROUTING -i eth0 -p tcp --dport 21 -j DNAT --to 192.168.0.24:21
$IPT -A FORWARD -i eth0 -p tcp --dport 21 -d 192.168.0.24 -j ACCEPT
$IPT -A FORWARD -i eth0 -s 192.168.0.24 -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT
$IPT -A FORWARD -i eth0 -s 192.168.0.24 -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -o eth0 -d 192.168.0.24 -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT
chmod +x /root/iptables_nat.sh
echo "/root/iptables_nat.sh"  >> /etc/rc.local
2、iptables批量绑定IP-MAC地址的脚本
通过LanHelper等软件或ARP命令得到 ip_mac.txt 文件格式如下:
172.20.0.3 00:00:F0:71:23:60
172.20.0.6 00:16:76:09:0F:23
172.20.0.10 00:13:8F:26:F9:A6
172.20.0.11 00:16:EC:9A:FF:A9
172.20.0.13 00:14:85:93:26:5A
172.20.0.14 00:13:8F:30:40:7F
172.20.0.16 00:16:EC:26:B6:F4
……
IP地址和MAC地址之间只有一个空格
预设转发包为禁止通过
iptables -P FORWARD DROP
然后再根据绑定MAC机器让他通过转发包
iptables -A FORWARD -s 172.20.0.3 -m mac --mac-source 00:00:F0:71:23:60 -j ACCEPT
写个脚本批量绑定MAC机器,以后有新机器加入的时候只需要在ethers.txt文件中增加就行了。

以下内容为程序代码:
cat /root/ip_mac.txt | while read line
do
    iptables -A FORWARD -s ${line% *} -m mac --mac-source ${line#* } -j ACCEPT
done

以下内容为程序代码:
while read sip mac
do
    iptables -A FORWARD -s $sip -m mac --mac-source $mac -j ACCEPT
done < /root/ip_mac.txt

以下内容为程序代码:
tail -f /root/ip_mac.txt | while read sip mac
do
    iptables -A FORWARD -s $sip -m mac --mac-source $mac -j ACCEPT
done &


以下内容为程序代码:
#!/bin/sh
arp | while read ip type mac flags iface
do
   echo $ip $mac >> /root/ip_mac.txt
done
ethers.txt只是做限制iptables转发的例子文件名而已,vi手动添加,只需要添加一次就行了,不要重复。
如果只是简单在网关上面绑定IP和MAC地址防止局域网ARP欺骗,只需要拷贝ip_mac.txt到/root/ ,执行arp -f /root/ip_mac.txt 绑定命令,并把此命令加入到/etc/rc.d/rc.local 中。
3、内网实现NAT代理上网,使用外网地址池
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 222.33.44.50-222.33.44.60
Linux下单网卡绑定多IP(外网接口eth0上绑定多IP)
在/etc/sysconfig/network-scripts目录里面创建一个名为ifcfg-eth0:0的文件,添加内容如下:
DEVICE=eth0:0
IPADDR=222.33.44.51 
BROADCAST=222.33.44.255
NETMASK=255.255.255.0
ONBOOT=yes
ifcfg-eth0:1
DEVICE=eth0:1
IPADDR=222.33.44.52
BROADCAST=222.33.44.255
NETMASK=255.255.255.0
ONBOOT=yes
本文转自king_819 51CTO博客,原文链接:http://blog.51cto.com/kerry/289443,如需转载请自行联系原作者

linux下使用iptables NAT上网相关推荐

  1. linux下防火墙iptables用法规则详解

    linux下防火墙iptables用法规则详解 分享者: du52.com 邮件: wangaibo168@163.com 主页: http://www.du52.com linux下防火墙iptab ...

  2. Linux下用iptables做端口映射

    Linux下用iptables做端口映射详细过程 在CentOS5.4上用iptables配置了端口映射,讲述详细的配置过程,供大家参考. [实现功能] server-A eth0      119. ...

  3. 图文:centos5.3下VMware虚拟机NAT上网实现

    图文:centos5.3下VMware虚拟机NAT上网实现 1.打开VMware,Fedora 4关机状态,在Devices区域中鼠标双击Ethernet,选择"NAT". 2.2 ...

  4. linux配置指定ip访问指定端口号,操作系统linux和dos linux下通过iptables只允许指定ip地址访问指定端...

    一篇 : linux下通过iptables只允许指定ip地址访问指定端口的设置方法 首先,清除所有预设置 iptables -F#清除预设表filter中的所有规则链的规则 iptables -X#清 ...

  5. Linux下防火墙iptables用法规则详及其防火墙配置

    原博主文章更美丽: http://www.cnblogs.com/yi-meng/p/3213925.html iptables规则 规则--顾名思义就是规矩和原则,和现实生活中的事情是一样的,国有国 ...

  6. 如何在Linux下用ADSL拨号上网

    1  首先,你必须安装相应的ADSL拨号软件.平常用的redhat发行版本中,带有pppoe这个rpm包. 我们通过下面的命令实现: [root@Server root]# rpm -qa|grep ...

  7. linux下防火墙iptables原理及使用

    iptables简介 netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火 ...

  8. Linux下为iptables增加layer7补丁(Linux2.6.25内核)

    系统环境:RHEL5 [ 2.6.18-8.el5xen ] 软件环境: http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.25.19.tar ...

  9. linux下双网卡共享上网配置

    双网卡共享上网配置 ###环境 主机1: 192.168.1.1(外网)eth0192.168.0.1(内网)eth1 主机2:192.168.0.2 eth0###配置主机1 1.临时开启转发功能s ...

  10. linux7关闭isdn,在Linux下使用ISDN拨号上网

    作 者: 张中华 任务:在一台Linux机器上,通过ISDN拨号上网. 经过尝试,我成功地做到了这一点.我的配置为:蓝点Linux 2.0,Kernel-2.2.16,isdn4 v3.1pre1,上 ...

最新文章

  1. VScode的撤销操作的快捷键
  2. 在CentOS 6.3 64bit上安装tsar并监控Apache Traffic Server
  3. 【转载】mysql常用函数汇总
  4. 原生js写三级联动 java_原生js三级联动的简单实现代码
  5. 使用wlan接收器经常重新登录怎么办
  6. python有大括号吗_只有我一个人觉得Python取消了大括号而显得结构更加混乱了吗?...
  7. 2018企业面试总汇(答案请自行搜罗) 新增19年阿里面题(反向拓展技术栈)
  8. apt-get 更新指定软件_GrandPerspective for mac(磁盘管理软件)
  9. 辐射3计算机,辐射3与道德
  10. Ms08-067漏洞抓鸡 方法
  11. java毕业设计老鹳窝旅游网源码+lw文档+mybatis+系统+mysql数据库+调试
  12. Linux编程基础期末冲刺——第3章用户组与用户组管理
  13. btrfs管理及应用
  14. 研发管理-质量与效率提升-混沌工程在携程的实践
  15. 微信小程序实现简单定位功能
  16. NLP之句子相似度之入门篇
  17. VB.net中字符串转16进制,string转byte,串口发送文本直接转16进制数据
  18. 2020中南大学研究生招生夏令营机试题
  19. 《Java语言高级特性(阿里云大学)》笔记 第7~14章 类库+正则+国际化+比较器(文档+思维导图)
  20. 基于FPGA的DDS信号发生器(vivado版本)

热门文章

  1. C语言调用pow( )函数实现幂运算
  2. 渝粤题库 陕西师范大学 《文学概论》作业
  3. 王阳明:致良知就是让你成为真正的自己
  4. mysql rpm mar_Centos7.3离线(rpm方式)安装mysql服务
  5. Youtube视频码率,帧率,分辨率那些事
  6. 《东周列国志》第二十回 晋献公违卜立骊姬 楚成王平乱相子文
  7. oracle onlinelog 11G,从alert日志看Oracle 11g Datagurad日志传输(下)
  8. TS2339: Property 'debounceTime' does not exist on type 'Observableany'. - Angular 6
  9. OTA 差分升级包的制作
  10. Win密钥.Win7旗舰版