防火墙
分类:硬件防火墙、软件防火墙
一、iptables
iptables,全称为 iptables/netfilter
包过滤防火墙
真正实现其实为内核空间中的
netfilter
结构
四张表
- filter : 实现数据包的过滤
- nat : 主要修改数据包的地址和端口,例如源地址或目标地址
- mangle : 对数据包进行修改,例如给数据包打MARK
- raw : 主要做连接追踪
五条链
- INPUT
- OUTPUT
- FORWARD
- PREROUTING
- POSTROUTING
表到链对应关系
filter: (INPUT,FORWARD,OUTPUT)
nat:(PREROUTING,POSTROUTING,INPUT,OUTPUT)
mangle: (PREROUTING,POSTREOUTING,INPUT,OUTPUT,FORWARD)
raw:(PREROUTING,OUTPUT)
filters
yum install iptables-services
systemctl status iptables
配置规则顺序:从上往下,匹配到则不再往下判断,若没有匹配项则使用默认策略
参数
-L 查看规则
-n 数字显示
-v 显示统计信息
--line 显示行号
-A 添加规则
-D 删除规则
-F 清空规则
-I 插入规则
-R 修改规则
-t 指定要操作的表
-p 指定协议
-j 指定动作
-s 指定源地址 (source)
-d 指定目标地址 (destination)
--dport 目标端口
--sport 源端口
-i 接网卡接口, 进入的网卡接口
-o 接网卡接口, 出去的网卡接口
动作分类
ACCEPT 接收数据包
DROP 丢弃数据包
REJECT 拒绝数据包,和DROP的区别就是REJECT会返回错误信息,DROP不会
MASQUEREAD IP地址伪装,使用NAT转换成外网IP,可以PPP拔号(外网IP不固定情况)
SNAT 源地址转换,它与MASQUEREAD的区别是SNAT是接一个固定IP
DNAT 目标地址转换
LOG 记录日志
规则查看:
不指定表时,默认为filter
表
#默认为 filter 表
iptables -L
#指定表
iptables -t filter -L
#数字显示
iptables -t filter -L -n
#显示统计信息
iptables -t filter -L -n -v
规则添加:
#添加 (INPUT)
iptables -t filter -A INPUT -p icmp -j DROP
iptables -t filter -A INPUT -p icmp -s 10.1.1.13 -j DROP
#添加 (OUTPUT)
iptables -t filter -A OUTPUT -p icmp -d 10.1.1.13 -j REJECT
#插入
iptables -t filter -I INPUT 2 -p icmp -s 10.1.1.14 -j DROP
规则删除:
#方式一:
iptables -t filter -D INPUT -s 10.1.1.12 -p icmp -j ACCEPT
#方式二:根据行号删除
iptables -L -n --line
iptables -D INPUT 2
#方式三:清空规则
iptables -F
规则修改:
修改,指的是将特定位置的清空,重新添加一个
iptables -t filter -R INPUT 1 -p icmp -s 10.1.1.12 -j DROP
规则保存与还原:
配置文件/etc/sysconfig/iptables
为默认规则,重启服务会读取该文件
#导出
iptables-save > /etc/sysconfig/iptables
#还原
iptables-restore < /etc/sysconfig/iptables
默认策略修改:
iptables -P INPUT DROP/ACCEPT
iptables -P OUTPUT DROP/ACCEPT
案例:
①PING
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
#拒绝所有IP ping
iptables -t filter -A INPUT -p icmp -j DROP
#拒绝特定IP ping (双向)
iptables -t filter -A INPUT -p icmp -s 10.1.1.13 -j DROP
iptables -t filter -A OUTPUT -p icmp -d 10.1.1.13 -j REJECT
#拒绝特定范围IP ping
iptables -t filter -A INPUT -p icmp -m iprange --src-range 10.1.1.10-10.1.1.20 -j REJECT
iptables -P INPUT DROP
iptables -P OUTPUT DROP
#允许特定IP PING
iptables -A INPUT -p icmp -s 10.1.1.12 -j ACCEPT
iptables -A OUTPUT -p icmp -d 10.1.1.12 -j ACCEPT
②SSH
#允许所有IP ssh 连接
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
③httpd
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT
④多端口
iptables -A INPUT -p tcp --dport 1:1000 -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dport 22,80 -j ACCEPT
⑤本地访问
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
⑥ftp
#被动模式
iptables -A INPUT -p tcp -m multiport --dport 20,21 -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --sport 20,21 -j ACCEPT
#主动模式
iptables -A INPUT -p tcp -m multiport --dport 20,21,3000:3005 -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --sport 20,21,3000:3005 -j ACCEPT
nat
(Network Address Translate)网络地址转换
SNAT
(source network address translate)源网络地址转换
将多个私网
IP
转成一个公网IP
共享上网,节省公网IP
- iptables实现
#清空
iptables -t nat -F
#方式一:
#--to-source可以简写为--to
iptables -t nat -A POSTROUTING -o ens37 -j SNAT --to-source 10.1.1.11
#方式二:动态SNAT,用于公网IP不固定的情况
iptables -t nat -A POSTROUTING -o ens37 -j MASQUERADE
- firewalld实现
#清空
iptables -t nat -F
#添加
firewall-cmd --add-masquerade
#删除
firewall-cmd --remove-masquerade
DNAT
(destination network address translate )目标地址转换
应用场景:LVS
- iptables实现
iptables -t nat -F
iptables -t nat -A PREROUTING -i ens37 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100
- firewalld实现
iptables -t nat -F
firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=192.168.1.100
其他
根据state
添加规则
iptables -A OUTPUT -p tcp -m state --state=established -j ACCEPT
二、firewalld
centos7中的防火墙软件,它和
iptables
一样都是通过内核的netfilter来实现的。也就是说iptables和firewalld都是用于维护规则
yum install firewalld
systemctl start firewalld
zone
域,其实就是为用户预留的几套防火墙策略集合,用户可以在不同策略间进行选择,并且可以修改策略,默认策略为
public
#查看可用的zone
firewall-cmd --get-zones
#查看默认zone
firewall-cmd --get-default-zone
#修改当前使用的zone
firewall-cmd --set-default-zone=work
#查看当前使用zone的规则
firewall-cmd --list-all
#指定zone查看规则
firewall-cmd --list-all --zone=work
port
根据端口添加策略
#添加
firewall-cmd --add-port=80/tcp
firewall-cmd --add-port=3000-3005/tcp
#删除
firewall-cmd --remove-port=80/tcp
firewall-cmd --remove-port=3000-3005/tcp
Service
根据服务添加策略
#添加
firewall-cmd --add-service=http
firewall-cmd --add-service=ftp
#删除
firewall-cmd --remove-service=http
firewall-cmd --remove-service=ftp
添加nfs
规则
firewall-cmd --add-service=rpc-bind
firewall-cmd --add-service=nfs
firewall-cmd --add-service=mountd
rich-rule
#允许所有人访问http,但drop掉10.1.1.12
firewall-cmd --add-service=http
firewall-cmd --add-rich-rule="rule family="ipv4" source address=10.1.1.12 service name="http" drop"
#删除
firewall-cmd --remove-rich-rule="rule family="ipv4" source address=10.1.1.12 service name="http" drop"
runtime 与 permanent
runtime : 规则立即生效,重启服务规则就没了 (默认)
permanent : 规则不立即生效,重启服务规则就生效了
永久保存
firewall-cmd --permanent --add-service=ftp
firewall-cmd --runtime --add-service=ftp
firewall-cmd --runtime-to-perman
其他
①图形化
yum install firewall-config
firewall-config
②panic
关闭所有通讯
firewall-cmd --panic-off
firewall-cmd --panic-on