简介:防火墙是一个隔离工具,作用于主机或者网络的边缘;对进出于本主机或网络的报文根据实现定义好的网络规则做匹配检测;对于能够对规则所匹配的报文能够做出相应处理的组件(可以是硬件也可以是软件)。
firewalld不是服务,没有进程,因为他跑在内核里;ping的协议是icmp
一、四表(功能)五链
四表:filter,nat,mangle,raw
五链:INPUT,OUTPUT,PREROUTING(DNAT),POSTROUTING(SNAT),FORWARD
二、数据报文的流向
流入:PREROUTING ---->INPUT
流出:OUTPUT ---->POSTROUTING
转发:PREROUTING ---->FORWARD ----->POSTROUTING
三、各功能在哪条链上实现
filter:INPUT,OUTPUT,FORWARD
nat:POSTROUTING,PREROUTING,INPUT,OUTPUT
mangle:INPUT,OUTPUT,PREROUTING,POSTROUTING,FORWARD
raw:PREROUTING,OUTPUT
四、路由发生的时刻(PREROUTING,POSTROUTING)
报文进入本机后,判断目标主机
报文发出之前,判断经由那个接口送往下一跳
五、添加规则是考量点
1.要实现什么功能:判断要添加到哪张表上
2.报文流经的路径:判断添加哪条链上
六、优先级
1.策略应用优先级(如果raw和nat上的规则相违背,先应用raw) raw,mangle,nat,filter
2.策略常用优先级 filter,nat,mangle,raw
七、iptables选项
①链管理:
-F 清空规则链,省略链,表示清空指定表上所有链
-N 创建新的自定义规则链
-X 删除用户自定义的空的规则链
-P 为指定链这是默认策略,对filter表中的链而言,默认策略通常有ACCEPT,DROP,REJECT
②规则管理
-A 将新规则添加到指定的链后面
-I 将新规则插入到指定位置
-D 删除制定链上的指定规则
③查看防火墙策略
-L 列出指定链上的所有规则
-n 以数字格式显示地址和端口号
-v 显示详细信息
--line-number 显示规则编号
④匹配条件
-s 检查源ip地址是否符合此处指定的地址范围
-d 检查目标地址
-p 检查报文中的协议(tcp|udp|icmp)
-j jump至指定的target
-i 只用与PREROUTING,INPUT,FORWARD链上(报文流入接口)
-o 仅能用于POSTROUTING,OUTPUT,FORWARD链上(报文流出接口)
八、实例
iptables -t filter -L -n #查看filter上的所有规则(-t是指定表,默认指定filter)
[root@localhost webserver]# iptables -F #清空所有规则
[root@localhost webserver]# iptables -X #删除自定义的链
[root@localhost webserver]# iptables -A INPUT -d 192.168.254.74 -p icmp -j REJECT
[root@localhost webserver]# iptables -A INPUT -d 192.168.254.74 -p icmp -j DROP #凡是平192.168.254.74的都拒绝
[root@localhost webserver]# iptables -L -n --line-number #以行数字来显示
[root@localhost webserver]# iptables -D INPUT 1 #删除filter表上INPUT链上的第一条规则
[root@localhost ~]# iptables -P INPUT DROP #创建黑名单(xshell断开,执行不了任何命令,只能在虚拟机上执行)
[root@localhost ~]# iptables -P OUTPUT DROP #创建黑名单
创建黑名单后,添加白名单,用telnet检测是否能够ping通,ping不同就检查防火墙是否关闭(22)
(80端口)
【nat表】
环境准备:client1 自定义模式,设置ip为192.168.20.2,网关为192.168.20.1 (net4)
client2 自定义模式,设置ip为172.16.100.2,网关为172.16.100.1(net5)
server 两个自定义网卡(net4的ip为192.168.20.1,net5的ip为172.16.100.1)
server重启防火墙
iptables-save > /etc/sysconfig/iptables
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -t raw -F
iptables -t raw -X
iptables-save > /etc/sysconfig/iptables #保存firewalld配置
iptables-restore < /etc/sysconfig/iptables #重启防火墙后可以恢复firewalld的配置
执行完毕后client1可以ping通192.168.20.1,如果ping不通就查看filter表上的链
client1要ping client2需要开启路由转发,此时需要修改内核参数,有两种方法
1.临时的(重启即失效) echo 1> /proc/sys/net/ipv4/ip_forward
2.永久的: vim /etc/sysctl.conf
net,ipv4.ip_forward=1
sysctl -p(生效)
【注意】如果ping不通,重启各网卡
iptables -P INPUT/OUTPUT DROP ---------->对转发无影响
只有在关闭PREROUTING / POSTROUTING / FORWARD 是才会影响
网络地址转换:
【SNAT】
client2 : systemctl restart httpd #重启httpd
tail -f /var/log/httpd/access_log #持续监控httpd日志
client1 : curl 172.16.100.2 #访问client2
server : 在nat表上更改
iptables -t nat -A POSTROUTING -s 192.168.20.2 -d 172.16.100.2 -j SNAT --to-source 172.16.100.1
【DNAT】
server : systemctl stop httpd
iptables -t nat -A PREROUTING -d 172.16.100.1 -j DNAT --to-destination 192.168.20.2
client2 : curl 172.16.100.1
client1 : systemctl restart httpd #重启httpd
curl 127.0.0.1