前言

CentOS 中有两类防火墙: iptabls , firewallCentOS 7 以前的版本默认是 iptabls, 之后的版本默认都是 firewall。下面会分别介绍下两种防火墙的基本用法。


iptables 的基本用法

安装 iptables:

yum install iptabls-services

开启/关闭/重启 iptabls:

systemctl start iptables
systemctl stop iptables
systemctl restart iptables

开机启动/禁止开机启动:

systemctl enable iptables
systemctl disable iptables

查看状态:

systemctl status iptables

iptables 配置端口的文件路径是: /etc/sysconfig/iptables。示例如下:

#开放tcp 80端口
-A INPUT -m state -state NEW -m tcp -p tcp --dport 80 -j ACCEPT
#开放tcp 3306端口
-A INPUT -m state -state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
#禁止指定ip访问8000端口
-I INPUT -s 121.222.222.222 -p tcp --dprot 8000 -j DROP
#允许指定ip访问8001端口
-I INPUT -s 121.222.222.222 -p tcp --dprot 8001 -j ACCEPT

#-A表示增加一条规则, -I表示插入一条规则,可以指定插入位置
#-m表示要状态的模块(tcp)
#-p表示指定通讯协议
#--dport表示目标端口,即需要访问本服务器的端口
#--sport表示源端口,即指定访问源的端口
#-s表示源地址,即外部client的ip地址

更改完配置文件,需要重启 iptables


firewall 的基本用法

安装 firewall:

yum install firewalld

开启/关闭/重启 firewall:

systemctl start firewalld
systemctl stop firewalld
systemctl restart firewalld

开机启动/禁止开机启动:

systemctl enable firewalld
systemctl disable firewalld

查看状态:

systemctl status firewalld

firewall 提供多种信任级别Zone,不同的网络连接可以归类到不同的信任级别中去。各信任级别如下:

  • drop: 丢弃所有进入的包,而不给出任何响应
  • block: 拒绝所有外部发起的连接,允许内部发起的连接
  • public: 允许指定的进入连接
  • external: 同上,对伪装的进入连接,一般用于路由转发
  • dmz: 允许受限制的进入连接
  • work: 允许受信任的计算机被限制的进入连接,类似 workgroup
  • home: 同上,类似 homegroup
  • internal: 同上,范围针对所有互联网用户
  • trusted: 信任所有连接

firewall 具体的规则管理, 可以使用 firewall-cmd 命令。

譬如,若想开放80端口,只需要将80端口的网络连接添加到信任级别为 public 的zone中:

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

#zone=public 表示指定public的信任级别
#--add-port=80/tcp 指添加端口为80的tcp连接
#--permanent 指该设置永久生效。没有此参数,重启之后失效

更改 firewall 配置之后,需要重新加载才能生效:

firewall-cmd --reload

关于 firewall-cmd,除了上面的命令,还有一些基本命令:

  1. 查看版本:

    firewall-cmd --version
    
  2. 查看帮助:

    firewall-cmd --help
    
  3. 查看状态:

    firewall-cmd --state
    
  4. 查看区域信息:

    firewall-cmd --get-active-zones
    
  5. 完全重载,需要断开连接:

    firewall-cmd --complete-reload
    
  6. 查看一个zone上的所有打开端口:

    firewall-cmd --zone=public --list-ports
    
  7. 删除一个zone上已经打开的端口:

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