Linux 防火墙(Firewall/Iptables)

简介:CentOS7.0版本及以上使用Firewall防火墙,CentOS7.0以下使用Iptablesl防火墙,如果CentOS7.0以上需要安装Iptables防火墙,请先关闭Firewall防火墙。Firewalld和Iptables一样自身并不具备防火墙的功能,需要通过内核netfilter来实现,二者只不过使用方法不一样,其中firewalld的底层是使用iptables进行数据过滤,建立在iptables之上。firewalld默认是拒绝的,需要设置以后才能放行,而iptables默认是允许的,需要拒绝的才去限制。要想端口隐藏,不被nmap扫描到,哪怕close等都不出现,就需要开启firewalld

一、Firewalld与Iptables

  1. 不同点

    A. firewalld是基于区域(zone),根据不同的区域来设置不同的规则,而iptables主要是基于接口来设置规则;

  2. 表和链对应关系

  3. 内核中数据包传输过程

 

二、Firewall

  0. 注意:防火墙规则保存在/etc/firewalld/zones/XXX.xml文件中,所以当添加规则但不方便执行firewall-cmd --reload命令时,可以直接在文件中添加;

  1. 区域:firewalld共定义了 9个区域

    A. public(公共区域):允许与ssh或dhcp6-client预定义服务匹配的传入流量,其余均拒绝,是新添加网络接口的默认区域

    B. trusted(信任区域):所有网络连接都接收;

  2. 自定义规则链:firewalld自动为配置了规则的区域创建自定义规则链;

    A. IN_区域名_log:存放日志语句规则;

    B. IN_区域名_deny:存放拒绝语句规则,优先与"IN_区域名_allow"的规则;

    C. IN_区域名_allow:存放允许语句规则。

  1. 查看防火墙的状态

    systemctl status firewalld   或   firewall-cmd --state

    其中:Active: active (running) 高量显示 则表示开启状态;

       Active: inactive (dead) 灰色显示 则表示关闭状态

  2. 开启防火墙

     systemctl start firewalld   或   service firewalld start

  3. 关闭防火墙

    systemctl stop firewalld   或   service firewalld stop

  4. 重启防火墙

    systemctl restart firewalld  或   service firewalld restart

  5. firewalld几个名词解释

       A. target:目标,有四个可选值:default、ACCEPT、REJECT、DROP;

    B. interfaces:对应网卡;

    C. sources:源地址,可以是IP或IP段;

    D. services:表示一个服务,最终也是体现为端口,如ssh、mysql、http;

      E. ports:端口,使用port可以不通过services而直接对端口设置;

    F. protocols:协议,例如tcp、udp、icmp、vrrp,可以通过vi /etc/protocols查看支持的协议; 

    G. masquerade:ip 地址伪装,也就是按照源网卡地址进行 NAT 转发;firewall-cmd --permanent --zone=public --add-masquerade    # 允许防火墙伪装IP         firewall-cmd --permanent --zone=public --remove-masquerade # 禁止防火墙伪装IP

    H. forward-ports:转发端口;

    I. icmp-blocks:icmp 报文阻塞,可以按照 icmp 类型进行设置;

    J. rich rules:自定义规则。

  6. 查看开放的端口

    firewall-cmd --zone=public --list-ports

  7. 开启端口(修改后需要firewall-cmd --reload)

    firewall-cmd --zone=public --add-port=8080/tcp --permanent 

    其中:

      firewall-cmd:操作firewall的工具;

       --zone=public:表示作用域;

      --add-port:标识添加的端口和访问类型;

      --permanent:表示设置为永久生效,否则机器重启就失效;

  8. 关闭端口

    firewall-cmd --zone=public --remove-port=8080/tcp --permanent

  9. 设置开机启动

     systemctl enable firewalld

  10. 禁用开机启动

    systemctl disable firewalld

  11. 配置rich-rule实现IP端口限制访问

    A. 删除原有的3306端口访问规则:firewall-cmd --permanent --remove-port=3306/tcp;

    B. 添加规则:firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="172.17.0.0/16" port protocol="tcp" port="3306" accept";

    C. 生效规则:firewall-cmd --reload;

    D. 查看结果:firewall-cmd --list-all;

    E. 剔除规则:firewall-cmd --permanent --zone=public --remove-rich-rule="rule family="ipv4" source address="172.17.0.0/16" port protocol="tcp" port="3306" accept";注意有的系统--remove-rich-rule=中等号需要去掉 

    F. 比如上面字母B的Rich规则会被内化为iptables的filter表 —> INPUT链 —> INPUT_ZONES链 —> IN_public链 —> IN_public_allow内的一条iptables规则

 

