iptables
1. 表与链
- iptables是4表伍链
- 4表:filter表 nat表 raw表 mangle表
- 伍链:INPUT OUTPUT FORWARD PREROUTING POSTROUTING
2. 表的说明
2.1 filter表
- 防火墙:屏蔽或准许 端口 ip
filter表 | 强调:主要和主机自身相关,真正负责主机防火墙功能(过滤流入流出主机的数据包)filter表示iptables默认使用的表,这个表定义了三个链(chains)企业工作场景:主机防火墙 |
---|---|
INPUT | 负责过滤所有目标地址是本机地址的数据包,通俗来说:就是过滤进入主机的数据包 |
FORWARD | 负责转发刘静主机的数据包。起转发的作用,和NAT关系很大,后面会详细介绍LVS NAT模式,net.ipv4.ip_forward=0 |
OUTPUT | 处理所有源地址是本机地址的数据包,通俗来讲:就是处理从主机发出的数据包。 |
2.2 nat表
- 实现nat功能
- 实现共享上网(内网服务器上外网)
- 端口映射和ip映射
nat | 负责网络地址转换的,即来源与目的IP地址和port的转换。 应用:和主机本身无关,一般用于局域网共享上网或者特殊的端口转换服务相关。 工作场景: 1. 用于企业路由(zebra)或网关(iptables),共享上网(POSTROUTING) 2. 做内部外部IP地址一对一映射(dmz),硬件防火墙映射IP到内部服务器,ftp服务(PREROUTING) 3. WEB,单个端口的映射,直接映射80端口(PREOUTING)这个表定义了3个链,nat功能相当于网络的acl控制。和网络交换机acl类似。 |
---|---|
OUTPUT | 和主机放出去的数据包有关,改变主机发出数据包的目的地址。 |
PREROUTING | 在数据包到达防火墙时,进行路由判断之前执行的规则,作用是改变数据包的目的地址、目的端口等 例如:把公网IP:XXX.XXX.XXX.XXX映射到局域网的XX.XX.XX.XX服务器上。 如果是web服务,可以将80转换为局域网的服务器9000端口上 |
POSTROUTING | 在数据包离开防火墙时进行路由判断之后执行的规则,作用改变数据包的源地址,源端口等。 例如:默认笔记本和虚拟机都是局域网地址,在出网的时候被路由器将源地址改为了公网地址。 生产应用:局域网共享上网。 |
3. 环境准备及命令
3.1 iptables 服务安装,环境配置
1 | # 安装服务 |
3.2 iptables 相关命令
1 | # 查看iptables规则 |
参数 | 含义 |
---|---|
-L | 显示表中的所有规则 |
-n | 不要把端口或ip反向解析为服务名或域名 |
-t | 指定表 不指定时默认是filter表 |
-A | append追加 加入准许类规则 使用-A |
-D | delete 删除 -D INPUT 1 |
-I | insert 拒绝类规则放在所有规则最上面 拒绝类 -I |
参数 | 含义 |
---|---|
-p | 协议protocal tcp/udp/icmp/all |
–dport | 目标端口 dest destination 指定端口 加上协议-p tcp |
–sport | 源端口 source源 |
-s | –source 源ip |
-d | –destination 目标ip |
-m | 指定模块 multiport |
-i | input 输入的时候 从哪个网卡进来 |
-o | output输出的时候 从哪个网卡出去 |
参数 | 含义 |
---|---|
-j | 满足条件后的动作:DROP/ACCEPT/REJECT |
DROP REJECT 拒绝 DROP 把数据丢掉 不会返回信息给 用户 REJECT 拒绝 返回拒绝信息 |
|
参数 | 含义 |
---|---|
-F | 清除所有规则,不会处理默认的规则 |
-X | 删除用户自定义的链 |
-Z | 链的计数器清零 (数据包计数器与数据包字节计数器) |
3.3 配置filter表规则
- 正式配置之前先清空规则
1 | iptables -F |
3.3.1 禁止访问22端口
1 | iptables -t filter -I INPUT -p tcp --dport 22 -j DROP |
3.3.2 显示规则编号
1 | iptables -nL --lint-number |
3.3.3 删除第1编号的规则
1 | iptables -D INPUT 1 # 精确删除规则,可以用此方法 |
3.3.4 封ip 屏蔽某个ip(属于源ip)
1 | iptables -I INPUT -s 10.0.0.7 -j DROP |
3.3.5 禁止网段连入(禁止10.0.0.0/24网段访问 8888 端口)
1 | iptables -I INPUT -s 10.0.0.0/24 -p tcp --dport 8888 -j DROP |
3.3.6 只允许指定网段连入(允许10.0.0.0网段)
1 | # 方法1:利用 ! |
3.3.7 指定多个端口拒绝访问(拒绝8888 9999)
1 | iptables -I INPUT -P tcp --dport 8888 -j DROP |
3.3.8 同时指定多个端口拒绝访问(拒绝80和443)
1 | iptables -I INPUT -p tcp -m multiport 80,443 -j DROP |
3.3.9 同时指定连续端口拒绝访问(1到1024)
1 | # 如果是连续端口,可以不加-m multiport |
4. 匹配ICMP类型
- ICMP (Internet Control Message Protocol) Internet控制报文协议 ping
- 整个网站的核心部分可以拒绝ping
4.1 通过防火墙规则,控制禁止被ping
1 | iptables -I INPUT -p icmp --icmp-type 8 -j DROP |
4.2 通过内核参数,控制禁止被ping
1 | # 修改为1,禁止被ping;修改为0,允许被ping |
4.3 匹配网络状态(TCP/IP连接状态)
-m state –state
NEW:已经或将启动新的连接
ESTABLISHED:已建立的连接
RELATED:正在启动的新连接
INVALID:非法或无法识别的
1
2iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
4.4 限制并发及速率
- -m limit 限制模块
1 | # 前5个正常,之后按每6秒的速度生成数据包,--limit-burst后不接数字时默认为5 |
5. 防火墙规则的保存与恢复
iptables-save 默认输出到屏幕,后接文件可备份规则到文件
iptables-restore 后接文件标准输入 可恢复规则
1
2
3
4
5
6
7# 写入到/etc/sysconfig/iptables
iptables-save >/etc/sysconfig/iptables
# 从备份文件恢复规则
iptables-restore </etc/sysconfig/iptables
# systemctl restart iptables 时将默认从/etc/sysconfig/iptables读取配置,如果手动用iptables-restore恢复可以指定任意备份文件
6. 实际生产用法
1 | # 允许22端口访问 |
7. nat
- 共享上网
- 端口转发/端口映射
- ip映射
7.1 查看nat表
1 | iptables -t nat -nL |
7.2 共享上网
1 | # 修改的是POSTROUTING链 源ip是172.16.1.0/24 经过防火墙处理 修改为10.0.0.61 |
7.3 端口映射
1 | # 将10.0.0.61的9000 转发为 172.16.1.7:22 |
7.4 ip映射
1 | # 将10.0.0.62 映射为 172.16.1.7 |