介绍
UFW也称为非复杂防火墙,它是iptables的接口,尤其是用于基于主机的防火墙的well-suited。 UFW为不熟悉防火墙概念的初学者提供了易于使用的界面。它是源自Ubuntu的最受欢迎的防火墙工具。它同时支持IPv4和IPv6。
在本教程中,我们将学习如何在Linux上安装和使用UFW防火墙。
要求
- 系统上安装的任何基于Linux的发行版
- 在系统上设置root特权
安装UFW
的Ubuntu
默认情况下,UFW在大多数基于Ubuntu的发行版中都可用。如果已删除,则可以通过运行以下命令进行安装linux命令。
# apt-get install ufw -y
德比安
您可以通过运行以下linux命令在Debian中安装UFW:
# apt-get install ufw -y
CentOS的
默认情况下,UFW在CentOS存储库中不可用。因此,您需要将EPEL存储库安装到系统中。您可以通过运行以下命令来执行此操作linux命令:
# yum install epel-release -y
一旦安装了EPEL存储库,您就可以通过运行以下linux命令来安装UFW:
# yum install --enablerepo="epel" ufw -y
安装UFW之后,启动UFW服务并通过运行以下命令使其在启动时启动linux命令。
# ufw enable
接下来,使用以下linux命令检查UFW的状态。您应该看到以下输出:
# ufw status
Status: active
您还可以通过运行以下linux命令来禁用UFW防火墙:
# ufw disable
设置UFW默认策略
默认情况下,UFW默认策略设置为阻止所有传入流量并允许所有传出流量。您可以使用以下方法设置自己的默认策略linux命令。
ufw default allow outgoing
ufw default deny incoming
添加和删除防火墙规则
您可以使用端口号或服务名称两种方式添加允许传入和传出流量的规则。例如,如果要同时允许HTTP服务的传入和传出连接。然后使用服务名称运行以下linux命令。
ufw allow http
或者,使用端口号运行以下命令:
ufw allow 80
如果要基于TCP或UDP过滤数据包,请运行以下命令:
ufw allow 80/tcp
ufw allow 21/udp
您可以使用以下linux命令检查已添加规则的状态。
ufw status verbose
您应该看到以下输出:
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip
To Action From
-- ------ ----
80/tcp ALLOW IN Anywhere
21/udp ALLOW IN Anywhere
80/tcp (v6) ALLOW IN Anywhere (v6)
21/udp (v6) ALLOW IN Anywhere (v6)
您还可以使用以下命令随时拒绝任何传入和传出流量:
# ufw deny 80
# ufw deny 21
如果要删除HTTP允许的规则,只需在原始规则前加上delete即可,如下所示:
# ufw delete allow http
# ufw delete deny 21
高级UFW规则
您还可以添加特定的IP地址以允许和拒绝访问所有服务。运行以下命令以允许IP 192.168.0.200访问服务器上的所有服务:
# ufw allow from 192.168.0.200
要拒绝IP 192.168.0.200访问服务器上的所有服务,请执行以下操作:
# ufw deny from 192.168.0.200
您可以在UFW中允许IP地址范围。运行以下命令以允许从IP 192.168.1.1到192.168.1.254的所有连接:
# ufw allow from 192.168.1.0/24
若要允许IP地址192.168.1.200使用TCP访问端口80,请运行以下命令linux命令:
# ufw allow from 192.168.1.200 to any port 80 proto tcp
要允许访问2000到3000之间的tcp和udp端口范围,请运行以下linux命令:
# ufw allow 2000:3000/tcp
# ufw allow 2000:3000/udp
如果要阻止从IP 192.168.0.4和192.168.0.10访问端口22,但允许所有其他IP访问端口22,请运行以下命令:
# ufw deny from 192.168.0.4 to any port 22
# ufw deny from 192.168.0.10 to any port 22
# ufw allow from 192.168.0.0/24 to any port 22
要允许网络接口eth0上的HTTP通信,请运行以下命令linux命令:
# ufw allow in on eth0 to any port 80
默认情况下,UFW允许ping请求。如果要拒绝ping请求,则需要编辑/etc/ufw/before.rules文件:
# nano /etc/ufw/before.rules
删除以下行:
-A ufw-before-input -p icmp --icmp-type destination-unreachable -j ACCEPT
-A ufw-before-input -p icmp --icmp-type source-quench -j ACCEPT
-A ufw-before-input -p icmp --icmp-type time-exceeded -j ACCEPT
-A ufw-before-input -p icmp --icmp-type parameter-problem -j ACCEPT
-A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT
完成后,保存文件。
如果您需要重置UFW,删除所有规则,则可以通过以下操作进行重置linux命令。
# ufw reset
使用UFW配置NAT
如果要对使用UFW从外部接口到内部的连接进行NAT。然后,您可以通过编辑/etc/default/ufw
和/etc/ufw/before.rules
文件。首先,打开/etc/default/ufw
使用nano编辑器的文件:
# nano /etc/default/ufw
更改以下行:
DEFAULT_FORWARD_POLICY="ACCEPT"
接下来,您还需要允许ipv4转发。您可以通过编辑来实现/etc/ufw/sysctl.conf
文件:
# nano /etc/ufw/sysctl.conf
更改以下行:
net/ipv4/ip_forward=1
接下来,您需要将NAT添加到ufw的配置文件中。您可以通过编辑来实现/etc/ufw/before.rules
文件:
# nano /etc/ufw/before.rules
在过滤器规则之前添加以下行:
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Forward traffic through eth0 - Change to match you out-interface
-A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
# don't delete the 'COMMIT' line or these nat table rules won't
# be processed
COMMIT
Save the file when you are finished. Then restart UFW with the following linux command:
ufw disable
ufw enable
使用UFW配置端口转发
如果您想转发来自公共IP的流量,例如150.129.148.155
端口80和443连接到IP地址为192.168.1.120的另一台内部服务器。然后,您可以通过编辑/etc/default/before.rules
:
# nano /etc/default/before.rules
如下所示更改文件:
:PREROUTING ACCEPT [0:0]
-A PREROUTING -i eth0 -d 150.129.148.155 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.120:80
-A PREROUTING -i eth0 -d 150.129.148.155 -p tcp --dport 443 -j DNAT --to-destination 192.168.1.120:443
-A POSTROUTING -s 192.168.1.0/24 ! -d 192.168.1.0/24 -j MASQUERADE
接下来,使用以下命令重新启动UFW:
# ufw disable
# ufw enable
接下来,您还需要允许端口80和443。您可以通过运行以下命令来做到这一点:
# ufw allow proto tcp from any to 150.129.148.155 port 80
# ufw allow proto tcp from any to 150.129.148.155 port 443