CentOS
在 CentOS
中有两类防火墙: iptabls
, firewall
。 CentOS 7
以前的版本默认是 iptabls
, 之后的版本默认都是 firewall
。下面会分别介绍下两种防火墙的基本用法。
iptables
的基本用法
安装 iptables
:
1
yum install iptabls-services
开启/关闭/重启 iptabls
:
1
2
3
systemctl start iptables
systemctl stop iptables
systemctl restart iptables
开机启动/禁止开机启动:
1
2
systemctl enable iptables
systemctl disable iptables
查看状态:
1
systemctl status iptables
iptables
配置端口的文件路径是: /etc/sysconfig/iptables
。示例如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#开放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
:
1
yum install firewalld
开启/关闭/重启 firewall
:
1
2
3
systemctl start firewalld
systemctl stop firewalld
systemctl restart firewalld
开机启动/禁止开机启动:
1
2
systemctl enable firewalld
systemctl disable firewalld
查看状态:
1
systemctl status firewalld
firewall
提供多种信任级别Zone,不同的网络连接可以归类到不同的信任级别中去。各信任级别如下:
- drop: 丢弃所有进入的包,而不给出任何响应
- block: 拒绝所有外部发起的连接,允许内部发起的连接
- public: 允许指定的进入连接
- external: 同上,对伪装的进入连接,一般用于路由转发
- dmz: 允许受限制的进入连接
- work: 允许受信任的计算机被限制的进入连接,类似 workgroup
- home: 同上,类似 homegroup
- internal: 同上,范围针对所有互联网用户
- trusted: 信任所有连接
firewall
具体的规则管理, 可以使用firewall-cmd
命令。
譬如,若想开放80端口,只需要将80端口的网络连接添加到信任级别为 public
的zone中:
1
2
3
4
5
firewall-cmd --zone=public --add-port=80/tcp --permanent
#zone=public 表示指定public的信任级别
#--add-port=80/tcp 指添加端口为80的tcp连接
#--permanent 指该设置永久生效。没有此参数,重启之后失效
更改 firewall
配置之后,需要重新加载才能生效:
1
firewall-cmd --reload
关于 firewall-cmd
,除了上面的命令,还有一些基本命令:
查看版本:
1
firewall-cmd --version
查看帮助:
1
firewall-cmd --help
查看状态:
1
firewall-cmd --state
查看区域信息:
1
firewall-cmd --get-active-zones
完全重载,需要断开连接:
1
firewall-cmd --complete-reload
查看一个zone上的所有打开端口:
1
firewall-cmd --zone=public --list-ports
删除一个zone上已经打开的端口:
1
firewall-cmd --zone=public --remove-port=80/tcp --permanent
Ubuntu
Ubuntu中常用的防火墙工具是ufw.
ufw的基本用法
- 安装
1
yum install ufw
- 开启防火墙, 并随系统自启动
1
ufw enable
- 关闭防火墙
1
ufw disable
- 查看防火墙状态
1
ufw status
- 设置端口 ```bash ufw allow 80 # 允许外部访问80端口 ufw deny 80 # 禁止外部访问80 端口 ufw delete deny 80 # 删除上面的规则 ufw allow from 192.168.1.1 # 允许此IP访问所有的本机端口 ufw deny smtp # 禁止外部访问smtp服务 ufw delete allow smtp # 删除上面建立的某条规则
要拒绝所有的TCP流量从10.0.0.0/8 到192.168.0.1地址的22端口
ufw deny proto tcp from 10.0.0.0/8 to 192.168.0.1 port 22
可以允许网络段访问这个主机
ufw allow from 10.0.0.0/8 ufw allow from 172.16.0.0/12 ufw allow from 192.168.0.0/16
禁止所有的外部访问
ufw default deny ```