linux防火墙使用教程

2023-04-13  本文已影响0人  JJJoeee

Ubuntu-UFW:

ufw status #查看状态

ufw verbose #查看策略

# Status: inactive(表示未激活)

ufw enable #开启防火墙

ufw default deny #默认拒绝所有

ufw disable #关闭防火墙

ufw reset #重置防火墙,相当于iptables -F

ufw reload #重载配置,一般修改配置文件后使用

# 打开或关闭某个端口,例如:

ufw allow 53 # 允许外部访问53端口(tcp/udp)

ufw allow 3690 # 允许外部访问3690端口(svn)

ufw allow from 192.168.1.111 # 允许此IP访问所有的本机端口

ufw allow proto tcp from 192.168.0.0/24 to any port 22 # 允许指定的IP段访问特定端口

ufw delete allow smtp # 删除上面建立的某条规则,比如删除svn端口就是 ufw delete allow 3690

下面是ufw命令行的一些示例:

ufw enable/disable:打开/关闭ufw

ufw status:查看已经定义的ufw规则

ufw default allow/deny:外来访问默认允许/拒绝

ufw allow/deny 20:允许/拒绝访问20端口,20后可跟/tcp或/udp,表示tcp或udp封包。

sudo ufw allow proto tcp from 192.168.0.0/24 to any port 22:允许自192.168.0.0/24的tcp封包访问本机的22端口。

ufw delete allow/deny 20:删除以前定义的"允许/拒绝访问20端口"的规则
关于docker访问控制:
在ubuntu的ufw中不需要额外对docker进行防火墙配置,只需要正常配置即可

firewall-cmd:

firewall-cmd是iptables的封装版,具备比iptables更强的访问控制功能;

配置文件位置: /etc/firewalld/zones/public.xml

【启动关闭firewalld】

启动该服务会覆盖iptables策略

systemctl stop firewalld

systemctl start firewalld #若开启失败可以先执行:systemctl unmask firewalld

systemctl restart firewalld
【查看策略】
firewall-cmd --list-all

firewall-cmd --get-default-zone #查看默认区域,一般是public

firewall-cmd --zone=public --list-all #查看所有策略

firewall-cmd --zone=public --list-ports #查看端口限制

firewall-cmd --state #查看状态是否在运行
【增加策略】
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.0.142" port protocol="tcp" port="80" accept"

firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="0.0.0.0/0" port protocol="tcp" port="80" drop"

firewall-cmd --reload
【删除策略】
firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.0.142" port protocol="tcp" port="80" accept"
【直接开放IP或服务】
firewall-cmd --permanent --add-source=192.168.0.0/22

firewall-cmd --permanent --remove-source=192.168.0.0/22

firewall-cmd --permanent --add-service=http

firewall-cmd --permanent --add-port=80/tcp

常见场景:

修改配置文件:/etc/firewalld/zones/public.xml

<?xml version="1.0" encoding="utf-8"?>
<zone>
 <short>Public</short>
 <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
 <service name="dhcpv6-client"/>
 <rule family="ipv4">
 <source address="10.1.100.221"/>
 <port protocol="tcp" port="22"/>
 <accept/>
 </rule>
 <rule family="ipv4">
 <source address="10.2.25.105"/>
 <port protocol="tcp" port="22"/>
 <accept/>
 </rule>
 <rule family="ipv4">
 <source address="10.2.25.105"/>
 <port protocol="tcp" port="443"/>
 <accept/>
 </rule>
 <rule family="ipv4">
 <source address="10.2.25.105"/>
 <port protocol="tcp" port="8834"/>
 <accept/>
 </rule>
 <rule family="ipv4">
 <source address="10.2.25.105"/>
 <port protocol="tcp" port="8080"/>
 <accept/>
 </rule>
 <rule family="ipv4">
 <source address="10.2.25.105"/>
 <port protocol="tcp" port="8088"/>
 <accept/>
 </rule>
</zone>
关于docker访问控制:实际测试过没用,因为docker启动会自动添加iptbales放通

将网卡添加到public

firewall-cmd --zone=public --add-interface=docker0

查看网卡属于哪个zone

firewall-cmd --get-zone-of-interface=enp192

