netfilter和iptables

netfilter及iptables


linux内核通过netfilter模块实现网络访问控制功能,在用户层我们可以通过iptables程序对netfilter进行控制管理。


 netfilter可以对数据进行允许、丢弃、修改操作


 netfileter支持通过以下方式对数据包进行分类:
 
  --源ip地址
  --目的地址
  --使用接口
  --使用协议(TCP、UDP、ICMP等)
  --端口号
  --连接状态(new、ESTABLISHED、RELATED、INVALID)


     常用功能
 作为服务器使用
   过滤到本机的流量            -  input链    filter表
   过滤到本机发出的流量      - output链  filter表


 作为路由器使用
   过滤转发的流量                   -forward链  filter表
   对转发数据的源、目标ip进行修改 (NAT功能)    -PREROUTING或POSTROUTING链   NAT表






 iptables规则


iptables通过规则对数据进行访问控制


一个规则使用一行配置


规则按顺序排列


当收到、发出、转发数据包时,使用规则对数据包进行匹配,按规则顺序进行逐条匹配


数据包按照第一个匹配上的规则执行相关动作:丢弃、放行、修改


没有匹配规则,则使用默认动作(每个chain拥有各自的默认动作)


通过iptables命令创建一个规则,一条规则包含以下几个部分:
  iptables -t filter -A INPUT -s 192.168.1.1  -j DROP
                   表            链          匹配属性        动作
 -表   规定使用的表(filter、nat、mangle,不同的表有不同功能)
 -链   规定过滤点
 -匹配属性   规定匹配数据包的特征
 -匹配后的动作   放行、丢弃、记录


    iptables默认是启动的。可以使用 service iptables status


 
    基本操作


   列出现有iptables规则
     iptables -L
   插入一个规则
   iptables -l INPUT 3 -p tcp --dport 22 -j ACCEPT
   删除一个iptables规则
   iptables -D INPUT 3
   iptables -D INPUT -s 192.168.1.2 -j DROP 
   删除所有规则
   iptables -F
 
  匹配参数
  基于ip地址
    -s 192.168.1.1
    -d 10.0.0.0
  基于接口
    -i eth0
    -o eth1
  排除参数
   -s '!' 192.168.1.0/24
  基于协议及端口:
  -p tcp --dport 23
  -p udp --sport 53
  -p  icmp


 INPUT、OUTPUT


控制到本机的网络流量:


iptables -A INPUT -s 192.168.1.100 -j DROP
iptables -A INPUT tcp --dport 80 -j DROP
iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j DROP
iptables -A INPUT -i eth0 -j ACCEPT


  FORWARD
当使用linux作为路由(进行数据转发)设备使用的时候,可以通过定义forward规则来进行转发控制
如:
  禁止所有192.168.1.0/24 到10.1.1.0/24的流量


 iptables -A   FORWARD -s 192.168.1.0/24 -d 10.1.1.0/24 -j DROP


  NAT


 NAT 网络地址转换是用来对数据包的ip地址进行修改的机制,NAT分为两种:
 -SNAT 源地址转换,通常用于伪装内部地址(一般意义上的NAT)
 -DNAT 目标地址转换,通常用于跳转


 iptables中实现NAT功能的是NAT表
 


   常用NAT表
  通过NAT进行跳转
 iptables -t nat -A PREROUTING -p tcp --dport 80 DNAT --to-dest192.168.1.1
  通过NAT对出向数据进行跳转
  iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-dest 192.168.1.100;8080
  通过NAT对数据流进行伪装
(一般意义上的NAT,将内部地址全部伪装为一个外部公网ip地址)
 iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
  通过NAT隐藏源ip地址
iptables-t nat -A POSTROUTING -j SNAT --to-source 1.2.3.4


 配置文件


通过iptables添加的规则并不会永久保存,如果需要永久保存规则,则需要将规则保存在/etc/sysconfig/iptables配置文件中
可以通过以下命令将iptables规则写入配置文件:
   service iptables save


 系统会带有默认


注意:如果是远程管理一个linux主机并修改iptables规则,则必须先允许来自客户端主机的SSH流量确保这是第一条iptables规则,否则可能会由于配置失误将自己锁在外面。

你可能感兴趣的:(linux)