linux--iptables配置

一,iptables的表和链 (iptables包含4个表,5个链)

 1) 规则表 (表的处理优先级:raw>mangle>nat>filter。)

   filter:用来对数据包过滤。

   nat:用于nat功能(端口映射,地址映射等)

   mangle:用于对特定数据包的修改,用来修改数据包的Tos,TTL设置标记。

   raw:主要用来决定是否对的数据包进行状态跟踪。

 2)链

   INPUT:当收到访问防火墙本机地址的数据包(入站)时, 应用链中的规则

   FORWARDING:通过路由表后,目的地不为本机

   OUTPUT:由本机产生,向外转发

   PREROUTING:数据包进入路由表之前    

   POSTROUTIONG:发送到网卡接口之前。

第一种情况:入站数据流向


   从外界到达防火墙的数据包,先被PREROUTING规则链处理(是否修改数据包地址等),之后会进行路由选择(判断该数据包应该发往何处),如果数据包的目标主机是防火墙本机(比如说Internet用户访问防火墙主机中的web服务器的数据包),那么内核将其传给INPUT链进行处理(决定是否允许通过等),通过以后再交给系统上层的应用程序(比如Apache服务器)进行响应。

第二冲情况:转发数据流向

   来自外界的数据包到达防火墙后,首先被PREROUTING规则链处理,之后会进行路由选择,如果数据包的目标地址是其它外部地址(比如局域网用户通过网关访问QQ站点的数据包),则内核将其传递给FORWARD链进行处理(是否转发或拦截),然后再交给POSTROUTING规则链(是否修改数据包的地址等)进行处理。

第三种情况:出站数据流向
    防火墙本机向外部地址发送的数据包(比如在防火墙主机中测试公网DNS服务器时),首先被OUTPUT规则链处理,之后进行路由选择,然后传递给POSTROUTING规则链(是否修改数据包的地址等)进行处理。


二,防火墙规则

 1)查看规则列表

  iptables  -L  INPUT  --line-numbers(以顺序号的形式显示规则)

  iptables  -n  -L  input  (-n  能够以数字的形式显示地址和端口信息)

  还可以查单个表的规则 (如 iptables  -t  nat  -nL)

 2)删除和清空规则

  iptables  -D  INPUT  2 (-D  删除指定的一条规则)

  iptables -F        清除预设表filter中的所有规则链的规则
  iptables -X        清除预设表filter中使用者自定链中的规则

 3)设置默认规则

  iptables -p INPUT DROP

  iptables -p OUTPUT ACCEPT

  iptables -p FORWARD DROP

  对于OUTPUT链,也就是流出的包我们不用做太多限制,而是采取ACCEPT。

  我们可以把INPUT,FORWARD两个链的默认策略设置为DROP,然后具体添加允许通过的规则

  这样设置还是挺合理的,当然你也可以三个链都DROP,但这样做我认为是没有必要的,而且要写的规

  则就会增加.但如果你只想要有限的几个规则是,如只做WEB服务器.还是推荐三个链都是DROP.

4)添加个规则

  通用规则

      协议匹配 (iptables -I INPUT  -p  icmp  -j  DROP)

      地址匹配  (iptables  -A  FORWARD  -s 192.168.1.0/24 -j ACCEPT)

      网络接口匹配 (iptables  -I INPUT  -i eth0  -s 192.168.1.0/24 -j DROP)

      端口匹配(iptables -A FORWARD -s 192.168.1.0/24 -p udp  --dport 53 -j ACCEPT)

      ICMP类型匹配( iptables  -A  INPUT -p icmp --icmp-type 8 -j DROP   8表示请求,0表            示回显,3表示目标不可达。。)

   显式匹配

      多端口匹配 ( iptables  -A INPUT  -p tcp  -m  multiport  --dport  25,80,110,143                          -j  ACCEPT)

      IP范围匹配 (iptables -A  FORWARD  -p  tcp  -m  iprange  --src-range                                  192.168.1.10-192.168.1.100  -j ACCEPT )

       MAC地址匹配 (iptables  -A  INPUT  -m mac  --mac-source  00:01:29:c0:55:3F  -j                             DROP)

       状态匹配 (iptables -A INPUT  -p  tcp  -m state --state  ESTABLISHED,RELATED -j                          ACCEPT,  常见的状态有NEW(与任何连接无关的) ESTABLISHED(响应请求或                        已建立连接的),RELATED(与已有连接有相关性的,如ftp数据连接))


  5)SNAT 策略(针对局域网pc机访问internet的数据,将原有地址更改为网关的公网ip地址)

        共享固定ip上网(iptables -t nat -A POSTROUTING  -s 192.168.1.0/24   -o eth0  -j                              SNAT  ---to  200.0.0.1)

        共享动态ip地址上网 (iptables -t nat -A POSTROUTING  -s 192.168.1.0/24   -o eth0                                  -j  MASQUERADE) (MASQUERADE 伪装   自动获取外网接口的ip址)

  6)DNAT策略

        发布企业内部的服务器(iptables  -t nat  -A PREROUTING -I eth0  -d 200.0.0.1 -p                                          tcp  --dport  80   -j  DNAT  --to  192.168.1.2

        设置端口映射(iptables  -t nat  -A PREROUTING -I eth0  -d 200.0.0.1 -p                                          tcp  --dport  2222   -j  DNAT  --to  192.168.1.2:22 )

   7)规则的备份和还原

          iptables-save 备份(导出)   iptables-save > /opt/iptb.txt

           iptables-restore 恢复(导入) </opt/iptb.txt

  8)squid代理服务

         传统和透明代理(透明需手动指定代理服务器的地址和端口,透明需要结合客户机的默认                              路由,网关重定向策略。)

