Linux—系统网络防火墙(二)---ufw

一、安装ufw服务

ubuntu@VM-0-16-ubuntu:~$ sudo apt-get install ufw

二、开启、关闭、重启ufw服务

1、开启 ufw 防火墙

ubuntu@VM-0-16-ubuntu:~$ sudo ufw enable            # 开启了防火墙,并在系统启动时自动开启。
ubuntu@VM-0-16-ubuntu:~$ sudo ufw default deny      # 关闭所有外部对本机的访问,但本机访问外部正常。

2、关闭 ufw 防火墙

ubuntu@VM-0-16-ubuntu:~$ sudo ufw disable

3、重启 ufw 防火墙

ubuntu@VM-0-16-ubuntu:~$ sudo ufw reload                            # 方式一
ubuntu@VM-0-16-ubuntu:~$ sudo ufw disable && sudo ufw enable        # 方式二

4、查看 ufw 防火墙状态

ubuntu@VM-0-16-ubuntu:~$ sudo ufw status

5、默认 ufw 防火墙设置

ubuntu@VM-0-16-ubuntu:~$ sudo ufw default deny       # 默认拒绝外部访问主机
ubuntu@VM-0-16-ubuntu:~$ sudo ufw default allow      # 默认允许外部访问本机

6、查看 ufw 防火墙版本

ubuntu@VM-0-16-ubuntu:~$ sudo ufw version

三、启用端口、关闭端口

1、开启、禁用、删除相应端口

ubuntu@VM-0-16-ubuntu:~$ sudo ufw deny 3120       # 拒绝外部访问3120端口,3120后可跟/tcp或/udp,表示tcp或udp封包
ubuntu@VM-0-16-ubuntu:~$ sudo ufw allow 3120      # 允许外部访问3120端口,3120后可跟/tcp或/udp,表示tcp或udp封包。
ubuntu@VM-0-16-ubuntu:~$ sudo ufw delete deny 3120       # 删除以前定义的"拒绝访问3120端口"的规则。
ubuntu@VM-0-16-ubuntu:~$ sudo ufw delete allow 3120      # 删除以前定义的"允许访问3120端口"的规则。

2、开启、禁用、删除相应服务

ubuntu@VM-0-16-ubuntu:~$ sudo ufw deny smtp       # 禁止外部访问smtp服务。
ubuntu@VM-0-16-ubuntu:~$ sudo ufw allow smtp      # 允许外部访问smtp服务。
ubuntu@VM-0-16-ubuntu:~$ sudo ufw delete deny smtp       # 删除上面建立的 smtp 服务的拒绝访问规则。
ubuntu@VM-0-16-ubuntu:~$ sudo ufw delete allow smtp      # 删除上面建立的 smtp 服务的允许访问规则。

ubuntu@VM-0-16-ubuntu:~$ sudo ufw allow/deny servicename   # 从/etc/services中找到对应service的端口,进行过滤。

3、指定 IP 访问

ubuntu@VM-0-16-ubuntu:~$ sudo ufw allow from 192.168.3.142             # 允许此IP访问所有的本机端口(允许某特定 IP)
ubuntu@VM-0-16-ubuntu:~$ sudo ufw delete allow from 192.168.3.142      # 删除这条规则
ubuntu@VM-0-16-ubuntu:~$ sudo ufw allow from xx.xx.xx.xx to any port 22

四、屏蔽指定IP、放行指定IP

1、屏蔽指定IP(所有端口都不能访问)

ubuntu@VM-0-16-ubuntu:~$ sudo ufw deny from 1.1.1.1                    # 屏蔽IP为1.1.1.1的主机访问。
ubuntu@VM-0-16-ubuntu:~$ sudo ufw deny from 1.1.1.1 to any             # 屏蔽IP为1.1.1.1的主机访问。与上面效果一样。

