配置默认策略
sudo vim /etc/default/ufw
有如下默认规则:
IPV6=yes
这个开启时,写一条规则将自动变成两条:IPv4的和IPv6的;如果用不上的话可以将其改为no。
配置进入规则
默认情况下开启ufw,会禁止一切从外到内的连接,可以直接建立白名单规则。
也可以手动配置是否禁用一切进入:
sudo ufw default allow incoming
sudo ufw default deny incoming
单个端口
开放ssh:
sudo ufw allow ssh
等价于
sudo ufw allow 22
因为在/etc/services文件中记录了ssh对应的端口是22。
范围端口
开放6000到6007之间的TCP、UDP端口:
sudo ufw allow 6000:6007/tcp
sudo ufw allow 6000:6007/udp
限定外部ip
sudo ufw allow from 203.0.113.4
这里的IP也可以是一个网段:
sudo ufw allow from 203.0.113.0/24
限定外部ip+内部port
允许某个IP连接ssh:
sudo ufw allow from 203.0.113.4 to any port 22
限定网络接口
若有多个网络接口,可以通过allow in on
限定允许接入的网络接口,比如指定只能从eth0网络接口访问80端口:
sudo ufw allow in on eth0 to any port 80
配置外出规则
也可以限制从内向外的连接,这样能防止连接到反弹木马等不可预料的服务上。
默认情况下是允许一切外出连接的,这里先禁止一切外出,再添加白名单:
sudo ufw default deny outgoing
限定连向某个端口
sudo ufw allow out 53 # DNS 53
限定连向某个IP+端口
sudo ufw allow out to 11.22.33.44 port http # TCP 80
sudo ufw allow out to 11.22.33.44 port https # TCP 443
限定从某个网络接口外出
sudo ufw allow out on ens33 to any port 53
查看状态和管理规则
查看防火墙状态:
sudo ufw status
sudo ufw status verbose
查看带编号的规则,删除第2条:
sudo ufw status numbered
sudo ufw delete 2
也可以删除指定的端口
sudo ufw delete allow http
或
sudo ufw delete allow 80
这个能同时删除 IPv4 和 IPv6 的规则。
重启 UFW 服务:
ufw reload
禁用ICMP
为了防止nmap等软件扫描,可以禁用ICMP响应。
修改配置文件/etc/ufw/before.rules
cp /etc/ufw/before.rules /etc/ufw/before.rules_backup_date
vim /etc/ufw/before.rules
初始内容如下:
# ok icmp codes for INPUT
-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
将上面的ACCEPT修改为DROP:
# ok icmp codes for INPUT
-A ufw-before-input -p icmp --icmp-type destination-unreachable -j DROP
-A ufw-before-input -p icmp --icmp-type source-quench -j DROP
-A ufw-before-input -p icmp --icmp-type time-exceeded -j DROP
-A ufw-before-input -p icmp --icmp-type parameter-problem -j DROP
-A ufw-before-input -p icmp --icmp-type echo-request -j DROP
重启 UFW 服务即可:
ufw reload