RHEL7使用的firewalld防火墙,但是底层仍然调用的是iptables防火墙
RHEL6及其以下使用的iptables防火墙。
iptables防火墙主要是对到达主机的数据包进行过滤。
1、开启iptables防火墙
systemctl stop firewalld
systemctl disable firewalld
yum -y install iptables-service
systemctl start iptables
2、iptables的组成:(4张表,5条链)
# 每个表都有5条链,链中可以自定义规则
# 遵循匹配即停止原则
# 在最后如果得不到匹配,就执行默认动作
表:
raw表:给数据包做状态跟踪
mangle表:给数据包做标记
nat表:给数据包做地址转换
filter表:过滤数据包
链:
INPUT:进入防火墙主机的包
OUTPUT:从防火墙主机发出的包
FORWARD:经过防火墙主机的包
POSTROUTING:路由后处理
PREROUTING:路由前处理
3、命令格式:
iptables -t 表名 选项 链名 规则 -j 动作
动作:
DROP:丢弃数据包,没有提示
REJECT:拒绝接受数据包,有提示
ACCEPT:接受数据包
LOG:写入日志
SNAT:源地址转换
DNAT:目标地址转换
选项:
-Ln:显示规则。端口,ip以数字的形式显示
iptables -t filter -Ln --line-number #--line-number显示行号
-F:清空规则
iptables -t filter -F
-A:添加规则
iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT #给filter表的INPUT链添加规则,-p代表协议,--dport代表目的端口。表示接受tcp,端口为22的数据包(ssh请求)
-I:插入规则
iptables -t filter -I INPUT 1 -s 192.168.80.0/24 -p tcp --dport 22 -j ACCEPT #在第1条规则之前插入新规则,-s表示源ip。表示仅接受192.168.80.0/24网段的主机发送的tcp,端口为22的数据包。-d表示目的ip
-D:删除规则
iptables -t filter -D INPUT 2 #删除filter中INPUT链的第2条规则
-P:修改默认动作
iptables -t filter -P INPUT DROP #修改filter表的INPUT链的默认动作为DROP
# 永久生效
iptables-save /etc/sysconfig/iptables-config
4、主机型防火墙:
# 自己保护自己,对filter表中的INPUT链添加规则
例:不允许其他主机ping本机
iptables -t filter -A INPUT -p icmp --icmp-type echo-request -j DROP #丢弃icmp的echo-request类型的数据包。不允许ping
iptables -t filter -A INPUT -p icmp ! --icmp-type echo-request -j ACCEPT #接受除icmp的echo-request之外类型的数据包。允许ping之外的其他请求
5、网络型防火墙:
# 架设在两个网络之间,对filter表中的FORWARD链添加规则
现架设有三台主机A,B,C。其中C作为防火墙
A:网卡:192.168.80.135,网关192.168.80.136
B:网卡:192.168.70.137,网关192.168.70.136
C:网卡1:192.168.80.136,网卡2:192.168.70.136
主机A通过主机C来访问主机B
# 添加网关
A:route add default gw 192.168.80.136
B:route add default gw 192.168.70.136
# 查看网关
route -n #
开启路由转发:
C:echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t filter -P FORWARD DROP #默认动作修改为DROP
iptables -t filter -A FORWARD -p tcp --dport 80 -j ACCEPT #--dport目的端口
iptables -t filter -A FORWARD -p tcp --sport 80 -j ACCEPT #--sport源端口
6、扩展匹配:(简化规则)
-m mac #mac地址匹配
-m multiport #多端口匹配
-m iprange #ip范围匹配
例:
# 丢弃192.168.80.50-192.168.80.100的ip发送的ping数据包
iptables -t filter -A FORWARD -p icmp -m iprange --src-range 192.168.80.50-192.168.80.100 -j DROP #--src-range代表源ip,--dst-range代表目的ip
例:丢弃mac地址为00:0a:25:7c:aa:ab发送的ping数据包
iptables -t filter -A FORWARD -p icmp -m mac --mac-source 00:0a:25:7c:aa:ab -j DROP
例:允许目标端口为22,80,3306的数据包通过本机
iptables -t filter -A FORWARD -p tcp -m multiport --dports 22,80,3306 -j ACCEPT #--dports目标端口
例:允许源端口为22,80,3306的数据包通过本机
iptables -t filter -A FORWARD -p tcp -m multiport --sports 22,80,3306 -j ACCEPT #--sports源端口
7、nat表的应用:
内网所有主机通过一个ip地址访问外网
只需要修改nat表的POSTROUTING链,使用SNAT动作。
echo 1 > /proc/sys/net/ipv4/ip_forward #开启路由转发
iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -p tcp --dport 80 -j SNAT --to-source 192.168.70.136
#将源地址修改为防火墙主机的外网ip192.168.70.136
# 在实际工作中主机的ip是动态分配的
iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o eth2 -j MASQUERADE
# -o指明了外网ip的网卡,MASQUERADE表示动态获取外网网卡的ip
写总结的第六十六天!!!