linux防火墙使用教程
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