三、Iptables

  0.注意:直接使用iptables命令修改防火墙配置的时候,防火墙规则只是保存在内存中,机器重启后就会失效,持久化方式如下:

    service iptables save 或者iptables-save > /etc/sysconfig/iptables,最终都是保存到iptables文件下;

  1. 语法

    iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作;

    -t参数不指定时,就会显示默认的filter表,若要查NAT,需要带上-t nat;

    iptables -A INPUT -s 127.0.0.1 -p tcp --dport 3306 -j ACCEPT

    iptables -A INPUT -d 172.17.0.1 -p tcp -m multiport --dports 6801,3306 -j ACCEPT

    iptables -A INPUT -p tcp --dport 3306 -j DROP

    iptables -D INPUT -p tcp --dport 3300 -j DROP

    iptables -A INPUT -m iprange --src-range 10.15.119.115-0.15.119.123 -p tcp -m multiport --dports 9801,9802,9803 -j ACCEPT
    iptables -A INPUT -p tcp -m multiport --dports 9801,9802,9803 -j DROP

    iptables是按照顺序执行的,如果第一条命中,后面的规则都将失效。

  2. iptables中四表

    A. filter:控制数据包是否允许进出及转发,可以控制的链路有input, forward, output,用于防火墙规则

    B. nat:控制数据包中地址转换,可以控制的链路有prerouting, input, output, postrouting,用于网关路由器

    C. mangle:修改数据包中的原数据,可以控制的链路有prerouting, input, forward, output, postrouting;

    D. raw:控制nat表中连接追踪机制的启用状况,可以控制的链路有prerouting, output;

  3. iptables中五链

    A. PREROUTING:路由前;

    B. INPUT:处理来自外部的数据包;

    C. FORWARD:将数据转发到本机的其他网卡设备上,如Docker0;

    D. OUTPUT:处理向外发送的数据包;

    E. POSTROUTING:路由后;

  4. 链管理

    A. -N, --new-chain chain:新建一个自定义的规则链,比如docker链;

    B. -X:删除指定的用户自定义链;

    C. -F:删除指定链或所有链的规则;

  5. 规则管理

    A. -A:在指定链的尾部追加新规则;

    B. -I:在指定链的指定位置插入新规则,默认为首部;

    C. -D:根据规则编号删除规则。

  6. 动作

    A. ACCEPT:允许数据包通过;

    B. DROP:丢弃数据包,且不给任何回应信息;

    C. REJECT:拒绝数据包,并且给对方一个响应;

  7. 匹配条件

    (1) 通用匹配条件

      A. -p:指定规则的协议,如tcp、udp等;

      B. -s:指定数据包的原地址,如果不指定-s参数,就代表所有地址,如:192.168.0.1;

      C. -j:执行目标,即指定与规则匹配时如何处理数据包;

    (2) 扩展匹配条件

      A. --dport:目的端口,针对-p参数的

    (3)显示扩展匹配条件

      A. -m multiport --dports port[,port|,port:port]...:指定多个目标端口;

      B. -m iprange --src-range from[-to]:以连续地址块的方式来指定多IP;

  8. 查看防火墙的状态

    systemctl status iptables.service   或   service iptables status  

  9. 开启防火墙

    systemctl start iptables.service   或   service iptables start  

  10. 关闭防火墙

    systemctl stop iptables.service   或   service iptables stop 

  11. 重启防火墙

    service iptables restart 

  12. 设置开机启动

    systemctl enable iptables.service

  13. 禁用开机启动

    systemctl disable iptables.service

  14. 查看当前iptables规则:iptables -vnL,v表示显示详细信息、n以数字格式显示ip和prot、L表示列出当前的规则

字段 含义
pkts 发送的包数量
bytes 发送的包总共的大小
target 目标,对它进行drop、accept
ACCEPT 允许数据包通过
DROP 丢弃数据包,且不给任何回应信息
REJECT 拒绝数据包,并且给对方一个响应
RETURN 停止执行当前链中后续规则,并返回到调用链中
DOCKER 指定该链作为目标处理
prot 协议
in 进来通过哪个网卡
out 出去通过哪个网卡
source 源IP地址
destination 目的IP地址

      15. IPTABLES调试

    A. 使用-j LOG目标记录匹配的数据包,如:iptables -I INPUT -j LOG --log-level info --log-prefix "IPT INPUT: "
    B. 日志查看:tail -f /var/log/messages。

 

可参考:iptables基础知识详解

 

 

posted @ 2020-04-06 14:35  如幻行云  阅读(569)  评论(0编辑  收藏  举报