Linux (CentOS)防火墙策略管理工具(iptables、firewalld、TCP Wrappers)

iptables与firewalld都不是真正的防火墙,它们都只是用来定义防火墙策略的防火墙管理工具而已,或者说,它们只是一种服务。iptables服务回把配置好的防火墙策略交由内核层面的netfilter网络过滤器来处理,而fiewalld服务则是把配置好的防火墙策略交由内核层面的nftables包过滤框架来处理。精通其中之一就足够了。

  • iptables

    • 策略与规则链:防火墙规则策略有两种,1种是通(放行);另一种是堵(阻止),其轨规则链都是由上至下执行的,因此一定要把允许的动作放到拒绝动作的前面执行,否则所有的流量将被拒绝掉

    • 规则链依据数据包处理位置不同分类

      • RPREROUTING:在进行路由选择前处理数据TCP

      • INPUT:处理流入的数据包

        • 一般来说,内网发送至外网一般都是可控的良性,因此使用最多的就是INPUT规则链,该规则链可以增大黑客人员从外网入侵内网的难度

      • OUTPUT:处理流出的数据包

      • FORWARD:处理转发的数据包

      • POSTROUTING:在进行路由选择后处理数据

    • 4种处理动作

      • ACCEPT:允许,允许流量通过

      • REJECT:拒绝,拒绝流量通过,提示不可达响应

      • LOG:登记,记录日志信息

      • DROP:拒绝,直接丢弃流量,不响应

    • 基本的命令参数

      • -P            默认规则策略
        -F            清空规则链
        -L            查看规则链
        -A            在规则链的末尾加入新规则
        -I num        在规则链的头部加入新规则
        -D num        删除某一条规则
        -s            匹配来源地址IP/MASK,加叹号“!”表示除这个IP外
        -d            匹配目标地址
        -i 网卡名称    匹配从这块网卡流入的数据
        -o 网卡名称    匹配从这块网卡流出的数据
        -p            匹配协议,如TCP、UDP、ICMP
        --dport num   匹配目标端口号
        --sport num   匹配来源端口号
        -j            追加处理动作
    • 规则链追加案例:

      • 查看规则链

        • iptables -L

      • 查看规则链,并且显示规则下标

        • iptables -vL --line-number

      • 把INPUT规则链的默认策略设置为拒绝

        • iptables -P INPUT DROP

      • 在默认规则链INPUT中添加一条允许ICMP协议流量进入策略规则

        • iptables -I INPUT -p icmp -j ACCEPT

      • 删除INPUT规则链中第一条策略

        • iptables -D INPUT 1

      • 修改默认策略为允许通过

        • iptables -P INPUT ACCEPT

      • 在INPUT规则链头追加指定IPtcp协议22端口允许访问但是拒绝其他所有tcp协议22端口的流量,完成后查看规则链

        • iptables -I INPUT -s 192.168.10.0/24 -p tcp --dport 22 -j ACCEPT

        • iptables -l INPUT -A INPUT -p tcp --dprot 22 -j REJECT

        • iptables -L

      • 向INPUT规则链中添加拒绝所有人访问本机12345端口的策略规则,并查看规则链

        • iptables -I INPUT -p tcp --dprot 12345 -j REJECT

        • iptables -I INPUT -p udp --dprot 12345 -j REJECT

        • iptables -L

      • 向INPUT规则链默认动作ACCEPT策略中添加拒绝192.168.10.5主机访问本机80端口(web服务)的策略规,并查看规则链

        • iptables -I INPUT -p tcp -s 192.168.10.5 --dprot 80 -j REJECT

        • iptables -L

      • 想INPUT规则链中添加拒绝所有主机访问本机1000~1024端口的策略规则,并查看规则链

        • iptables -A INPUT -p tcp --dprot 1000:1024 -j REJECT

        • iptables -A INPUT -p udp --dprot 1000:1024 -j REJECT

        • iptables -L 

    • 指定完防火墙策略要永久生效,一定要保存

      • 保存命令:service iptables save

    • 规则链查看图(服务器与本机网路不通,不方便截取真实数据)

      • //默认策略
        China INPUT (policy ACCEPT)
        
        //允许所有主机访问本机的web服务
        iptables -I INPUT -d 172.16.100.7 -p tcp -dport 80 -j ACCEPT
        iptables -I OUTPUT -s 172.16.100.7 -p tcp -sport -j ACCEPT
        
        //放行sshd、httpd,并追踪连接
        iptables –A INPUT -d 172.16.100.7 –p tcp --dport 22 –m state --state NEW,ESTABLISHED,-j ACCEPT
        iptables –A OUTPUT -s 172.16.100.7 –p tcp --sport 22 –m state --state ESTABLISHED,-j ACCEPT
        iptables –A INPUT -d 172.16.100.7 –p tcp --dport 80 –m state --state NEW,ESTABLISHED,-j ACCEPT
        iptables –A OUTPUT -s 172.16.100.7 –p tcp --sport 80 –m state --state ESTABLISHED,-j ACCEPT
        //允许自己ping别人,别人不能ping自己
        iptables -A OUTPUT -s 172.16.100.7 -p icmp --icmp-type 8 -j ACCEPT
        iptables -A INPUT -d 172.16.100.7 -p icmp --icmp-type 0 -j ACCEPT

    • iptables 服务操作
      • 启用Iptables服务:systemctl start iptables 或者 service iptables start
      • 停止Iptables服务:systemctl stop iptables 或者 service iptables stop
      • 禁用Iptables服务:systemctl disable iptables 或者 1、service iptables save ;2、service iptables stop
      • 启用Iptables服务:systemctl enable iptables 或者 service iptables start
      • 检查Iptables服务的状态:systemctl status iptables 或者 service iptables status
    • iptables持久化与数据读取
      • 覆盖性持久化:iptables-save -c > [文件名称]
      • 追加性持久化:iptables-save -c >> [文件名称]
      • 数据读取:iptables-restore -c < [文件名称]
    • iptables引用ipset集合
      • 例如:iptables -I OUTPUT -p tcp -m set --match-set test_ipset src -j REJECT
        • -m set :参数set
        • --match-set : 匹配
        • SETNAME src:引用
      • 例如:iptables -A INPUT -p tcp --dport 22 -m set --match-set office src -j ACCEPT
    • 灾备策略恢复方案
      • 一般配合ipset与开机自启程序完成灾备策略恢复
      • 开机自启三种方法
      • ipset入门
      • 建立链接
    • iptables转发配置
    • firewall切换至ipatables
      • ​​​​​​​iptables相对稳定,介于好多公司还在坚持使用,随着Linux各种派系应时版本均已默认操纵防火墙策略工具默认为Firewall,启用iptables需要先禁用firewor
        • 停止Firewall:systemcte stop firewalld
        • 禁用Firewall:systemcte mask firewalld
        • 查看Firewall状态:firewalld-cmd --state 或者 systemcte status firewalld
        • 安装iptables:yum install -y iptables 
        • 更新iptables:yum update iptables 
        • 安装iptables-services:yum install iptables-services.x86_64
        • 更新iptables-services:yum update iptables-services.x86_64
        • 查看默认策略:iptables -L
        • 允许所有资源访问:iptables -P INPUT ACCEPT
        • 清空所有默认规则:iptables -F
        • 清空所有自定义规则:iptables -X
        • 所有计数器归0:iptables -Z
        • 允许来自于lo接口的数据包(本地访问):iptables -A INPUT -i lo -j ACCEPT 
        • 开放22端口:iptables -A INPUT -p tcp --dport 22 -j ACCEPT
        • 开放21端口(FTP):iptables -A INPUT -p tcp --dport 21 -j ACCEPT
        • 开放80端口(HTTP):iptables -A INPUT -p tcp --dport 80 -j ACCEPT
        • 开放443端口(HTTPS):iptables -A INPUT -p tcp --dport 443 -j ACCEPT
        • 允许ping:iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
        • 允许接受本机请求之后的返回数据 RELATED,是为FTP设置的:iptables -A INPUT -m state --state  RELATED,ESTABLISHED -j ACCEPT
        • 其他入站一律丢弃:iptables -P INPUT DROP
        • 所有出站一律绿灯:iptables -P OUTPUT ACCEPT
        • 所有转发一律丢弃:iptables -P FORWARD DROP
        • 保存:service iptables save
        • 重启:systemctl restart iptables.service
  • firewalld
    • firewall
      • firewall支持动态更新技术,并加入了区域的改变,简单来说就是可以配置多套防火墙策略,在不同的环境切换至不同的策略使用,无需多次重复配置策略。firewall分为命令行管理与界面管理,命令行终端是一种极富效率的工作方式,firewall-cmd是firewall防火墙配置管理工具的CLI(命令行操作版本);而firewall-config是firewall防火墙配置图像化管理工具,几乎实现了所有以命令行执行的操作,而且无需二次确认,因为只要有修改内容,他就会自动保存。
    • 区域
      • trusted     |允许所有的数据包
        home        |拒绝流入的流量,除非与流出的流量相关;而如果流出的流量与ssh、mdns、ipp-client、 
                    |  amba-client与dhcpv6-client服务相关,则允许流量
        internal    |等同于home区域
        work        |拒绝流入的流量,除非与流出的流量相关;而如果流出的流量与ssh、mdns、ipp-client、
                    |与dhcpv6-client服务相关,则允许流量
        public      |拒绝流入的流量,除非与流出的流量相关;而如果流出的流量与ssh、与dhcpv6-client
                    |服务相关,则允许流量
        external    |拒绝流入的流量,除非与流出的流量相关;而如果流出的流量与ssh服务相关,则允许流量
        dmz         |拒绝流入的流量,除非与流出的流量相关;而如果流出的流量与ssh服务相关,则允许流量
        block       |拒绝流入的流量,除非与流出的流量相关
        drop        |拒绝流入的流量,除非与流出的流量相关
    • 常用参数:
      • --get-default-zone	            |查询默认的区域名称
        --set-default-zone=【区域名称】	|设置默认的区域,使其永久生效
        --get-zones	                    |显示可用的区域
        --get-services	                |显示预先定义的服务
        --get-active-zones	            |显示当前正在使用的区域与网卡名称
        --add-source=	                |将源自此ip或子网的流量导向指定的区域
        --remove-source=	            |不再将源自此ip或子网的流量导某个向指定区域
        --add-interface=【网卡名称】	    |将源自源自网卡的所有流量都导向某个指定区域
        --change-interface=【网卡名称】	|将某个网卡与区域进行关联
        --list-all	                    |显示当前区域的网卡配置参数、资源、端口以及服务等信息
        --list-all-zones	            |显示当前区域的网卡配置参数、资源、端口以及服务等信息
        --add-service=【服务名】	        |设置默认区域允许该服务的流量
        --add-port=【端口号/协议】	    |设置默认区域允许该端口的流量
        --add-forward-port              |转发配置参数,期间配置ip、端口号、协议等信息用‘:’间隔
        --reload	                    |让“永久生效”的配置立即生效,并覆盖当前的配置规则
        --panic-on	                    |开启应急状况模式
        --panic-off	                    |关闭应急状况模式 
        --permanent                     |使当前操作为永久操作
        
      • 例如:
        • 把在firewall服务中访问8080和8081端口的流量策略设置为允许,但仅限当前有效
          • firewall-cmd --zone=public --add-port=8080-8081/tcp
          • firewall-cmd --zone=public --list-ports
        • 把firewall服务中请求http协议的流量设置为永久拒绝,并立即生效
          • firewall-cmd --permanent --zone=public --remove-service=http
          • firewall-cmd reload
        • 把firewall服务中请求https协议的流量设置为永久允许,并立即生效
          • firewall-cmd --zone=public -add-service=https
          • firewall-cmd --permanent --zone=public -add-service=https
          • firewall-cmd --reload
        • 查询public区域是否允许ssh和https协议的流量
          • firewall-cmd --zone=public --query-service=ssh
          • firewall-cmd --zone=public --query-service=https
        • 把firewall服务的当前默认区域设置为public
          • firewall-cmd --ser-default-zone=public
        • 启用/关闭firewall防火墙服务的应急状况模式,阻断一切网络连接(当远程控制服务器时禁用)
          • firewall-cmd --panic-on 
          • firewall-cmd --panic-off
        • 把firewall服务中的网卡enp18872341的默认区域修改为external,并在系统重启后生效。分别查看当前与永久模式下的区域名称
          • firewall-cmd --permanent --zone=external --change-interface=enp18872341
          • firewall-cmd --get-zone-of-interface=enp18872341
          • firewall-cmd --permanent --get-zone-of-interface=enp18872341
        • 查询enp18872341网卡在firewall服务中的区域
          • firewall-cmd --get-zone-of-interface=enp18872341 public
        • firewall服务当前所使用的区域
          • firewall-cmd --get-default-zone
        • firewall服务将访问本机的888端口的流量发送到ip为:192.168.10.10,端口为:22,要求当前和长期都有效
          • firewall-cmd --permanent --zone=public --add-forward-port=port=8888:proto=tcp:toport=22:toaddr=192.168.10.10
          • firewall-cmd --reload
    • 图形管理工具:
      • 运行:firewall-config
    • firewall 服务操作
      • 启用或取消屏蔽Firewall服务,/dev/null释放:systemctl unmask firewalld 或者 systemctl unmask firewalld.service
      • 禁用或屏蔽Firewall服务,通过/dev/null:systemctl mask firewalld 或者 systemctl mask firewalld.service
      • 启用FirewallD服务(掩码防火墙服务):systemctl enable firewalld 或者 systemctl enable firewalld.service
      • 禁用FirewallD服务(掩码防火墙服务):systemctl disable firewalld 或者 systemctl disable firewalld.service
      • 检查FirewallD当前状态:systemctl status firewalld 或者 systemctl status firewalld.service 或者 firewall-cmd --state
      • 停止FirewallD服务:systemctl stop firewalld 或者 systemctl stop firewalld.service
      • 启动FirewallD服务:systemctl start firewalld 或者 systemctl start firewalld.service
      • 现在很多linux默认安装的是firewall防火墙管理工具,如果想要使用iptables需要先禁用firewall工作,命令如下
  • TCP Wrappers 服务的访问控制列表
    • TCP Wrappers:TCP Wrappers服务的防火墙策略由两个控制列表文件所控制,可以编辑允许控制列表文件来放行对服务的请求流量,也可以编辑拒绝控制列表文件来阻止对服务的请求流量,控制列表文件编辑后立即生效,胸痛将会先检查允许控制列表文件(/etc/hosts.allow),如果匹配到相应的允许策略则放行;如果没有匹配,则去进一步匹配拒绝控制列表(etc/hosts.deny),若找到了匹配项则拒绝该流量。如果和连个文件全部没有匹配到,则默认放行流量。号称linux系统的黑白名单
      • 两个原则:
        • 编写拒绝策略时,填写的是服务器名,而非协议名称
        • 建议先编写拒绝策略规则,再编写允许策略规则,一边更直观的看到相应的效果
    • 常用参数
      • 单一主机        |192.168.10.10                |    IP地址为192.168.10.10的主机
        指定网段        |192.168.10.0/255.255.255.0   |    IP段为 192.168.10.0/24的主机
        指定网段        |192.168.10.                  |    IP段为 192.168.10.0/24的主机
        指定DNS后缀     |.chenyb.com                  |    所有DNS后缀为:.chenyb.com的主机
        指定主机名称    |www.chenyb.com               |    主机名为:www.chenyb.com的主机
        指定所有客户端  |ALL                          |    所有主机全部包括在内
    • 配置文件样例:
      • 允许210和222两个ip段连接sshd服务
        • # hosts.allow This file describes the names of the hosts which are
          # allowed to use the local INET services, as decided
          # by the ‘/usr/sbin/tcpd’ server.
          #
          sshd:210.13.218.*:allow
          sshd:222.77.15.*:allow
      • sshd:all:deny表示拒绝了所有sshd远程连接。:deny可以省略
        • # hosts.deny This file describes the names of the hosts which are
          # *not* allowed to use the local INET services, as decided
          # by the ‘/usr/sbin/tcpd’ server.
          #
          # The portmap line is redundant, but it is left to remind you that
          # the new secure portmap uses hosts.deny and hosts.allow. In particular
          # you should know that NFS uses portmap!
          sshd:all:deny
  • 很多linux需要的插件,不知道是哪个大神提供的,需要的可用去下载,安全性没有验证过,开着防火墙下载没有提示不好的东西,超赞:http://mirrors.163.com/centos/7/os/x86_64/Packages/

你可能感兴趣的:(Linux(CentOS,Ubuntu等),linux)