防火墙是一个组件,工作在网络边缘(主机边缘),对进出网络数据包基于一定的规则检查,并在匹配某规则时由规则定义的处理进行处理的一组功能的组件。
防火墙类型
根据工作的层次的不同来划分,常见的防火墙工作在OSI第三层,即网络层防火墙,工作在OSI第七层的称为应用层防火墙,或者代理服务器(代理网关)。
网络层防火墙又称包过滤防火墙,在网络层对数据包进行选择,选择的依据是系统内设置的过滤逻辑,通过检查数据流中每个数据的源地址,目的地址,所用端口号和协议状态等因素来确定是否允许该数据包的通过,以及数据包的流向等。
还可以分为硬件防火墙和软件防火墙
软件防火墙
-
EL6上的防火墙叫做iptables。
-
EL7上的防火墙叫做firewalld。
iptables语法
iptables -t table CMD chain rule-matcher -j target
表 动作 链 规则匹配 执行操作
表table
使用 -t 来指定表,如果省略,则代表对 filter 表进行操作
-
filter 表:用于过滤数据包nat 表:用于修改数据包的来源和目的地 mangle 表:用户修改数据包的生存周期等等 raw 表:跟踪机制
CMD动作
-
A 追加
-
I 插入
-
D 删除
-
L 罗列
-
F 清空
表当中包含链chain
链是用来区分数据包的流向状态
-
INPUT 入站的数据包
-
OUTPUT 出站的数据包
-
PREROUTING 路由判断之前的数据包
-
POSTROUTING 路由判断之后的数据包
-
FORWARD 第一次路由判断之后,到最后一词路由判断之前
规则rule
是用来判断数据包的具体情况
-
-p 协议
-
-s 来源
-
-d 目的地
-
--sport 来源端口
-
--dport 目的端口
-
-i 入站网络接口
-
-o 出站网络接口
-
! 取反
执行操作target
-
ACCEPT 接受
-
DROP 丢弃
-
REJECT 拒绝
-
DNAT 目标地址转换(重写数据包的目的IP地址)
-
SNAT 源地址转换
常用命令:
应用实例说明:
1.
来源 -s 172.25.0.250(注意:如果是一个网段,这样写:172.25.0.0/24)
-s 172.25.0.11
进来的 INPUT
---------
目标
端口号 --dport 21
协议 -p tcp
--------------
允许 ACCEPT
~~~~~~~~~~~
iptables -A INPUT -s 172.25.0.250 -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -s 172.25.0.11 -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j DROP
除了这两个地址其他不允许访问21端口
iptables -L 查看如下图:
2.
进来 INPUT
协议 icmp
---------
扔掉
iptables -A INPUT -p icmp -j DROP
策略保存后拿同网段的ip去ping :
iptables -F 清空禁止ping 的差策略后:
3.
目标内网:--to 192.168.0.10 --to 192.168.0.20
-----------------------------------------------
iptables -t nat -A PREROUTING -d 200.89.6.211 -p tcp --dport 21 -j DNAT --to 192.168.0.10
iptables -t nat -A PREROUTING -D 200.89.6.211 -p tcp --dport 21 -j DNAT --to 192.168.0.20
运行、停止、禁用firewalld:
-
启动:
systemctl start firewalld
-
查看状态:
systemctl status firewalld
或者firewall-cmd --state
-
停止:
systemctl disable firewalld
-
禁用:
systemctl stop firewalld
可以通过1.firewall-config图形化工具 来控制 2.firewall-cmd 命令行工具
Firewall-config
-
Configuration runtime和permanent 分别是运行时和永久
-
zone 默认区域配置
-
Trusted:允许所有传入数据包
-
drop:默认丢弃所有包
-
block:拒绝所有外部连接,允许内部发起的连接
-
public:指定外部连接可以进入
-
external:这个不太明白,功能上和上面相同,允许指定的外部连接
-
dmz:和硬件防火墙一样,受限制的公共连接可以进入
-
work:工作区,概念和workgoup一样,也是指定的外部连接允许
-
home:类似家庭组
-
internal:信任所有连接
-
富规则:可用于表达基本的允许和拒绝规则。Configuration permenent firewall-cmd --permanent --zone=public --add-rich-rule=\'rule family=ipv4 service name="ssh"source address=192.168.137.11 log prefix="ssh" level="notice" limit value="3/m" reject\'
将来自于192.168.137.11的ssh拒绝掉,并且将notice以上的日志写入到ssh日志当中,限制每分钟最多三条记录。
实例:
systemctl stop/start firewalld.service #停止firewall
service firewalld start
systemctl disable firewalld.service #禁止firewall开机启动
firewall-cmd --zone=public --add-port=80/tcp 允许某个端口开放
firewall-cmd --reload 重启防火墙
- firewall-cmd [--zone=<zone>] --remove-port=<port>[-<port>]/<protocol> 移除允许的端口
- firewall-cmd [--zone=<zone>] --query-port=<port>[-<port>]/<protocol> 查询开启的端口
- firewall-cmd --permanent [--zone=<zone>] --add-service=<service> 启用一项服务
- firewall-cmd --permanent [--zone=<zone>] --remove-service=<service> 禁用一项服务
- firewall-cmd --permanent [--zone=<zone>] --query-service=<service> 查询一项服务是否启用
- 重新加载防火墙规则:firewall-cmd --reload (不重启服务)
- firewall-cmd --complete-reload (会重启服务)
查询端口号80 是否开启:firewall-cmd --query-port=80/tcp
永久开放80端口号:firewall-cmd --permanent --zone=public --add-port=80/tcp
移除80端口号:firewall-cmd --permanent --zone=public --remove-port=80/tcp
--zone #作用域
--add-port=80/tcp #添加端口,格式为:端口/通讯协议
--permanent #永久生效,没有此参数重启后失效