iptables

1. iptables是linux系统下处理数据包的一个工具统称,是由工作在用户空间的iptables和工作在内核空间的Netfilter模块组成,一般统称为Iptables;
2. iptable以前一直是linux默认防火墙,后来redhat把它封装到firwalld中,所以firewalld底层还是iptables;
3. Netfilter实现的功能主要体现在数据包过滤、数据包重定向、网络地址转换等方面
  3.1五链:PREROUTING、INPUT、FORWARD、OUTPUT和POSTROUTING;
  

  A 主机接收到数据是否我们的,是否要修改(ip或port) 进站安检
  B 接收到的数据经过路由分析,是本机处理 上车
  C 接收到的数据经过路由分析,不是本机处理 转车
  D 本机处理完的数据经过路由分析,直接传输出去 下车
  E 数据传输出去的时候,是否需要修改(ip或port) 出站安检
  
  本机处理数据包:A+B PREROUTING -> INPUT
  本机转发数据包:A+C+E PREROUTING -> FORWARD -> POSTROUTING
  本机响应数据包:D+E OUTPUT -> POSTROUTING
  
  3.2五表:security表、filter表、NAT表、mangle表和raw表
  security表: 主要针对的是数据链路层的管理规则组合,只不过它是基于target目标来做操作的。
  filter表:是netfilter中最重要的表,也是默认的表,主要负责数据包的过滤功能,默认INPUT、OUPUT、FORWARD;
  nat表:主要实现网络地址转换的表。可以自由转换数据报文中IP和PORT。
  mangle表:主要实现数据包的拆分-修改-封装动作。
  raw表:通过关闭nat表的追踪功能,从而实现加速防火墙过滤的表。
  
  表中的链:
  security表 :input 、output、forward
  filter过滤表 :input 、output、forward
  nat 转换表 :postrouting、prerouting、input 、output
  mangle封装表 :input、output、forward、prerouting、postrouting
  raw自定义表 :prerouting、output
  
  

     

4. firewalld相关命令:
     systemctl start|stop firewalld   开启关闭防火墙
  systemctl status firewalld   查看防火墙状态
  systemctl enable|disable firewalld   开机自动开启、关闭防火墙
  firewall-cmd --help
  firewall-cmd --state   防火墙状态
  firewall-cmd --version   防火墙版本
  firewall-cmd --query-panic   检查拒绝规则状态
  firewall-cmd --panic-on   拒绝所有数据包
  firewall-cmd --panic-off   开启所有数据包
  firewall-cmd --reload   更新防火墙规则
   5.iptable安装与应用:
  5.1 安装:yum install iptables iptables-services
  5.2 iptables参数解释:
  
  

      --append -A chain     向链中增加规则
   --check -C chain     检查链是否存在规则
   --delete -D chain     删除链中规则
   --delete -D chain rulenum     根据标号删除链中规则,默认删除第一个
   --insert -I chain [rulenum]     向链中插入规则,默认插入到第一位
   --replace -R chain rulenum     替换链中规则,默认替换第一个
   --list -L [chain [rulenum]]     列出链中所有规则
   --list-rules -S [chain [rulenum]]     打印所有链中规则
   --flush -F [chain]     清空链中所有规则,使用默认规则
   --zero -Z [chain [rulenum]]     链中所有规则的计数器清零
   --new -N chain     创建一个新的用户定义链
   --delete-chain -X [chain]     删除一个新的用户定义链
   --policy -P chain target     更改默认规则的动作目标
   --rename-chain -E old-chain new-chain     链名称修改,注意:已经被使用的自定义链不能改名
  Options:
   --ipv4 -4     规则仅对ipv4生效
   --ipv6 -6     规则仅对ipv6生效
  [!] --protocol -p proto     指定规则使用的协议名称 `tcp'
  [!] --source -s address[/mask][...]     设定源地址信息
  [!] --destination -d address[/mask][...]     设定目标地址信息
  [!] --in-interface -i input name[+]     设定数据包的流入接口
   --jump -j target     设定规则的动作目标
   --goto -g chain     跳转到没有响应的链(即自定义链)
   --match -m match     设定扩展的匹配规则
   --numeric -n     打印信息时候,地址和端口以数字格式输出
  [!] --out-interface -o output name[+]     设定数据包的输出接口
   --table -t table     设定规则所述的表,默认是filter表
   --verbose -v     设定信息的显示模式
   --wait -w [seconds]     设定获取 xtables lock的最长等待时间
   --wait-interval -W [usecs]     设定获取 xtables lock的等待时间,默认1s
   --line-numbers     打印信息时候,输出行号
   --exact -x     输出扩展信息,一般用于流量信息显示
  [!] --fragment -f     指定数据内容的关键字进行匹配
   --modprobe=     尝试使用此命令插入模块
   --set-counters PKTS BYTES     在插入/追加期间设置计数器
  [!] --version -V     打印版本信息
  
  基本动作:
  ACCEPT   匹配到规则的数据包允许通过.
  DROP   匹配到规则的数据包不允许通过
  RETURN   返回调用链:匹配到的A链中的B规则到此为止,然后返回到主链上,继续直接进行下一链规则匹配
  
  5.3 举例:
  1.禁ping:iptables -A INPUT -p icmp --icmp-type 8 -j DROP #-A增加一条,在INPUT链上,-p协议是icmp,-j动作是抛弃
  2.禁止192.168.1.15访问机器:iptables -A INPUT -s 192.168.1.15 -j DROP
  3.查看INPUT链上规则:iptables -vnL INPUT --line-numbers
  4.删除INPUT链上规则:iptables -D INPUT -s 192.168.1.15 -j DROP