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
......................................
本文出自 “聆听未来” 博客,请务必保留此出处http://blog.chinaunix.net/space.php?uid=9419692&do=blog&id=3182675