iptables介绍
iptables是开源的基于数据包过滤的防火墙工具
iptables企业应用场景
- 主机防火墙(filter表的INPUT链)
- 局域网共享上网(nat表的POSTROUTING链).半个路由器,NAT功能老男孩教育59期脱产班-Iptables防火墙实战.pdf
- 端口及IP映射(nat表的PREROUTING链),硬防的NAT功能
- IP一对一映射
iptables工作流程
iptables是采用数据包过滤机制工作的,所以它会对请求的数据包的包头数据进行分析,并根据我们预先设定的规则进行匹配来决定是否可以进入主机.
- 防火墙是一层层过滤的.实际是按照配置规则的顺序从上到下,从前到后进行过滤的.
- 如果匹配上了规则,即明确表明是阻止还是通过,此时数据包就不在向下匹配新规则了.
- 如果所有规则中没有明确表明是阻止还是通过这个数据包,也就是没有匹配上规则,向下进行匹配,直到匹配默认规则得到明确的阻止还是通过.
- 防火墙的默认规则是对应链的所有的规则执行完以后才会执行的(最后执行的规则)
iptables四表五链
实际iptables包含4张表和五个链,但主要记住两张表即可filter和nat表即可
- FILTER表
- NAT表
iptables工作原理示意图
iptables环境准备
安装iptables管理命令
yum install iptables-services -y
加载防火墙的内核模块
modprobe ip_tables
modprobe iptable_filter
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_state
#查看已加载的模块
lsmod |egrep 'filter|nat|ipt'
启动防火墙
#关闭firewalld
systemctl stop firewalld
systemctl disable firewalld
#启动iptables
systemctl start iptables.service
systemctl enable iptables.service
iptables基本操作命令
#查看防火墙规则
iptables -nL
#清除防火墙规则
#清除所有规则,不会处理默认的规则
iptables -F
#删除用户自定义的链
iptables -X
#链的计数器清零(数据包计数器与数据包字节计数器)
iptables -Z
#添加防火墙规则
#指定表(default:filter)
iptables -t
#把规则添加到指定的链上,默认添加到最后一行
iptables -A
#插入规则,默认插入到第一行(封IP)
iptables -I
#删除链上的规则
iptables -D
#删除某个规则
#查看规则号码
iptables -nL --line-numbers
#删除指定链上的指定序号
iptables -D INPUT 1
#网络连接状态
#NEW:已经或将启动新的连接
#ESTABLISHED:已建立的连接
#RELATED:正在启动的新连接
#INVALID:非法或无法识别的
iptables实战
- 从上往下依次匹配
- 一但匹配上,就不在往下匹配了
- 默认的情况,默认规则是放行所有
禁止某个端口访问
规则解释
- -p : 指定过滤的协议-p(tcp,udp,icmp,all)
- --dport : 指定目标端口(用户请求的端口)
- -j : 对规则的具体处理方法(ACCEPT,DROP,REJECT,SNAT/DNAT)
- --sport : 指定源端口
#禁止所有地址访问22端口
iptables -t filter -A INPUT -p tcp --dport 22 -j DROP
禁止某个IP访问
规则解释
- -s : 指定源地址或网段(192.168.1.0/24)
- ! -s : 取反指定源地址或网段(192.168.1.0/24)
- -d : 指定目的地址(nat表prerouting)
- -i : 进入的网络接口(eth0,eth1)
- -o : 出去的网络接口(eth0,eth1)
#禁止10.0.0.71访问
iptables -I INPUT -p tcp -s 10.0.0.71 -i eth0 -j DROP
#禁止除10.0.0.71访问
iptables -A INPUT -p tcp ! -s 10.0.0.71 -i eth0 -j DROP
#禁止除10.0.0.0/24访问
iptables -A INPUT -p tcp ! -s 10.0.0.0/24 -i eth0 -j DROP
匹配端口范围
#禁用21,22,23,24端口,使用该方式配置需要添加-m multiport参数
iptables -I INPUT -p tcp -m multiport --dport 21,22,23,24 -j DROP
#放行3306-8809端口
iptables -I INPUT -p tcp --dport 3306:8809 -j ACCEPT
#禁用18-80端口
iptables -I INPUT -p tcp --dport 18:80 -j DROP
匹配ICMP类型
#禁用icmp类型为8(禁用ping)
iptables -A INPUT -p icmp --icmp-type 8 -j DROP
iptables -A INPUT -p icmp -m icmp --icmp-type any -j DROP
iptables -A FORWARD -s 192.168.1.0/24 -p icmp -m icmp --icmp-type any -j ACCEPT
iptables企业案例
部署一个安全的防火墙
默认全部禁止,放行个别请求,即使用白名单
- 特别注意:如果你的默认规则设置了拒绝所有,又执行了
iptables -F
,那就意味着所有的请求全部都拒绝了,原因是-F不会改变默认规则
iptables -F
iptables -X
iptables -Z
iptables -A INPUT -p tcp -m multiport --dport 80,443 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -s 10.0.0.0/24 -j ACCEPT
iptables -A INPUT -s 172.16.1.0/24 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -nL
局域网共享上网
web01服务器通过防火墙服务器访问外网
- -t nat : NAT表
- -A POSTROUTING : POSTROUTING链
- -s 172.16.1.0/24 : 源地址172.16.1.0/24
- -j SNAT : SNAT改写源地址
- --to-source 10.0.0.81 : 将源地址改写成10.0.0.81
#防火墙服务器
#设置转发规则
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 10.0.0.81
#设置允许内核转发
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
#使配置生效
sysctl -p
web01服务器配置
#内网网卡设置网关
#将网关设置为10.0.0.81服务器
vi /etc/sysconfig/network-scripts/ifcfg-eth1
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
IPADDR=172.16.1.7
PREFIX=24
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eth1
DEVICE=eth1
ONBOOT=yes
AUTOCONNECT_PRIORITY=-999
#添加网关指向防火墙服务器
GATEWAY=10.0.0.81
#重启网卡查看路由情况
systemctl restart network
route -n
DNS解析
- 如果访问域名会提示
Name or service not known
,需要在/etc/resolv.conf
配置dns信息
vi /etc/resolv.conf
# Generated by NetworkManager
nameserver 114.114.114.114
FORWARD链默认为DROP的时候共享上网失效
- 添加2条放行规则
iptables -A FORWARD -s 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -d 172.16.1.0/24 -j ACCEPT
- 修改FORWARD链默认规则为ACCEPT
iptables -P FORWARD ACCEPT
端口映射
访问10.0.0.61的9000端口,跳转到172.16.1.7的22端口,改写数据包的目标IP和端口,用到的是PREROUTING链
#访问10.0.0.61的9000端口,跳转到172.16.1.7的22端口
iptables -t nat -A PREROUTING -d 10.0.0.81 -p tcp --dport 9000 -j DNAT --to-destination 172.16.1.7:22
命令解释
- nat : 表
- PREROUTING : 链
- 10.0.0.81 : 请求IP
- 9000 : 请求端口
- tcp : 协议
- DNAT : 动作
- 172.16.1.7 : 目标IP
- 22 : 目标端口
IP映射
访问10.0.0.82,跳转到172.16.1.7
#没有多余的ip所以添加一个ip
ip a add 10.0.0.82/24 dev eth0 label eth0:0
#设置映射
iptables -t nat -A PREROUTING -d 10.0.0.62 -j DNAT --to-destination 172.16.1.7
iptables规则保存
重启iptables默认读取
/etc/sysconfig/iptables
文件中的配置,可以将配置写入该文件
- iptables-save : 查看防火墙配置
- iptables-save > iptables_20200615 : 将防火墙规则保存到文件中
- iptables-restore < iptables_20200615 : 从配置文件里载入防火墙配置
- iptables-save > /etc/sysconfig/iptables : 将防火墙规则保存到默认配置文件中(注意备份)
最后一次更新于2020-06-15 21:23
0 条评论