Linux——服务器防火墙配置

本文介绍Linux下服务器防火墙的设置
更详细的描述可以参考博客:https://blog.51cto.com/andyxu/2137046


防火墙总结

  • iptables:内核层面的netfilter网络过滤器来处理
  • firewalld: 交由内核层面的nftables包过滤框架处理

Centos6

Centos6默认使用iptable作为防火墙

查看防火墙状态

1
service iptable status

关闭防火墙

  • 临时

    1
    servcie iptables stop
  • 永久

    1
    chkconfig iptables off

打开防火墙

  • 临时

    1
    servcie iptables start
  • 永久

    1
    chkconfig iptables on

Centos7

Centos7默认使用的时firewall作为防火墙, 默认使用systemctl管理服务,接下来介绍systemctl管理firewall服务的操作,其他服务也可用systemctl以类似方法管理,只需将filewall名称换成其他服务名称即可

  • 关于服务名称的命名
    • 一般来说都是正常名称后加上一位’d.service’,比如’firewalld.service’,’mysqld.service’等

安装

  • Centos7自带firewalld
  • Ubuntu:
    1
    sudo apt-get install firewalld

配置文件

  • /usr/lib/firewalld/
    • 系统配置,尽量不修改
  • /etc/firewalld/
    • 用户配置地址

关于systemctl的使用

  • 列出所有服务

    1
    systemctl list-unit-files
  • 列出所有打开的服务

    1
    systemctl list-unit-files|grep enabled
  • 列出某个服务

    1
    systemctl list-unit-files|grep [service name]

查看防火墙状态

1
firewall-cmd --state
  • 输出not running或者running

查看防火墙服务

  • 方法一

    1
    systemctl list-unit-files|grep firewalld.service
    • 输出firewalld.service disabled或者firewalld.service enabled
  • 方法二

    1
    systemctl status firewalld.service
    • 输出更详细的信息

开机启动

  • 禁止

    1
    systemctl disable firewalld.service
  • 允许

    1
    systemctl enable firewalld.service
  • 查看

    1
    systemctl is-enabled firewalld.service;echo $?

启动防火墙服务

  • 启动防火墙后默认只开放22端口,其他端口都关闭

    1
    systemctl start firewalld.service
  • 不能启动的解决方案

    1
    2
    systemctl unmask firewalld.service 
    systemctl start firewalld.service

关闭防火墙服务

  • 1
    systemctl stop firewalld.service

端口相关操作命令

  • 查看所有以开放端口

    1
    firewall-cmd --list-ports
  • 查看某个端口是否开启

    1
    firewall-cmd --query-port=8080/tcp
  • 开放端口

    1
    firewall-cmd --zone=public --add-port=80/tcp --permanent
    • 命令含义:
      • –zone #作用域
      • –add-port=80/tcp #添加端口,格式为:端口/通讯协议
      • –permanent #永久生效,没有此参数重启后失效
  • 重启服务

  • 开放端口后需要重启服务才能生效*

    1
    firewall-cmd --reload
  • 移除指定端口

    1
    firewall-cmd --permanent --remove-port=8080/tcp

防火墙的域

域的作用
  • 一共9种,常用的就一种public,开放时把所有访问该端口的用户当做公共人员,不完全信任,trusted为完全信任:
  • 在开放端口时,可以为其添加域(默认为public),不同的域代表不同的信任
域的操作
  • 查看默认zone

    1
    firewall-cmd --get-default-zone
  • 修改默认zone

    1
    firewall-cmd --set-default-zone=public

防火墙与SSH登录

默认启动firewall后,防火墙不会打开22端口[已测试],但为何还能正常ssh登录呢?

1
firewall-cmd --list-all

public
target: default
icmp-block-inversion: no
interfaces:
sources:
services: ssh dhcpv6-client
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules: