iptables实现NAT

        Linux下实现代理服务器

 

环境: 
系统:Ubuntu10.4

服务器配置:网卡两块
PC机一台

 

网卡的配置:

 

eth0:\连接外网

IP:192.168.88.101

子网掩码:255.255.255.0

网关:192.168.88.1

DNS:192.168.88.1

注:(网卡0和网卡1的IP不能在一网段上)

 

eth1:\连接局域网

IP:192.168.8.2

子网掩码:255.255.255.0

网关:无

DNS:无

注:(eth1连接内网的网卡不需要填写网关和DNS)

 

PC:\IP的设置
IP:192.168.8.5

子网掩码:255.255.255.0

网关:192.168.8.2

DNS:192.168.8.2

注:(局域网的IP为代理服务器的IP段内,网关和DNS是代理服务器的IP)

 

一:

切换到root权限下,执行如下代码:

注:(完成以下三个步骤,在局域网内随便打开一个浏览器,能正常打开,访问成功。)

 

1.在内核中打开IP转发功能。

echo 1 > /proc/sys/net/ipv4/ip_forward

 

2.使局域网用户能访问internet所要做的nat

iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 192.168.88.101

 

3.在PREROUTING链中添加目的地址转换规则:

做DNAT,内网提供web服务:

iptables -t nat -I PREROUTING -i eth1 -p tcp --dpor 53 -j DNAT --to-destination 192.168.88.1

iptables -t nat -I PREROUTING -i eth1 -p udp --dpor 53 -j DNAT --to-destination 192.168.88.1

网卡eth1端口号53路由进入之前的包进行修改并做目标地址转换

 

上规则命令参数详解:

iptables -t nat:表名是指定nat表

-I:根据序号插入一条规则,PREROUTING:修改到来的包,

-i eth1:指定的数据包的接口为eth1

-p tcp:协议,意思只tcp内的类型

--dpor 53:用来匹配封包的目的地的端口号

-j DNAT:-j,指定具体的处理方法,DNAT,做目标地址转换

to-destination 192.168.88.1 :(destination或-d)用来匹配封包的目的地端口号

 

在POSTROUTING链中添加源地址换规则:

iptables -t nat -I POSTROUTING -o eth0 -s 192.168.8.0/24 -p tcp --dpor 53 -j SNAT --to-source 192.168.88.101:40000-50000

iptables -t nat -I POSTROUTING -o eth0 -s 192.168.8.0/24 -p udp --dpor 53 -j SNAT --to-source 192.168.88.101:40000-50000

由eth0地址为0到255之间端口号为53的出去包,做源地址转换规则

 

上规则命令参数详解:

iptables -t nat:表名是指定nat表

-I POSTROUTING:准备修改出去的包

-o eth0:指定封包要从那块网卡送出去

-s 192.168.8.0/24:指定规则操作源地址IP为0到255之间

-p tcp:协议,意思只tcp内的类型

--dpor 53:用来匹配封包的目的地的端口号

-j SNAT:-j,指定具体的处理方法,DNAT,做转源地址转换

--to-source 192.168.88.101:用来匹配封包的来源IP

40000-50000:端口号在四万到五万之间

 

 

二:

Iptables规则的使用,以下规则根据自己需要酌情添加

 

iptables -L              列出表/链中的所有规则。默认只列出filter表

iptables -F              -F清除 ,作用就是把 FILTRE TABLE 的所有链的规则都清空

Iptables -X                清除预设表filter中使用者自定链中的规则

 

iptables -p INPUT DROP

iptables -p OUTPUT ACCEPT

iptables -p FORWARD DROP

上面的意思是设定默认规则,可以不进行操作,,当超出了IPTABLES里filter表里的两个链规则(INPUT,FORWARD)时,不在这两个规则里的数据包怎么处理呢,那就是DROP(放弃).应该说这样配置是很安全的.我们要控制流入数据包而对于OUTPUT链,也就是流出的包我们不用做太多限制,而是采取ACCEPT,也就是说,不在着个规则里的包怎么办呢,那就是通过.

可以看出INPUT,FORWARD两个链采用的是允许什么包通过,而OUTPUT链采用的是不允许什么包通过.

这样设置还是挺合理的,当然你也可以三个链都DROP,但这样做我认为是没有必要的,而且要写的规则就会增加.但如果你只想要有限的几个规则是,如只做WEB服务器.还是推荐三个链都是DROP.

注:如果你是远程SSH登陆的话,当你输入第一个命令回车的时候就应该掉了.因为你没有设置任何规则.

怎么办,去本机操作呗!

 

iptables -A INPUT -s 192.168.8.5 -p tcp --dport 22 -j ACCEPT

iptables -A INPUT -p tcp --dport 22 -j DROP

如:我们只允许192.168.8.5的机器进行SSH连接,其余禁止连接

如果要允许,或限制一段IP地址可用 192.168.8.0/24 表示192.168.0.1-255端的所有IP.

 

iptables -P INPUT DROP

iptables -P FORWARD DROP

iptables -P OUTPUT DROP

关闭所有的端口

 
iptables -D FORWARD -p udp --dport 8000 -j REJECT
禁止QQ端口

 

iptables -A INPUT -p tcp -m multiport --source-port 25,53,80,100

源端口多端口的匹配,最多指定15个端口号,以英文逗号分隔符,注意端口号之间没有空格,使用必须有-p tcp或-p udp为前提条件

 

iptables -A INPUT -p tcp -m multiport --destination-port 25,53,80,100

目的端口多端口匹配,使用方法和源端口一样,唯一区别是他是匹配目的端口

 

iptables -A INPUT -m mac --mac-source 00-0C-29-75-E8-84

基于包的MAC源地址匹配,地址格式只能是!XX-XX-XX-XX-XX,也可以用英文感叹号"!"去反,意思是除此之外的地址都可以接受。

 

iptables -A INPUT -m limit --limit 3/hour

说明用来比对某段时间内封包的平均流量,上面的例子是用来比对:每小时平均流量是否超过一次 3 个封包。 除了每小时平均一次外,也可以每秒钟、每分钟或每天平均一次,默认值为每小时平均一次,参数如后: /second、 /minute、/day。 除了进行封包数量的比对外,设定这个参数也会在条件达成时,暂停封包的比对动作,以避免因骇客使用洪水攻击法,导致服务被阻断。

 

iptables -A FORWARD -s 192.168.8.0/24 -m limit --limit 100/s -j ACCEPT

iptables -A FORWARD -s 192.168.8.0/24 -j DROP

上例中将192.168.8.0网段中的主机网络速度限制为100KB/s。

 

iptables -A FORWARD -m iprange --src-range 192.168.8.100-192.168.8.200 -j DROP

限制某个IP 段内不可以上网。上例限制为:192.168.8.100到192.168.8.200之内的IP不可以上网。

 

 

 

 

 

 

iptables -I FORWARD -d www.baidu.com -j DROP

禁止服用户访问百度

标签: 无
返回文章列表 文章二维码
本页链接的二维码
打赏二维码