ubuntu@VM-0-16-ubuntu:~$ sudo ufw delete deny from 1.1.1.1             # 删除上面的规则。
ubuntu@VM-0-16-ubuntu:~$ sudo ufw delete deny from 1.1.1.1 to any      # 删除上面的规则。

2、放行指定IP(所有端口都可以访问)

ubuntu@VM-0-16-ubuntu:~$ sudo ufw allow from 1.1.1.1                    # 允许IP为1.1.1.1的主机访问本机所有端口。
ubuntu@VM-0-16-ubuntu:~$ sudo ufw allow from 1.1.1.1 to any             # 放行IP为1.1.1.1的主机访问本机所有端口。与上面效果一样。

ubuntu@VM-0-16-ubuntu:~$ sudo ufw delete allow from 1.1.1.1             # 删除某个IP地址访问本机所有端口。
ubuntu@VM-0-16-ubuntu:~$ sudo ufw delete allow from 1.1.1.1 to any      # 删除上面的规则。

五、指定IP访问指定端口

1、允许指定ip访问指定端口

ubuntu@VM-0-16-ubuntu:~$ sudo ufw allow proto tcp from 1.1.1.1 to any port 88           # 允许自1.1.1.1的tcp封包访问本机的88端口。
ubuntu@VM-0-16-ubuntu:~$ sudo ufw allow proto tcp from 1.1.1.1 to 172.16.0.5 port 98    # 与上面效果一样,这里本机ip应该为内网IP,外网IP不行。

ubuntu@VM-0-16-ubuntu:~$ sudo ufw delete allow proto tcp from 1.1.1.1 to any port 88            # 删除上面规则。
ubuntu@VM-0-16-ubuntu:~$ sudo ufw delete allow proto tcp from 1.1.1.1 to 172.16.0.5 port 98     # 删除上面规则。

2、拒绝指定ip访问指定端口

ubuntu@VM-0-16-ubuntu:~$ sudo ufw deny proto tcp from 1.1.1.1 to any port 88           # 拒绝自1.1.1.1的tcp封包访问本机的88端口。
ubuntu@VM-0-16-ubuntu:~$ sudo ufw deny proto tcp from 1.1.1.1 to 172.16.0.5 port 98    # 与上面效果一样,这里本机ip应该为内网IP,外网IP不行。

ubuntu@VM-0-16-ubuntu:~$ sudo ufw delete deny proto tcp from 1.1.1.1 to any port 88            # 删除上面规则。
ubuntu@VM-0-16-ubuntu:~$ sudo ufw delete deny proto tcp from 1.1.1.1 to 172.16.0.5 port 98     # 删除上面规则。

六、端口转发

1、编辑 /etc/default/ufw 文件,更改参数 DEFAULT_FORWARD_POLICY 的值。

DEFAULT_FORWARD_POLICY="ACCEPT"      # 将 DROP 改为 ACCEPT

2、编辑 /etc/ufw/sysctl.conf 文件,若允许ipv4转发,将里边的转发选项去掉注释(如果你要开启 ipv6转发,那么就把 ipv6的注释也去掉)。启用内核转发(取消注释)。

net/ipv4/ip_forward=1
#net/ipv6/conf/default/forwarding=1
#net/ipv6/conf/all/forwarding=1

3、编辑 /etc/ufw/before.rules 文件,添加NAT到配置文件中。将以下内容添加到过滤器规则(*filter)之前。

*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]

-A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3120                     # 方式一:将请求80端口的数据转发到本机的3120端口。
-A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 172.16.0.12:3120      # 方式二:将请求80端口的数据转发到本机的3120端口。注意:要使用本机ip地址+端口,如果使用127.0.0.1:3120,没效果。

-A PREROUTING -p tcp --dport 90 -j DNAT --to-destination 32.232.56.69:3120     # 将请求90端口的数据转发到IP为32.232.56.69上的3120端口
-A POSTROUTING -d 32.232.56.69 -j MASQUERADE

COMMIT

4、重启 ufw 使配置生效。

