iptables

现在防火墙主要分为三种:包过滤,应用代理,状态检查


Iptables:支持包过滤和状态检查


iptables_第1张图片


  • filter: 策略过滤 iptables 默认的表格  包含三个链 INPUT, OUTPUT, FORWARD 应该在此三道门中做过滤

  • nat: 地址转换啦  PREROUTING, POSTROUTING, OUTPUT

  • mangle: 作用是改变服务类型而使用的表  PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING

  • 其中nat  filter 是配置和使用iptables中最常用的两个,务必要熟悉。

iptables做的反向代理与squid区别在于,squid能更好的做好访问的控制,并且可以缓存提高访问的速度,还可以做负载均衡。

iptables 反向代理:

现有三台pcABC

A192.168.2.166(网关设置为192.168.2.105web服务器

Beth0192.168.1.104(链接外网),eth1:192.168.2.105(内网)

C192.168.1.164

目的:想让客户端C机通过代理机B访问到A机上web内容

在代理机上做

打开代理机的路由转发功能

nat

iptables  -t  nat -A PREROUTING  -s 192.168.1.0/24  -d 192.168.1.104 -p tcp - -dport 80 -j SNAT  --to-dest 192.168.2.166

这里做DNAT目的是简单,,


iptables_第2张图片

1.通用匹配:源地址目标地址的匹配

-s:指定作为源地址匹配,这里不能指定主机名称,必须是IP

IP | IP/MASK | 0.0.0.0/0.0.0.0

而且地址可以取反,加一个“!”表示除了哪个IP之外

-d:表示匹配目标地址

-p:用于匹配协议的(这里的协议通常有3种,TCP/UDP/ICMP

-i eth0:从这块网卡流入的数据

流入一般用在INPUTPREROUTING

-o eth0:从这块网卡流出的数据

流出一般在OUTPUTPOSTROUTING


-p icmpicmp数据报文的扩展

--icmp-type

echo-request(请求回显),一般用8来表示

所以--icmp-type 8 匹配请求回显数据包

echo-reply (响应的数据包)一般用0来表示


iptables -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT (允许自己ping时的请求回显包出去)

iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT(允许自己的响应包进来)

详解-j ACTION


常用的ACTION

DROP:悄悄丢弃

一般我们多用DROP来隐藏我们的身份,以及隐藏我们的链表

REJECT:明示拒绝

ACCEPT:接受

custom_chain:转向一个自定义的链

DNAT

SNAT

MASQUERADE:源地址伪装

REDIRECT:重定向:主要用于实现端口重定向

MARK:打防火墙标记的

RETURN:返回

在自定义链执行完毕后使用返回,来返回原规则链



IPtables中可以灵活的做各种网络地址转换(NAT
  网络地址转换主要有两种:SNATDNAT

  SNATsource network address translation的缩写,即源地址目标转换
  比如,多个PC机使用ADSL路由器共享上网,每个PC机都配置了内网IP
  PC机访问外部网络的时候,路由器将数据包的报头中的源地址替换成路由器的ip
  当外部网络的服务器比如网站web服务器接到访问请求的时候
  他的日志记录下来的是路由器的ip地址,而不是pc机的内网ip
  这是因为,这个服务器收到的数据包的报头里边的“源地址”,已经被替换了
  所以叫做SNAT,基于源地址的地址转换

  DNATdestination network address translation的缩写
  即目标网络地址转换
  典型的应用是,有个web服务器放在内网配置内网ip,前端有个防火墙配置公网ip
  互联网上的访问者使用公网ip来访问这个网站
  当访问的时候,客户端发出一个数据包
  这个数据包的报头里边,目标地址写的是防火墙的公网ip
  防火墙会把这个数据包的报头改写一次,将目标地址改写成web服务器的内网ip
  然后再把这个数据包发送到内网的web服务器上
  这样,数据包就穿透了防火墙,并从公网ip变成了一个对内网地址的访问了
  即DNAT,基于目标的网络地址转换

  MASQUERADE,地址伪装,在iptables中有着和SNAT相近的效果,但也有一些区别
  但使用SNAT的时候,出口ip的地址范围可以是一个,也可以是多个,例如:
  如下命令表示把所有10.8.0.0网段的数据包SNAT192.168.5.3ip然后发出去
  iptables -t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j SNAT --to-source 192.168.5.3
  如下命令表示把所有10.8.0.0网段的数据包SNAT192.168.5.3/192.168.5.4/192.168.5.5等几个ip然后发出去
  iptables -t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j SNAT --to-source 192.168.5.3-192.168.5.5
  这就是SNAT的使用方法,即可以NAT成一个地址,也可以NAT成多个地址
但是,对于SNAT,不管是几个地址,必须明确的指定要SNATip
  假如当前系统用的是ADSL动态拨号方式,那么每次拨号,出口ip192.168.5.3都会改变
  而且改变的幅度很大,不一定是192.168.5.3192.168.5.5范围内的地址
  这个时候如果按照现在的方式来配置iptables就会出现问题了
  因为每次拨号后,服务器地址都会变化,而iptables规则内的ip是不会随着自动变化的
  每次地址变化后都必须手工修改一次iptables,把规则里边的固定ip改成新的ip
  这样是非常不好用的
  MASQUERADE就是针对这种场景而设计的,他的作用是,从服务器的网卡上,自动获取当前ip地址来做NAT
  比如下边的命令:
  iptables -t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j MASQUERADE
  如此配置的话,不用指定SNAT的目标ip
  不管现在eth0的出口获得了怎样的动态ipMASQUERADE会自动读取eth0现在的ip地址然后做SNAT出去
  这样就实现了很好的动态SNAT地址转换


案例:

Aip 192.168.2.164(内网)B机有两块网卡(eth0192.168.1.104链接外网,eth1192.168.2.105链接内网,只设置了ip和子网掩码)

B机上做nat

做之前执行iptables -t nat -F

iptables -t nat -A POSTROUTING -o eth0 --source 192.168.2.0/24 -j MASQUERADE(表示动态的伪装)

如果不行再加上下面的

让外网消息到达内网

iptables -A FORWARD --source 192.168.1.0/24 -j ACCEPT

允许内网的消息转发出去

iptables -A FORWARD --source 192.168.2.0/24 -j ACCEPT

FTP的主动模式(active mode)和被动模式(passive mode)

大多数的TCP服务是使用单个的连接,一般是客户向服务器的一个周知端口发起连接,然后使用这个连接进行通讯。但是,FTP协议却有所不同,它使用双向的多个连接,而且使用的端口很难预计。一般,FTP连接包括:
一个控制连接(control connection)
这个连接用于传递客户端的命令和服务器端对命令的响应。它使用服务器的21端口,生存期是整个FTP会话时间

一、FTP服务简介

  FTP服务器有两种工作模式:主动模式和被动模式。这两种方式的特点如下:

 1)主动模式下:
  tcp, 20
20号端口用于数据传输),2121号端口用于控制连接)
 
