Linux进阶——防火墙
一、防火墙的简介
之前的实验中,默认会将防火墙关闭,这使得我们的服务如(nginx的web服务,dns的域名解析服务能被客户机所访问),因为在端口前面的墙被我们给干掉了。如果打开防火墙,未开放的端口无法对外进行相关的服务,外面的客户机也就无法得到服务。
防火墙:位于内部网和外部网之间的一个屏障,他会按照系统管理员事先规定好的规则来控制数据包的进出。软件防火墙(如Netfilter)的功能为数据包过滤机制。
Netfilter机制可以进行的分析工作有:
拒绝让Internet的数据包进入主机的某些端口。
拒绝让某些IP来源的数据包进入。
拒绝让带有特殊标记(flag)进入主机,最常见的就是带有SYN的主动连接的标志。
分析硬件地址(MAC)来决定是否连接。
但是防火墙并能保证网络一定安全。
防火墙不能阻止病毒或木马程序,防火墙对于内部LAN的攻击无能为力。
二、iptables
防火墙会从上至下的顺序来读取配置的策略规则,在找到匹配项之后立刻执行匹配的结果(放行,阻止,默认是阻止),所以假设第一条指令为允许所有的用户访问80端口,那么第二条的不允许192.168.68.130主机访问这天规则就是无效的。
iptables 服务把用于处理或过滤流量的策略条目称之为规则,多条规则可与组成规则链,而规则链依据数据包的处理位置的不同可以分为:
在进行路由选择前处理数据包,用于目标地址转换(PREROUTING);
处理流入数据包(INPUT);
处理流出数据包(OUTPUT);
处理转发数据包(FORWARD);
在进行路由选择后处理数据包(POSTROUTING);
yum install iptables -y
yum install iptables-nft-services #下载防火墙软件iptables
systemctl stop firewalld #停用防火墙软件firewalld
systemctl start iptables #启用防火墙软件iptables
iptables -L --line-numbers #列出所有的指令
iptables -D INPUT 2 #删除INPUT的第二条指令
客户机无法访问服务端
iptables -I INPUT -p icmp -j ACCEPT #写入指令
客户机可以访问服务端
#只给192.168.68.99提供http服务
iptables -I INPUT -p tcp -s 192.168.68.99 --dport 80 -j ACCEPT #写入指令
三、firewalld
常用参数:
--list-all #显示当前区域的显卡配置参数、资源、端口以及服务等信息;
--add-service=<服务名> #设置默认区允许该服务
--add-port=<端口号/协议> #设置默认区域允许该端口的流量
--remove-service=<服务名> #设置默认区不在允许该服务
--permanent #永久添加,重启服务器依旧有效
--reload #重载服务,与永久添加配套使用,当永久添加之后需要进行重载,然后才能找到
firewall-cmd --list-all #列出所有防火墙信息
firewall-cmd --add-service=http #添加http服务
客户端即可访问!
firewall-cmd --add-service=http --permanent
firewall-cmd --reload #永久添加http服务
firewall-cmd --add-port=10000/tcp #开放10000端口
firewall-cmd --remove-port=2000/tcp #关闭2000端口
#只允许192.168.68.99访问http服务:
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.68.99" service name="http" accept' --permanent #创建富命令,使得192.168.68.99得到http服务
#禁止IP:192.168.68.99进行ssh访问,应写为IP/32
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.68.99/32" service name="ssh" reject' --permanent #禁止192.168.68.99用户访问ssh服务
★firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.68.0/24" forward-port="5423" protocol="tcp" to-port="80"' --permanent #网段为192.168.68.0/24的主机当用5423访问服务器时,服务器会将该服务转移到80端口
★firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.68.0/24" forward-port port="5423 " protocol="tcp" to-port="80" to-addr="192.168.68.100"' #防火墙会将网段为192.168.68.0/24的客户端主机访问5423端口时,将数据转发到192.168.68.100:80端口,本机的192.168.68.100:80是nginx的web页面内容
补充:
firewall-cmd --remove-rich-rule='所要删除的指令' #删除富指令
firewall-cmd --remove-rich-rule='rule family="ipv4" source address="192.168.68.0/24" forward-port="5423" protocol="tcp" to-port="80"' --permanent #删除指令
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.68.0/24" destination address="192.168.68.100" forward-port port="5423" protocol="tcp" to-port="80"' #网段为192.168.68.100的主机当用5423访问服务器时,服务器会将该服务转移到80端口(作用不大)
四、补充知识:虚拟机初始状态设置
vim /etc/chrony.conf #修改时间服务器的配置添加如下信息
systemctl enable --now chronyd #设置开机自启
检查网络源:ll /etc/yum.repos.d
vim /etc/selinux/config #关闭selinux服务
systemctl disable --now firewalld #关闭防火墙
reboot #重启,再测试
date #查看时间是否正确
getenforce #查看selinux状态
systemctl status firewalld #查看防火墙状态