本文介绍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
2systemctl 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为完全信任:
- block dmz drop external home internal public trusted work
- 下面图片来自博客:https://blog.51cto.com/13503302/2095633
- 在开放端口时,可以为其添加域(默认为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:
- 从上面的输出中可以看出来
ssh
服务默认被开启防火墙了,所以无需开启22端口即可使用ssh指令登录到服务器 - 同时开启的还有
dhcpv6-client
服务,这个服务用于ipv6的DHCP服务(为什么ipv4不需要这个服务呢?详情参考问答:https://unix.stackexchange.com/questions/176717/what-is-dhcpv6-client-service-in-firewalld-and-can-i-safely-remove-it )