防火墙是一组规则。当数据包流入或流出受保护网络空间时,将根据防火墙规则测试其内容(特别是有关其来源,目标和计划使用的协议的信息),以确定是否应允许其通过。防火墙可以根据协议或基于目标的规则过滤请求。
一方面,iptables是一种在linux上管理防火墙规则的工具。另一方面,firewalld也是用于管理linux防火墙规则的工具
相较于传统的防火墙管理配置工具,firewalld支持动态更新技术并加入了区域(zone)的概念。简单来说,区域就是firewalld预先准备了几套防火墙策略集合(策略模板),用户可以根据生产场景的不同而选择合适的策略集合,从而实现防火墙策略之间的快速切换。例如,我们有一台笔记本电脑,每天都要在办公室、咖啡厅和家里使用。
按常理来讲,这三者的安全性按照由高到低的顺序来排列,应该是家庭、公司办公室、咖啡厅。当前,我们希望为这台笔记本电脑指定如下防火墙策略规则:在家中允许访问所有服务;在办公室内仅允许访问文件共享服务;在咖啡厅仅允许上网浏览。
在以往,我们需要频繁地手动设置防火墙策略规则,而现在只需要预设好区域集合,
然后只需轻点鼠标就可以自动切换了,从而极大地提升了防火墙策略的应用效率。
firewalld中常见的区域名称(默认为public);
区域:
firewalld将网卡对应到不同的区域(zone),zone 默认共有9个:block(拒绝)
block(拒绝) dmz(非军事化) drop(丢弃) external(外部) home(家庭) internal(内部) public(公开) trusted(信任) work(工作区).
不同的区域之间的差异是其对待数据包的默认行为不同,firewalld的默认区域为public;
文件:
/usr/lib/firewalld/services/ :firewalld服务默认在此目录下定义了70+种服务供我们使用,格式:服务名.xml;
/etc/firewalld/zones/ : 默认区域配置文件,配置文件中指定了编写完成的规则(规则中的服务名必须与上述文件名一致);
firewalld
yum install -y firewalld firewall-config
systemctl start firewalld 开启防火墙
systemctl enable firewalld 开机自启动防火墙
systemctl disable firewalld 开机不启动防火墙
systemctl stop firewalld 关闭防火墙
使用命令行接口配置防火墙
[root@desktop8 Desktop]# firewall-cmd --stat 查看防火墙状态
running
[root@desktop8 Desktop]# firewall-cmd --get-
--get-active-zones --get-icmptypes --get-zone-of-interface=
--get-default-zone --get-services --get-zones
[root@desktop8 Desktop]# firewall-cmd --get-active-zones
ROL
sources: 172.25.0.252/32
public
interfaces: eth0
[root@desktop8 Desktop]# firewall-cmd --get-default-zone 默认区域
public
[root@desktop8 Desktop]# firewall-cmd --get-services 列出服务
amanda-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns ftp high-availability
http https imaps ipp ipp-client ipsec kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns
mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3s
postgresql proxy-dhcp radius rpc-bind samba samba-client smtp ssh telnet tftp
tftp-client transmission-client vnc-server wbem-https
[root@desktop8 Desktop]# firewall-cmd --list-all-zones 列出所有区域
[root@desktop8 Desktop]# firewall-cmd --permanent --zone=trusted --add-source=172.25.254.250
success 给172.25.254.250客户端信任区域
[root@desktop8 Desktop]# firewall-cmd --reload 重装载防火墙
success
[root@desktop8 Desktop]# firewall-cmd --permanent --remove-source=172.25.254.250 --zone=trusted
success
[root@desktop8 Desktop]# firewall-cmd --reload
success
iptables
iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。除非您正在使用 Red Hat Linux 7.1 或更高版本,否则需要下载该工具并安装使用它。
iptables有三个表,分别是filter表、nat表、mangle表
filter表:
filter主要和主机自身有关,主要负责防火墙功能 过滤本机流入流出的数据包是默认使用的表;
nat表:
负责网络地址转换,即来源于目的IP地址和端口的转换,一般用于共享上网或特殊端口的转换服务
mangle表:
将报文拆开来并修改报文标志位,最后封装起来
关于iptables的详细内容请参照:http://www.zsythink.net/archives/1199
1.firewall-cmd --direct --get-all-rules 查看所有重定义规则
2.firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -p tcp --dport 80 -s 172.25.254.8 -j ACCEPT
网络为ipv4 filter表验证第一位 tcp协议的80端口 数据来源为8号主机 -j表示动作,同意(注意大小写)
3.firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -p tcp --dport 22 -s 172.25.254.8 -j ACCEPT
22端口是ssh服务的默认端口,当ssh服务没有添加到火墙允许时,只允许8号主机访问ssh服务,但是当添加到火墙允许后,ssh服务对所有客户端都开放。
4.firewall-cmd --direct --remove-rule ipv4 filter INPUT 1 -p tcp --dport 22 -s 172.25.254.8 -j ACCEPT
移除只允许8号主机访问ssh服务重定义规则
5.firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -p tcp --dport 22 -s 172.25.254.8 -j REJECT
当ssh服务没有添加到火墙允许时,只拒绝8号主机访问ssh服务
6.firewall-cmd --direct --remove-rule ipv4 filter INPUT 1 -p tcp --dport 22 -s 172.25.254.8 -j REJECT
移除规则
地址伪装的端口转换
SNAT:源地址转换
真实主机ip为172.25.254.8/24
用desktop作为路由eth0=1.1.1.10/24,eth1=172.25.254.108/24
打开server虚拟机,设置其IP为1.1.1.1/24,网关为1.1.1.10
开启desktop的地址伪装,开启路由功能
server虚拟机ping 172.25.254.8,可以ping通。
DNAT:目标地址转换
在源地址转换的基础上,在desktop虚拟机上输入命令:
firewall-cmd --add-forward-port=port22:proto=tcp:toport=22:toaddr=172.25.254.8
意思是当其他主机ssh远程连接desktop时,让其他主机去ssh远程连接8号主机
测试:在server虚拟机中:ssh root@1.1.1.10连接desktop,系统会有警告,因为要连的主机变了,可能会弹出一个路径,需要删除路径下的known_hosts文件再次ssh root@1.1.1.10然后输入的是8号主机的密码,就可以连接到8号主机了,如果没有弹出路径,就不必做这一步操作。
使用iptables命令
环境:
systemctl stop firewalld 关闭火墙,为了不与iptables冲突,以免影响实验效果
systemctl mask firewalld 冻结firewalld
systemctl disable firewalld
yum install iptables-services 这里需要安装iptables组件,因为使用的系统为rhel7.0版本
systemctl start iptables
systemctl enable iptables
常用命令
iptables -L 列出filter表,带解析,filter是默认的表
iptables -nL 不带解析,列出filter表
iptables -t nat -nL 列出nat表
iptables -t mangle -nL 列出mangle表
iptables -F 清空表里面的所有内容,但不会保存,重启iptables服务后,还会出现
service iptables save 保存表中内容的命令
iptables -A INPUT -s 172.25.254.8 -p tcp --dport 22 -j REJECT 有提示的拒绝8号主机访问22号端口
iptables -A INPUT -s 172.25.254.8 -p tcp --dport 22 -j DROP 无提示的拒绝8号主机访问22号端口
iptables -t nat -vnL PREROUTING 列出nat表里的PREROUTING的规则连
iptables -E allowed disallowed 修改规则链名称,只能修改自己创建的规则链,不能修改系统本身有的规则连
iptables -D INPUT 3 删除filter表中的第三条规则
iptables -D INPUT -s 172.25.254.8 -j DROP 按内容删除
iptables -R INPUT 3 -j ACCEPT 将原来编号为3的规则动作改为ACCEPT
iptables -P INPUT DROP 设置filter表INPUT链的默认规则,当数据包没有被规则列表里的任何规则匹配到时,按此默认规则处理
iptables -N redhat 添加自定义规则链
iptables -X redhat 删除自定义规则链