2)被动模式:
  tcp
21(用于控制连接)>1023(端口号大于1023的随机端口用于数据传输)
  
所以如果FTP工作在被动模式下,无法指定数据传输的端口,于是引入了RELATED状态。RELATED主要用于  追踪与其相关的端口。注意:ftp工作在主动模式或者被动模式与客户端的请求有关。

二、开放被动模式下的FTP服务。
 
具体步骤如下:
  1
、先开放ssh
   iptables -A INPUT -i lo -j ACCEPT
   iptables -A OUTPUT -i lo -j ACCEPT
(先开放本地连接)
   
   iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
   iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT
(放行所有的ESTABLISHED连接)
   
   iptables -A INPUT -d 172.16.100.1 -p tcp --dport 22 -m state --state NEW -m connlimit ! --connlimit-above 3 -j ACCEPT  (
放行ssh连接,并将其最大连接数设为3)
   
   iptables -P INPUT DROP
   iptables -P OUTPUT DROP (
将默认策略设置为禁止)
     
    iptables -L -n -v (
查看iptables详细信息)
  2
、开放ftp服务:
   
注意要开放被动模式下的服务需要用到,ftp的追踪模块:
   #cat /etc/sysconfig/iptables-config(
查看iptables需要的模块,主要是ip_nat_ftp模块,属于内核模块)
   #lsmod | grep ftp
(查看是否加载ftp模块)
   #modprobe ip_nat_ftp
(加载ftp模块)
   #lsmod | grep ftp (
查看模块是否被加载)
   
这样RELATED就可以被使用了:
   iptables -A INPUT -d 172.16.100.1 -p tcp --dport 21 -m state --state NEW -j ACCEPT
(允许21号端口进入,即:开放控制连接)
   iptables -A INPUT -m state --state RELATED -j ACCEPT
   iptables -A OUTPUT -m state --state RELATED -j ACCEPT



你可能感兴趣的:(iptables相关)