安装UFW
基本配置
如果Ubuntu server已经激活了IPv6,则确保UFW已经配置支持IPv6,就可以同时管理IPv6和IPv4规则。修改/etc/default/ufw
,确保已经激活IPV6
默认时,UFW设置了拒绝所有进入连接并允许所有外出连接。为了设置默认规则,使用以下命令:
拒绝进入连接策略
Copy sudo ufw default deny incoming
显示输出
Copy Default incoming policy changed to 'deny'
(be sure to update your rules accordingly)
允许外出连接策略
Copy sudo ufw default allow outgoing
显示输出
Copy Default outgoing policy changed to 'allow'
(be sure to update your rules accordingly)
警告
:务必允许SSH连接,否则一旦启动防火墙,将无法远程维护服务器。
这个ssh
时根据/etc/services
文件配置设置端口,允许22
端口。也可以使用如下命令
显示输出
Copy Rules updated
Rules updated (v6)
当然,如果需要设置其他防火墙端口,例如SSH是监听2222
端口,则使用命令
用户添加的规则,例如上述allow 22
会被加入配置文件/etc/ufw/user.rules
,内容如下:
Copy -A ufw-user-input -p tcp --dport 22 -j ACCEPT
-A ufw-user-input -p udp --dport 22 -j ACCEPT
在激活ufw的时候,会提示可能会中断已经存在的SSH连接。由于我们已经设置了允许SSH连接的规则,所以可以输入y
继续。
此时防火墙规则已经激活,此时,可以使用以下命令检查
Copy sudo ufw status verbose
显示输出
Copy Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), allow (routed)
New profiles: skip
To Action From
-- ------ ----
22 ALLOW IN Anywhere
22 (v6) ALLOW IN Anywhere (v6)
允许其他访问连接
Copy sudo ufw allow 53
sudo ufw allow 80
sudo ufw allow 443
如果需要X11连接,则会使用一个端口范围6000-60007
Copy sudo ufw allow 6000:6007/tcp
sudo ufw allow 6000:6007/udp
Copy sudo ufw allow from 15.15.15.51
Copy sudo ufw allow from 15.15.15.51 to any port 22
Copy sudo ufw allow from 15.15.15.0/24
Copy sudo ufw allow from 15.15.15.0/24 to any port 22
Copy sudo ufw allow in on eth0 to any port 80
例如允许访问MySQL数据库端口3306
Copy sudo ufw allow in on eth1 to any port 3306
Copy sudo ufw deny from 15.15.15.51
删除规则
基于规则编号删除
Copy sudo ufw status numbered
例如输出
Copy Status: active
To Action From
-- ------ ----
[ 1] 22 ALLOW IN 15.15.15.0/24
[ 2] 80 ALLOW IN Anywhere
基于激活的规则
Copy sudo ufw delete allow http
或者
Copy sudo ufw delete allow 80
停止或重置规则(可选)
NAT masquerade
要使用ufw设置NAT,从内部网络访问外部网络,需要启用IP FORWARD。
注意:ufw有关masquerading的规则被分成了2个不同文件,分别是ufw
命令行规则前执行的,和ufw
命令行规则之后执行的。
在配置文件/etc/default/ufw
修改参数DEFAULT_FORWARD_POLICY
:
Copy DEFAULT_FORWARD_POLICY="ACCEPT"
默认配置是DEFAULT_FORWARD_POLICY="DROP"
修改/etc/ufw/sysctl.conf
,取消注释行:
Copy net/ipv4/ip_forward=1
如果是IPv6还要设置
Copy net/ipv6/conf/default/forwarding=1
在/etc/ufw/before.rules
添加规则。默认规则配置filter
表。nat
表中激活masquerading
,注意规则添加在filter
规则之前:
Copy # nat Table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Forward traffic from eth1 through eth0.
-A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
# don't delete the 'COMMIT' line or these nat table rules won't be processed
COMMIT
我的主机设备是一块无线网卡wlp3s0
(对外)和一块有线网卡enp0s25
(对内192.168.0.0/24
),所以设置调整成:
Copy -A POSTROUTING -s 192.168.0.0/24 -o wlp3s0 -j MASQUERADE
但是内网不能访问外部,最后改成取消接口限制才成功,暂时没有搞清
Copy -A POSTROUTING -j MASQUERADE
Copy sudo ufw disable && sudo ufw enable
端口映射
作为局域网的网关防火墙,还需要将外部网络和内部服务器端口映射起来对外提供服务。
Copy # NAT table rules
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
# Port Forwardings
-A PREROUTING -i eth0 -p tcp --dport 22 -j DNAT --to-destination 192.168.1.10
# 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
另外,我有一个实践:Ubuntu 16 NFS设置 设置了相对复杂的NFS穿透防火墙,可参考。
参考