防火墙

分类:硬件防火墙、软件防火墙

一、iptables

iptables,全称为 iptables/netfilter

包过滤防火墙

真正实现其实为内核空间中的netfilter

官网:https://netfilter.org/

结构

四张表

  • 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
Last modification:April 21st, 2020 at 10:27 pm