ubuntu@VM-0-16-ubuntu:~$ sudo ufw reload                       # 方式一
ubuntu@VM-0-16-ubuntu:~$ sudo ufw disable && sudo ufw enable   # 方式二

七、通过 ipset 来封禁IP

1、创建一个新的 ipset:test 是 ipset 名称

ubuntu@VM-0-16-ubuntu:~$ sudo ipset create test hash:net                   # 创建一条新的IP集,名为test(名字任意)
ubuntu@VM-0-16-ubuntu:~$ sudo ipset create test hash:net timeout 3600      # timeout 3600 表示封禁3600s

2、加入一个名单 ip 与 去除一个名单 ip

ubuntu@VM-0-16-ubuntu:~$ sudo ipset add test 1.1.1.1      # 加入一个名单 ip
ubuntu@VM-0-16-ubuntu:~$ sudo ipset del test 1.1.1.1      # 去除一个名单 ip

3、创建防火墙规则

ubuntu@VM-0-16-ubuntu:~$ sudo iptables -I INPUT -m set --match-set test src -j DROP         # 拒绝访问
ubuntu@VM-0-16-ubuntu:~$ sudo iptables -D INPUT -m set --match-set test src -j DROP         # 删除规则

ubuntu@VM-0-16-ubuntu:~$ sudo iptables -I INPUT -m set --match-set test src -p tcp -j DROP      # 拒绝访问(tcp协议)
ubuntu@VM-0-16-ubuntu:~$ sudo iptables -D INPUT -m set --match-set test src -p tcp -j DROP      # 删除规则

ubuntu@VM-0-16-ubuntu:~$ sudo iptables -I INPUT -m set --match-set test src -p tcp --destination-port 25 -j DROP      # test这个ipset里的ip都无法访问22端口
ubuntu@VM-0-16-ubuntu:~$ sudo iptables -D INPUT -m set --match-set test src -p tcp --destination-port 25 -j DROP      # 删除规则

4、查看已创建的 ipset

ubuntu@VM-0-16-ubuntu:~$ sudo ipset list

5、删除已创建的 ipset

ubuntu@VM-0-16-ubuntu:~$ sudo ipset destroy test

6、导入导出 ipset 规则

ubuntu@VM-0-16-ubuntu:~$ sudo ipset save test -f test.txt           # 导出 ipset 规则,保存到文件
ubuntu@VM-0-16-ubuntu:~$ sudo ipset restore -f test.txt             # 导入 ipset 规则

ipset 的一个优势是集合可以动态的修改,即使ipset的iptables规则目前已经启动,新加的入ipset的ip也生效。

八、其它姿势

1、添加规则:

sudo ufw allow from 3.3.3.3 to any
sudo ufw insert 1 allow from 3.3.3.3 to any    # 插入到位置1,即在规则最上面加入一条规则

sudo ufw status numbered                       # 方式一:先查看所有规则的序号,然后根据序号删除。
sudo ufw delete 1                              # 这样就是删除第一条规则啦
sudo ufw delete allow from 3.3.3.3 to any      # 方式二:

2、允许和禁止ping(编辑 before.rules 文件)

ubuntu@VM-0-16-ubuntu:~$ sudo vim /etc/ufw/before.rules
-A ufw-before-input -p icmp --icmp-type echo-request -j DROP                                                     # 禁止ping

-A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT                                                   # 允许PING
-A ufw-before-input -p icmp --icmp-type echo-request –s 192.168.1.45 -m state --state ESTABLISHED -j ACCEPT      # 只允许固定主机ping
ubuntu@VM-0-16-ubuntu:~$ sudo /etc/init.d/ufw force-reload

  

 https://www.cnblogs.com/Johnson-lin/p/11261338.html

https://blog.csdn.net/tycoon1988/article/details/46515535

https://blog.csdn.net/firehive/article/details/81260169

posted @ 2019-09-23 09:20  刘_love_田  阅读(1368)  评论(0编辑  收藏  举报