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