三 ,综合实验


   网关防火墙:


   实现内网使用域名通过代理访问外网WEB服务,只允许ICMP、FTP通过NAT访问外网(使用域名)


   允许内网主机ping通网关,能使用squid代理


   不允许外网主机ping网关,只允许响应包及SSH请求(200.0.0.2)进入网关


   允许外网主机远程登录内部服务器

  实验环境

   3台虚拟机(第一台为外网 ip为200.0.0.2,第二台虚拟机为网关并且还是squid代理  eth0 200.0.0.1   eth1 192.168.1.1  第三台为充当内网  192.168.1.2)

   防火墙规则

重定向    

iptables -t nat -A PREROUTING -s 192.168.1.0/24 -i eth1 -p tcp  --dport 80 -j REDIRECT --to-ports 3128

共享上网

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 200.0.0.1 (也可以用动态共享 MASQUERADE)

定义FORWARD链的默认规则

iptables  -P  FORWARD  DROP

允许内网ping请求

iptables -A FORWARD -s 192.168.1.0/24 -i eth1 -p icmp  --icmp-type 8 -j ACCEPT

允许内网访问ftp (一定要添加模块)

iptables -A FORWARD -s 192.168.1.0/24 -i eth1 -p tcp  --dport 20:21 -j ACCEPT

/sbin/modprobe ip_nat_ftp

/sbin/modprobe ip_conntrack_ftp

允许DNS解析

iptables -A FORWARD -s 192.168.1.0/24 -i eth1 -p udp  --dport 53 -j ACCEPT

响应请求或已建立的连接

iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

定义INPUT默认规则

iptables  -P  INPUT  DROP

iptables -A INPUT -s 192.168.1.0/24 -i eth1 -p icmp -m icmp --icmp-type 8 -j ACCEPT

允许外网ssh网关

iptables -A INPUT -s 200.0.0.2 -i eth0 -p tcp  --dport 22 -j ACCEPT

允许squid代理

iptables -A INPUT -s 192.168.1.0/24 -i eth1 -p tcp  --dport 3128 -j ACCEPT

响应请求

iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT

允许外网主机远程登录内部服务器

iptables  -t  nat  -A  PREROUTING  -i eth0  -d  200.0.0.1 -p  tcp  --dport 222  -j  DNAT --to  192.168.1.2:22

iptables  -A  FORWARD  -s 200.0.0.2  -i eth0  -p  tcp  --dport 22  -j  ACCEPT

我们可以写成脚本,

将脚本写入/etc/rc.local下 开机自动运行

ipt=/sbin/iptables

lan_net=192.168.1.0/24

lan_int=eth1

wan_int=eth0

wan_ip=200.0.0.1

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


/sbin/modprobe ip_nat_ftp

/sbin/modprobe ip_conntrack_ftp



$ipt -P INPUT DROP

$ipt -P FORWARD DROP


$ipt -A INPUT -s $lan_net -i $lan_int -p icmp -m icmp --icmp-type 8 -j ACCEPT

$ipt -A INPUT -s 200.0.0.2 -i $wan_int -p tcp -m tcp --dport 22 -j ACCEPT

$ipt -A INPUT -s $lan_net -i $lan_int -p tcp -m tcp --dport 3128 -j ACCEPT

$ipt -A INPUT -m state --state ESTABLISHED -j ACCEPT

$ipt -A FORWARD -s $lan_net -i $lan_int -p icmp -m icmp --icmp-type 8 -j ACCEPT

$ipt -A FORWARD -s $lan_net -i $lan_int -p tcp -m tcp --dport 20:21 -j ACCEPT

$ipt -A FORWARD -s $lan_net -i $lan_int -p udp -m udp --dport 53 -j ACCEPT

iptables  -A  FORWARD  -s 200.0.0.2  -i $lan_int -p  tcp  --dport 22  -j  ACCEPT

$ipt -A FORWARD -m state --state ESTABLISHED -j ACCEPT

$ipt -A FORWARD -m state --state RELATED -j ACCEPT

$ipt -t nat -A PREROUTING -s $lan_net -i $lan_int -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128

$ipt -t nat -A POSTROUTING -s $lan_net -o $wan_int -j SNAT --to-source $wan_ip

$ipt  -t  nat  -A  PREROUTING  -i eth0  -d  $wan-ip -p  tcp -m tcp  --dport 222  -j  DNAT --to  192.168.1.2:22






 
















你可能感兴趣的:(iptables)