您的位置:首页 > 其它

iptables filter表案例,iptables nat表应用

2018-03-23 20:52 691 查看
iptables 用法复习



iptables filter表案例

需求:把80端口,21端口放行,22端口指定ip段放行



#!/bin/bash
ipt="/user/sbin/iptables"
$ipt -F  // 清空规则
$ipt -P INPUT DROP //
$ipt -P OUTPUT ACCEPT //
$ipt -P FORWARD ACCEPT //
$ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
$ipt -A INPUT -s 192.168.133.0/24 -p tcp --dport 22 -j ACCEPT //放行22端口
$ipt -A INPUT -p tcp --dport 80 -j ACCEPT // 放行80端口
$ipt -A INPUT -p tcp --dport 21 -j ACCEPT //

Iptables参数 -m state --state <状态>

Iptables参数

-m state --state <状态>

有数种状态,状态有:

▪ INVALID:无效的封包,例如数据破损的封包状态

▪ ESTABLISHED:已经联机成功的联机状态;

▪ NEW:想要新建立联机的封包状态;

▪ RELATED:这个最常用!表示这个封包是与我们主机发送出去的封包有关,
可能是响应封包或者是联机成功之后的传送封包!这个状态很常被设定,
因为设定了他之后,只要未来由本机发送出去的封包,
即使我们没有设定封包的 INPUT 规则,该有关的封包还是可以进入我们主机, 可以简化相当多的设定规则。

执行脚本,查看规则已经生效,但为写入配置文件,service iptables restart恢复原规则



icmp 示例:禁掉ping本地,但可以ping通外网

iptables -I INPUT -p icmp --icmp -type 8 -j DROP

nat表应用案例



1:让b机器连接外网

先在虚拟机中克隆一个linux系统b

在系统a中添加网卡,默认选项,完成



添加lan区段,并选择添加的区段



给系统b也添加一个网卡,选择上一步添加的区段,同时取消连接b的第一个网卡



启动a系统

设置新添加网卡ip

ifconfig ens37 192.168.99.1/24 // ip随意指定




启动b系统也设置网卡ip,要和a的网卡在一个网段

ifconfig ens37 192.168.99.99/24 // ip随意指定

a系统ping b系统,成功联通。

[root@glinux-01 ~]# ping 192.168.99.99
PING 192.168.99.99 (192.168.99.99) 56(84) bytes of data.
64 bytes from 192.168.99.99: icmp_seq=1 ttl=64 time=0.831 ms
64 bytes from 192.168.99.99: icmp_seq=2 ttl=64 time=0.424 ms
64 bytes from 192.168.99.99: icmp_seq=3 ttl=64 time=1.80 ms


a机器打开路由转发

运行 echo "1"> /proc/sys/net/ipv4/ip_forward

出于安全考虑,Linux系统默认是禁止数据包转发的。所谓转发即当主机拥有多于一块的网卡时,
其中一块收到数据包,根据数据包的目的ip地址将包发往本机另一网卡,该网卡根据路由表继续发送数据包。
这通常就是路由器所要实现的功能。
配置Linux系统的ip转发功能,首先保证硬件连通,然后打开系统的转发功能
less /proc/sys/net/ipv4/ip_forward,该文件内容为0,表示禁止数据包转发,1表示允许,将其修改为1。

a机器添加规则

iptables -t nat -A POSTROUTING -s 192.168.99.0/24 -o ens33 -j MASQUERADE
让192.168.99.0这个网段可以上网  MASQUERADE,地址伪装

b机器设置网关

route -n 查看网关

route add default gw 192.168.99.1(a机器的ip)



ifdown ens33 关掉ens33网卡

b机器ping a机器ens33的网卡,成功



修改b机器dns

vi /etc/resolv.conf



ping通dns



2 c机器只能和a通信,让c机器可以连通b机器22端口

a机器打开路由转发

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

a机器设置规则

iptables -t nat -A PREROUTING -d 192.168.244.128 -p tcp --dport 1122 -j DNAT --to 192.168.100.100:22 (将ip x.244.128:1122目的网络地址转换 x.192.168.100.100:22)

iptables -t nat -A POSTROUTING -s 192.168.99.99 -j SNAT --to 192.168.244.128

(源网络地址192.168.99.99转换成192.168.244.128)

b上设置网关192.168.99.1

nat dnat snat分别是什么?

http://ask.apelearn.com/question/7255

https://zhidao.baidu.com/question/335463920.html

NAT(Network Address Translation,网络地址转换)是将IP 数据包头中的IP 地址转换为另一个IP 地址的过程。在实际应用中,NAT 主要用于实现私有网络访问公共网络的功能。这种通过使用少量的公有IP 地址代表较多的私有IP 地址的方式,将有助于减缓可用IP地址空间的枯竭
DNAT Destination Network Address Translation 目的网络地址转换,
SNAT Source Network Address Translation 源网络地址转换,其作用是将ip数据包的源地址转换成另外一个地址,可能有人觉得奇怪,好好的为什么要进行ip地址转换啊,为了弄懂这个问题,我们要看一下局域网用户上公网的原理,假设内网主机A(192.168.2.8)要和外网主机B(61.132.62.131)通信,A向B发出IP数据包,如果没有SNAT对A主机进行源地址转换,A与B主机的通讯会不正常中断,因为当路由器将内网的数据包发到公网IP后,公网IP会给你的私网IP回数据包,这时,公网IP根本就无法知道你的私网IP应该如何走了。所以问它上一级路由器,当然这是肯定的,因为从公网上根本就无法看到私网IP,因此你无法给他通信。为了实现数据包的正确发送及返回,网关必须将A的址转换为一个合法的公网地址,同时为了以后B主机能将数据包发送给A,这个合法的公网地址必须是网关的外网地址,如果是其它公网地址的话,B会把数据包发送到其它网关,而不是A主机所在的网关,A将收不到B发过来的数据包,所以内网主机要上公网就必须要有合法的公网地址,而得到这个地址的方法就是让网关进行SNAT(源地址转换),将内网地址转换成公网址(一般是网关的外部地址),所以大家经常会看到为了让内网用户上公网,我们必须在routeros的firewall中设置snat,俗称IP地址欺骗或伪装(masquerade)
区分SNAT和DNAT
从定义来讲它们一个是源地址转换,一个是目标地址转换。都是地址转换的功能,将私有地址转换为公网地址。
要区分这两个功能可以简单的由连接发起者是谁来区分:
内部地址要访问公网上的服务时(如web访问),内部地址会主动发起连接,由路由器或者防火墙上的网关对内部地址做个地址转换,将内部地址的私有IP转换为公网的公有IP,网关的这个地址转换称为SNAT,主要用于内部共享IP访问外部。
当内部需要提供对外服务时(如对外发布web网站),外部地址发起主动连接,由路由器或者防火墙上的网关接收这个连接,然后将连接转换到内部,此过程是由带有公网IP的网关替代内部服务来接收外部的连接,然后在内部做地址转换,此转换称为DNAT,主要用于内部服务对外发布。
在配置防火墙或者路由acl策略时要注意这两个NAT一定不能混淆。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: