1.什么是防火墙?
所谓防火墙指的是一个由软件和硬件设备组合而成、在内部网和外部网之间、专用网与公共网之间的界面上构造的保护屏障.是一种获取安全性方法的形象说法,它是一种计算机硬件和软件的结合,使Internet与Intranet之间建立起一个安全网关(Security Gateway),从而保护内部网免受非法用户的侵入,防火墙主要由服务访问规则、验证工具、包过滤和应用网关4个部分组成,防火墙就是一个位于计算机和它所连接的网络之间的软件或硬件。该计算机流入流出的所有网络通信和数据包均要经过此防火墙,它是内核上的插件,相当于一个表格。
2.防火墙域:
home(家庭):用于家庭网络,仅接受dhcpv6-client、ipp-client、mdns、samba-client、ssh服务
internal(内部):用于内部网络,仅接受dhcpv6-client、ipp-client、mdns、samba-client、ssh服务
public(公共):用于公共区域使用,仅接受dhcpv6-client、ssh服务
trusted(信任):接受所有网络连接
work(工作):用于工作区,仅接受dhcpv6-client、ipp-client、ssh服务
block(限制):拒绝所有网络连接
dmz(非军事区):仅接受ssh服务连接
drop(丢弃):任何接收的网络数据包都被丢弃,没有任何回复
external(外部):出去的ipv4网络连接通过此区域伪装和转发,仅接受ssh服务连接
3.管理防火墙的两种方式:
firewalld与iptables
1)firewalld 高集成(灵活性差)企业七后常用的,相对简单。
2)iptables 复杂,功能强大
注意:两个无法同时使用
环境:
1.常用命令
systemcl mask firewalld 冻结防火墙
systemcl unmask firewalld 解冻防火墙
related 曾经来过,现在又来;
established 一直都在;
firewall-cmd --state 查看火墙是否开启
与firewall-cmd --list-all的区别
前者只能看到是否开启,看到的内容特别有局限性,而后者内容更多一些
firewall-cmd --get-default-zone 查看默认属于哪个域
firewall-cmd --get-active-zone 正在使用的域
firewall-cmd --get-zones 查看所有的域
firewall-cmd --get-services 查看允许通过的所有服务
firewall-cmd --set-default-zone=trusted 将默认的域改为信任,即全开模式
firewall-cmd --zone=public --list-all 列出public这个域所能允许的服务
firewall-cmd --add-interface=172.25.254.111 --zone=trusted 火墙设置为只有111这个ip是在信任域中的。(例如public域时、是没有开httpd这个服务的,所以其他的ip是无法访问Apache的,只有111可以访问)
firewall-cmd --add-interface=eth1 --zone=trusted 设置eth0为信任域
firewall-cmd --remove-interface=172.25.254.111 --zone=public 移除
2.将两块网卡设成不同的域,(此处设置为eth0在public,eth1放在trusted,首先两块网卡都默认属于public)
可以看到两块网卡 eth0,eth1均为public域
先把eth1网卡从public上摘下来
firewall-cmd --remove-interface=eth1 --zone=public
firewall-cmd --list-all 查看是否摘除(此处默认即为public,所以直接--list-all即可,不需要加上域
将eth1加到信任域中;
firewall-cmd --add-interface=eth1 --zone=trusted
查看正在开启的域
firewall-cmd --get-active-zones,此时不能用--list-all,因为它只能列出默认的。
注意:在具有两块网卡的前提下;
3.暂时添加服务
firewall-cmd --add-services=http 加上允许http服务,可以发现浏览器中访问默认目录/var/www/html/下的默认文件index.html中编写的内容
改端口为8080:
1)改/etc/httpd/conf/httpd.conf配置文件80端口为8080,重启服务
2)在火墙中允许8080端口通过
firewall-cmd --add-port=8080/tcp 允许端口8080通过
firewall-cmd --list-all 查看出现8080端口
测试:
在浏览器中输入:172.25.254.111,已不能不能显示 内容,需加上8080端口
172.25.254.111:8080
4.永久添加服务
1).编辑文件
cd /etc/firewalld/
ls
例如加上http (service name=“http”/)
firewalld-cmd --reload 重载
firewall-cmd --list-all 查看http成功加上
cd /lib/firewalld/
ls
cd services/
vim http.xml 编辑服务
例如改变文件中的端口为8080.
firewalld-cmd --reload 重载
firewall-cmd --list-all
永久设定,不会在重启防火墙后恢复原样。
2)permanent
firewall-cmd --permanent --add-service=http
permanent 永久设定
设定成功后firewalld-cmd --reload 重载
5.删除服务
暂时:firewall-cmd --remove-services=http
永久:编辑文件或firewall-cmd --permanent --remove-service=http
firewall-cmd --reload 设定后当前正在使用的不会中断,再次登陆会中断,例如ssh远程连接
firewall-cmd --complete -reload 设定后当前正在使用的会立马中断
6.图形方法设定火墙
7.防火墙访问控制
##三大表五条链(防火墙高级规则)
路由器
filter nat数据转换 mangle(都有)
(经过内核) (不经过内核) input
input input forward
forward output output
output prerouting 路由前 prerouting
postrouting 路由后 postrouting
能从底下溜走的只有nat表中的prerouting路由之前,postrouting,input,output,filter表是经过内核的。
允许某个人远程连接ssh是需要经过内核的,所以需要防火墙高级规则。
Direct Rules
允许某个IP远程连接ssh,是需要经过内核的,所以需要防火墙高级规则(#filter)
cat /etc/services | grep ssh 查看到ssh端口为22
firewall-cmd --direct --add-rule ipv4 filter INPUT 2 -s 172.25.254.250 -p tcp --deport 22 -j ACCEPT
只允许某一台主机可以ssh本机(22端口ssh)
firewall-cmd --direct --remove-rule ipv4 filter INPUT 2 -s 172.25.254.250 -p tcp --deport 22 -j ACCEPT 删除
Rich Rules
1.地址转换
在172.25.150.111这台主机上转换地址为172.25.150.250
即无论哪台主机访问172.25.150.111这台主机,都真实访问的是172.25.150.250,登陆时输入的密码也是250这台主机的
Desktop主机:
1)开启地址伪装功能
firewall-cmd --add-masquerade
2)地址转换
firewall-cmd --add-forword-port=port=22:proto=tcp:toport=22:toaddr=172.25.150.250
3)查看
firewall-cmd --list-all
4)测试:
server主机:
连接172.25.150.111,此时输入的是所转换的主机的密码否则无法登陆。
登陆成功后ifconfig可以看到是所转换的地址的IP.
5)删除
firewall-cmd --remove-forword-port=port=22:proto=tcp:toport=22:toaddr=172.25.150.250
2.地址伪装
Desktop作为路由器即服务器,为客户端server作地址伪装,首先它需要两个网卡,一个IP设为172.25.150.111,一个设为192.168.0.100.
开启伪装功能:firewall-cmd --add-masquerade
输入命令,指定为客户端伪装ip为172.25.254.100
firewall-cmd --add-rich-rule="rule family=ipv4 source address=172.25.254.100 masquerade"
设置地址伪装时,只能伪装成客户端这边已有的IP
firewall-cmd --list-all 察看是否伪装成功。
server:
设定其ip为192.168.0.1,网关为192.168.0.100
重启网络
route -n 查看网关是否设置成功
此时即可ping通192.168.0.100
不过此时,server还是ping不同172.25.254.0/24网段的主机,需要在路由器上再开启一个权限
sysctl -a | grep forwalld 查看forward命令的权限
若没有开需要编辑文件加入
vim /etc/sysctl.conf
server就可以ping通172.25.254.0/24网段的主机了
测试:
ssh登陆172.25.150.250这台主机,w -i会显示伪装的地址即为100这个Ip即Desktop这台主机,实际为server这台主机
3.icmp-block
客户端即Desktop:
伪装功能需要是开启的
firewall-cmd --add-icmp-block=echo-request 拒绝访问
输入此命令后,server立即ping不通172.25.254.111。
firewall-cmd --remove-icmp-block=echo-request
firewall-cmd --add-icmp-block=echo-request --timeout=10 设置延迟10秒后再通
firewall-cmd --remove-icmp-block=destination-unreachable 移除
server端
环境:
1.安装软件
yum install iptables-services
注意:服务端,与测试端的firewalld都必须关闭
2.常用命令
1)查看命令
iptables -nL ##查看默认的filter表信息(即火墙策略)
iptables -nL -t mangle ##显示mangle表
iptables -t nat -F PREROUTING
2)表格命令编辑 ##默认filter表
-I删除
iptables -F ##清空iptables
注意:只清空的话只是暂时的,文件里面默认的并不会被清空,重启后会恢复
service iptables save ##保存数据
清空后保存,再重启就不会恢复
-A添加一条策略,允许访问本机回环接口 ( -i设备回环接口lo)
添加一条策略,允许172.25.254.10访问本机 (-s源)
插入(-I)一条策略,允许172.25.254.10访问本机22端口,即使用ssh连接本机;(默认插入到第一条)
插入一条策略,拒绝172.25.254.10访问本机22端口,并且无任何提示(DROP)
替换(-R)第二条策略为拒绝172.25.254.10访问本机22端口,并且无任何提示
删除第一条(-D)
添加自定义链名
修改自定义链名
删除自定义链
基于状态的匹配扩展 (连接跟踪)
每个网络连接包括以下信 息:源地址、目标地址、源端口、目的端口,称为套
接字对(socket pairs);协议类型、连接状态(TCP协议)和超时时间等。防火墙
把这些信息称为状态(stateful)。状态包过 滤防火墙能在内存中维护一个跟踪状态
的表,比简单包过滤防火墙具备更大的安全性,命令格式如下:iptables -m state --state
»NEW: 该包想要开始一个新的连接(重新连接或连接重定 向)
»RELATED:该 包是属于某个已建立的连接所建立的新连接。举例:FTP的
数据传输连接和控制连 接之间就是RELATED关系。
»ESTABLISHED:该包属于某个已建立的连接。
»INVALID:该 包不匹配于任何连接,通常这些包被DROP。
例如:
(1)在INPUT链添加一条规则,匹配已建立的连接或由已建立的连接所建
立的新连接。即匹配任何的TCP回应包。
#iptables -A INPUT -m state --state RELATED,ESTABLISHED
(2)对于ftp连接能够使用下面的连接跟踪:
主动(Active)ftp连接模式
3.iptables地址转换
1)源地址转换
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 172.25.254.111
-t nat表nat -A POSTROUTING 路由后 -o eth0 网卡eth0 -j SNAT 动作源地址转换 --to-source 172.25.254.111
测试时把server的firewalld关掉
server端ssh真机,实际登陆的是server,真机方显示为172.25.254.111
再去ssh172.25.254.111会发现真实登陆的确实是111,是由于还没有做目的地址转换。
2)目的地址转换
iptables -t nat -A PREROUTING -i eth0 -j DNAT --to-dest 192.168.0.1
PREROUTING 路由前 -j DNAT 动作目的地址转换
iptables -t nat -nL 查看
做完目的地址转换,再ssh172.25.254.111会发现这次登陆的是原本登陆真机的server
3)测试环境
Desktop作为路由器IP为172.25.254.111
server作为测试主机
server IP:192.168.0.1作为源地址;
真机IP:172.25.254.11作为目的地址;
4)删除
iptables -t nat -D POSTROUTING -o eth0 -j SNAT --to-source 172.25.254.111
iptables -t nat -D PREROUTING -i eth0 -j DNAT --to-dest 192.168.0.1