iptables工作流程
1.规则匹配顺序是从上往下依次执行
2.只要匹配上,就不再往下执行
3.防火墙的默认规则是对应链的所有的规则执行完以后才会执行的(最后执行的规则)。
4.默认情况下,默认规则是放开所有
第2章 iptables四表五链
表 tables
链 chains
四表
- Filter表
- NAT表
- Managle表
- Raw表
五链
- INPUt
- FORWARD
- OUTPUT
- PREROUTING
- POSTROUTING
第3章
源端口
目的端口
源IP
目的IP
访问10.0.0.61的9999端口,转发到10.0.0.7的22端口
数据包未改变之前:
源端口:22
目的端口:9999
源IP:10.0.0.1
目的IP:10.0.0.61
数据包改变之后:
源端口:22
目的端口:22
源IP:10.0.0.1
目的IP:10.0.0.7
第3章 iptables环境准备
1.安装iptables
yum install iptables-services -y
2.加载防火墙模块
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'
3.启动防火墙
首先停止firewalld
systemctl stop firewalld
systemctl disable firewalld
启动iptables
systemctl start iptables.service
systemctl enable iptables.service
查看防火墙规则
iptables -nL
第4章 iptables基本操作命令
1.查看防火墙规则,默认查看的是filter表
iptables -nL
2.查看nat表
iptables -nL -t nat
3.清除防火墙规则
iptables -F <- 清除所有规则,不会处理默认的规则
iptables -X <- 删除用户自定义的链
iptables -Z <- 链的计数器清零(数据包计数器与数据包字节计数器)
4.删除指定链的指定规则
iptables -nL --line-numbers
iptables -D INPUT 7
第5章 iptables实战
访问的数据包
源端口:22
目的端口:22
源IP:10.0.0.1
目的IP:10.0.0.61
1.禁止某个端口访问
iptables -A INPUT -p tcp --dport 22 -j DROP
命令解释
iptables -A INPUT #在filter表的INPUT链上添加规则
-p tcp #协议是tcp
--dport 22 #目标端口是22
-j DROP #执行的动作,如果匹配上,丢弃这个包
2.禁止某个IP访问
iptables -A INPUT -p tcp -s 10.0.0.7 -i eth0 -j DROP
iptables -A INPUT -p tcp -s 172.16.1.7 -i eth1 -j DROP
命令解释:
iptables -A INPUT
-p tcp
-s 10.0.0.7 #如果源地址是10.0.0.7
-i eth0 #如果流量来自eth0
-j DROP #执行拒绝操作
3.禁止某个网段访问
iptables -A INPUT -p tcp -s 10.0.0.0/24 -i eth0 -j DROP
4.只允许某个IP访问
iptables -A INPUT -p tcp ! -s 10.0.0.7 -i eth0 -j DROP
命令解释
iptables -A INPUT
-p tcp
! -s 10.0.0.7 #!取反,只要不是10.0.0.7的地址,执行的动作是拒绝
-i eth0
-j DROP
5.匹配端口范围
iptables -A INPUT -p tcp -s 10.0.0.7 -m multiport --dport 22,80 -j DROP
命令解释:
iptables -A INPUT -p tcp
-s 10.0.0.7
-m multiport #匹配多个端口
--dport 22,80 #匹配目标端口是22和80
-j DROP #匹配上就拒绝
iptables -A INPUT -p tcp -s 10.0.0.7 --dport 22:80 -j DROP
命令解释:
-s 10.0.0.7
-m multiport #匹配多个端口
--dport 22:100 #匹配目标端口是22到100
-j DROP #匹配上就拒绝
6.匹配ICMP类型
禁止所有主机ping
iptables -A INPUT -p icmp --icmp-type 8 -j DROP
禁止10.0.0.7ping
iptables -A INPUT -p icmp --icmp-type 8 -s 10.0.0.7 -j DROP
除了10.0.0.7以外,所有的主机都禁止ping
iptables -A INPUT -p icmp --icmp-type 8 ! -s 10.0.0.7 -j DROP
第6章 iptables企业案例
如何配置lb服务器的防火墙
1.运行了哪些服务
nginx
keepalived
2.启动了哪些端口
80
443
22
3.哪些IP和端口需要对外开放
VIP
80
443
4.默认规则修改为禁止
5.编写防火墙规则
iptables -F
iptables -X
iptables -Z
iptables -A INPUT -p tcp -m multiport --dport 80,443 -j ACCEPT
iptables -A INPUT -p tcp -s 172.16.1.61 --dport 22 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 8 -s 172.16.1.0/24 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -P INPUT DROP
6.测试命令
ping 10.0.0.7 #不通
ping 172.16.1.7 #通
ssh 10.0.0.7 #不通
ssh 172.16.1.7 #通
curl 10.0.0.7 #通
curl 172.16.1.7 #通
第7章 防火墙备份与恢复
备份方法
iptables-save > iptables_m01_20191010
恢复方法
iptables-restore < iptables_m01_20191010
将修改写入配置文件,下次重启依然生效
iptables-save > /etc/sysconfig/iptables
第8章 内网共享上网
实验环境:
m01: 共享上网网关出口
web01: 只有内网地址,网关指向m01
实验步骤:
m01操作
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p
iptables -F
iptables -X
iptables -Z
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 -A FORWARD -i eth1 -s 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -o eth0 -s 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -i eth0 -d 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -o eth1 -d 172.16.1.0/24 -j ACCEPT
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 10.0.0.61
web01操作
[root@web01 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=eth1
DEVICE=eth1
ONBOOT=yes
IPADDR=172.16.1.7
GATEWAY=172.16.1.61
PREFIX=24
DNS1=223.5.5.5
[root@web01 ~]# systemctl restart network
[root@web01 ~]# ifdown eth0
[root@web01 ~]# ping www.baidu.com
第9章 端口映射
m01操作
iptables -A FORWARD -i eth1 -s 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -o eth0 -s 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -i eth0 -d 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -o eth1 -d 172.16.1.0/24 -j ACCEPT
iptables -t nat -A PREROUTING -d 10.0.0.61 -p tcp --dport 9000 -j DNAT --to-destination 172.16.1.7:22
命令解释
表:nat
链:PREROUTING
目标IP:10.0.1.61
目标端口:9000
协议:tcp
动作:DNAT
目标IP:172.16.1.7
目标端口:22
连接测试
ssh 10.0.0.61 -p 9000
第10章 IP映射
ip a add 10.0.0.62/24 dev eth0 label eth0:0
iptables -A FORWARD -i eth1 -s 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -o eth0 -s 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -i eth0 -d 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -o eth1 -d 172.16.1.0/24 -j ACCEPT
iptables -t nat -I PREROUTING -d 10.0.0.62 -j DNAT --to-destination 172.16.1.7
第x章 陨石坑
假如配置安全规则的时候配置了默认拒绝所有规则
那么此时如果手欠,又输入了iptable -F
不好意思,这台服务器就谁都连不上了
临时此时解决方法:
1.告诉机房服务器账号密码,让机房人员登录进去执行恢复命令
- systemctl restart iptables
- iptables -P INPUT ACCEPT
2.直接让机房人员硬重启服务器
风险:如果运行的是数据库,那么硬重启可能会导致数据丢失或者数据库损坏,启动失败
如何规避这样的风险:
1.配置防火墙的时候,添加一条定时任务,定时恢复默认规则为ACCPET
*/1 * * * * /usr/sbin/iptables -P INPUT ACCEPT
2.先在测试环境充分测试充足了,确定没有问题了再在生产环境部署
3.建议先保存当前防火墙的配置,基于配置文件去修改防火墙规则,然后将修改后的规则恢复进去
第x章 防火墙两种模式
白名单:广场巡逻
黑名单:火车站
网友评论