firewall-cmd --get-zone-of-interface=docker0

iptables:

配置文件位置: /etc/sysconfig/iptables

启动关闭iptables:
service iptables start

service iptables stop

service iptables restart
查看策略:
iptables -L #或-nL

iptables -L INPUT -n

iptables -L OUTPUT -n

清空策略:iptables -F

添加策略:iptables -A 或 iptables -I

删除策略:iptables -D

语法:
iptables -【动作:-A -D】 【方向:INPUT OUTPUT】 -p【协议:默认所有】-m【协议扩展--:默认所有】 -s【源IP】--sport【源端口】 -d【目的ip】--dport【目的端口】 -j【处理动作:ACCEPT或DROP】

关于docker访问控制:

禁止访问8080端口:

iptables -A FORWARD -p tcp --dport 8080 -j DROP

禁止IP访问8080端口:

iptables -I FORWARD -p tcp -d 172.17.0.2 --dport 80 -j DROP

常见场景:

【进方向】

允许所有IP访问80、8888端口

仅允许192.168.0.108访问22、3306端口

默认禁止进方向的访问

iptables -I INPUT -p icmp -j ACCEPT

iptables -A INPUT -p tcp -m tcp -s 192.168.0.108/32 --dport 22 -j ACCEPT

iptables -A INPUT -p tcp -m tcp -s 192.168.0.108/32 --dport 3306 -j ACCEPT

iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

iptables -A INPUT -p tcp -m tcp --dport 8888 -j ACCEPT

iptables -A INPUT -j DROP

service iptables save

【出方向】

允许访问xx内网ip:

允许访问yum源:

禁止访问互联网:

iptables -I OUTPUT -p icmp -j ACCEPT

iptables -A OUTPUT -s 192.168.0.108/24 -j ACCEPT

iptables -A OUTPUT -j DROP

service iptables save

【设置白名单】

#定义白名单群组

iptables -N whitelist

设置白名单IP,开放ip可以访问设备,白名单就按类似规则增加就可以

iptables -A whitelist -s 192.168.0.1 -j ACCEPT

开放所有设备主动访问的服务器,处在RELATED,ESTABLISHED状态可以通信,这样设备需要主动访问的服务器就不用一个一个添加到白名单了

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j whitelist

iptables -A INPUT -p icmp -j ACCEPT

iptables -A INPUT -i lo -j ACCEPT

iptables扩展:使用-m+扩展模块可以调用iptables扩展。

https://blog.csdn.net/qq_60787657/article/details/127354920

ip详解介绍:https://zhuanlan.zhihu.com/p/559191447

host.allow和host.deny文件:

etc/hosts.allow和/etc/hosts.deny两个文件是控制远程访问设置的,可以进行源ip的访问控制,允许或者拒绝某个ip或者ip段的客户访问linux的某项服务。

我们通常只对管理员开放SSH登录,那我们就可以禁用不必要的IP,而只开放管理员可能使用到的IP段。

1.修改/etc/hosts.allow文件

sshd:192.168.1.*:allow

以上写法表示允许192.168.1.*一个ip段连接sshd服务(这还需要hosts.deny这个文件配合使用),当然:allow完全可以省略的。

当然如果管理员集中在一个IP那么这样写是比较省事的

all:192.168.1.11

以上写法表示接受11这个ip的所有请求!

2.修改/etc/hosts.deny文件

此文件是拒绝服务列表,文件内容如下:

sshd:all:deny

sshd:all:deny表示拒绝了所有sshd远程连接。如上 :deny 可以省略。

注:当hosts.allow和 host.deny相冲突时,以hosts.allow设置为准。

注意修改完后重启服务:

service xinetd restart

配置参考:https://blog.csdn.net/yangjiehuan/article/details/9253855

两者的区别:https://www.cnblogs.com/lh438369/p/16313781.html

https://blog.csdn.net/qq_42599616/article/details/125435883

https://www.cnblogs.com/shenyuanhaojie/p/16418843.html

https://www.cnblogs.com/littlehb/p/15884964.html

三者优先级的关系:

.host文件>firewalld>iptables

上一篇 下一篇

猜你喜欢

热点阅读