容器:瓶瓶罐罐 存放东西
表(table):存放链的容器
链(chain):存放规则的容器
规则(policy):
- 准许或拒绝规则
- 准许或拒绝规则ACCPT DROP police:警察
iptables执行过程
工作流程:
- 防火墙是层层过滤的,实际是按照配置规则的顺序从上到下,从前到后进行过滤的。
- 如果匹配上规则,即明确表示是阻止还是通过,数据包就不再向下匹配新的规则。
- 如果规则中没有明确表明是阻止还是通过的,也就是没有匹配规则,向下进行匹配,直到匹配默认规则得到明确的阻止还是通过。
- 防火墙的默认规则是所有规则执行完才执行的。
四表与五链
filter
(默认,防火墙功能 准许 拒绝)
nat
表 nat功能
mangle
raw
filter表
强调:主要和主机自身相关,真正负责主机防火墙功能的(过滤流入流出主机的数据包)filter
表示iptables默认使用的表,这个表定义了三个链(chains
)
企业工作场景:主机防火墙
相关链:
INPUT
:负责过滤所有目标地址是本机地址的数据包,人话:就是过滤进入主机的数据包(检票员)
FORWARD
:负责转发流经主机的数据包。起转发的作用,和NAT关系很大,后面会详细介绍LVSNAT模式,net.ipv4.ip_forward=0
1 2 3
| [root@Felix ~] [root@Felix ~] 16777216
|
OUTPUT
:处理所有源地址是本机地址的数据包,人话:就是处理从主机发出去的数据包(超市保安)
nat表:
Network Address Translation
:网络地址转换
负责网络地址转换的,即来源与目的IP地址和port的转换。
应用:和主机本身无关,一般用于局域网共享上网或者特殊的端口转换服务相关。
工作场景:
- 用于企业路由(zebra)或网关(iptables),共享上网(POSTROUTING)
- 做内部外部IP地址一对一映射(dmz),硬件防火墙映射IP到内部服务器,ftp服务(PREROUTING)
- WEB,单个端口的映射,直接映射80端口(PREROUTING)这个表定义了3个链,nat功能相当于网络的acl控制。和网络交换机acl类似。
相关链:
OUTPUT
:和主机放出去的数据包有关,改变主机发出数据包的目的地址。
PREROUTING
:在数据包到达防火墙时,进行路由判断之前执行的规则,作用是改变数据包的目的地址、目的端口等(目的nat)就是收信时,根据规则重写收件人的地址。
例如:把公网IP:xxx.xxx.xxx.xxx映射到局域网的xx.xx.xx.xx服务器上。
如果是web服务,可以把80转换为局域网的服务器9000端口上
10.0.0.61 8080(目标端口)---nat---a 10.0.0.7 22
POSTROUTING
:在数据包离开防火墙时进行路由判断之后执行的规则,作用改变数据包的源地址,源端口等。(源nat)
写好发件人的地址,要让家人回信时能够有地址可回。
例如。默认笔记本和虚拟机都是局域网地址,在出网的时候被路由器将源地址改为了公网地址。
生产应用:局域网共享上网。
C7补充安装
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| yum install iptables-services [root@Felix ~] /usr/sbin/iptables
[root@Felix ~] /etc/sysconfig/ip6tables /etc/sysconfig/iptables /usr/lib/systemd/system/ip6tables.service /usr/lib/systemd/system/iptables.service [root@Felix ~]
加载内核模块实现防火墙功能: 临时生效 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 'ipt|nat|filter' <==检查
|
关闭其他防火墙并
1 2 3
| [root@Felix ~]# systemctl start iptables <==启动 [root@Felix ~]# systemctl enable iptables <==开机自启 Created symlink from /etc/systemd/system/basic.target.wants/iptables.service to /usr/lib/systemd/system/iptables.service.
|
iptables 默认使用filter表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| 参数: ----------------------------- -F -X -Z
-t -D -A -I
-m -p --dport --sport -d -s -m -i -o
-j ----------------------------- 示例: nc -l port 生成本地端口 也可传输文件,两端聊天
|
配置案例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| iptables -t filter -A INPUT -p tcp --dport 23 -j DROP
iptables -t filter -I INPUT -s 8.8.8.8 -p tcp --dport 22 -j DROP
iptables -t filter -I INPUT -s 10.0.0.0/24 -p tcp --dport 8080 -j DROP
allow 10.0.0.0/24; deny all; iptables -I INPUT ! -s 10.0.0.0/24 -j DROP
iptables -I INPUT -p tcp --dport 1024:65535 -j DROP iptables -I INPUT -p tcp -m multiport --dport 81,443 -j DROP
iptables -t filter -I INPUT -p icmp --icmp-type any -j DROP 或者 iptables -t filter -I INPUT -p icmp --icmp-type 8 -j DROP
·-m state --state ·NEW:已经或将启动新的连接 ·ESTABLISHED:已建立的连接 ·RELATED:正在启动的新连接 ·INVALID:非法或无法识别的 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 参考文档:http://www.zsythink.net/archives/1597/
iptables -I INPUT -p icmp --icmp-type 8 -j ACCEPT iptables -I INPUT -p icmp --icmp-type 8 -m limit --limit 6/min --limit-burst 5 -j ACCEPT -m limit--limit n/{second/minute/hour}:解释:指定时间内的请求速率”n”为速率,后面为时间分别为:秒 分 时 -limit-burst[n] 解释:在同一时间内允许通过的请求”n"为数字,不指定默认为5
#保存防火墙规则: [root@Felix ~]# service iptables save iptables: Saving firewall rules to /etc/sysconfig/iptables:[ 确定 ] 或者 iptables-save > /etc/sysconfig/iptables
#误删防火墙规则恢复 方法1:重启iptables服务 方法2:iptables-restore < /etc/sysconfig/iptables 从文件中读取防火墙规则,并生效。
|
nat
1.共享上网
2.端口映射
3.ip映射
一、共享上网
1 2 3 4 5 6 7 8 9 10 11
| [root@Felix ~] [root@Felix ~] 开启内核转发功能 1.临时开启,(写入内存,在内存中开启) echo "1" > /proc/sys/net/ipv4/ip_forward 2.永久开启,(写入内核) echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf sysctl -p ----加载,使得配置文件立即生效
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j MASQUERADE 云服务器:NAT网关
|
二、端口映射
1 2 3 4 5 6 7 8
| iptables -t nat -A PREROUTING -d 10.0.0.61 -p tcp --dport 9000 -j DNAT --to-destination 172.16.1.7:22
-A POSTROUTING -d 172.19.111.170/32 -p tcp -m tcp --dport 8000 -j SNAT --to-source 172.19.244.69
-A PREROUTING -d 172.19.244.69/32 -p tcp -m tcp --dport 20001 -j DNAT --to-destination 172.19.111.170:8000
|
内网07主机的22端口 映射到外网9000端口,要开启内核转发。
三、IP映射
后端的主机需要指向防火墙所在服务器
1
| iptables -t nat -A PREROUTING -d 10.0.0.62 -j DNAT --to-destination 172.16.1.8
|
生产环境初始配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| iptables -t filter -I INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT
-A INPUT -p tcp -m tcp --dport 1723 -j ACCEPT -A INPUT -s 10.93.131.0/24 -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -p gre -j ACCEPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
参考文档:https://blog.csdn.net/weixin_34102807/article/details/91616105
iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT iptables -A INPUT -s 172.16.1.0/24 -j ACCEPT
|