1.1 四表
应用顺序:由上至下
- raw:对连接做追踪
- mangle:对数据包做修改,如给数据包打标记
- nat :修改数据包地址
- filter:对数据包过滤
1.2 五链
- INPUT:针对目标地址
- OUTPUT:针对源地址
- FORWARD:穿过防火墙
- PREROUTING:路由前过滤
- POSTROUTING:路由后过滤
1.3 四表五链的关系
| 表 | 支持的链 |
|---|---|
| raw | PREROUTING、OUTPUT |
| mangle | PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD |
| nat | PREROUTING、POSTROUTING、OUTPUT |
| fIlter | INPUT、OUTPUT、FORWARD |
1.4 使用流程
image.png
1.1 语法
iptables[-t 要操作的表]<操作命令>[要操作的链][规则号码][匹配条件][-j 匹配后的动作]# 小写 大写 大写 小写 大写1.2 常用操作命令
-L:查看,v详细,n不反解-A:追加,放置最后一条-I:插入,默认插入成第一条(第一条生效后不会考虑后边规则)-D:删除-F:清空flush-X:删除空的自定义链-P:设置默认策略-Z:计数器归零-N:建立自定义链
1.3 基本匹配条件
-s 192.168.2.0/24:源地址-d 192.168.2.1:目标地址-p tcp|upd|icmp:协议-i eth0:input 从eth0接口进入的数据包-o eth0:output 从eth0出去的数据包-p tcp --sport 80:源端口是80的数据包-p tcp --dport 80:目标端口是80
1.4 基本动作
- filter表
-j ACCEPT:接受-j REJECT:拒绝-j DROP:丢弃-j LOG:记录日志
DROP和REJECT的区别:
REJECT:直接拒绝链接,和客户端断开。更适合可控网络。DROP:丢弃——意味着不予回复,客户端只能等超时。更适合服务器安全和面对攻击。
- nat表
-j SNAT:源地址转换-j DNAT:目标地址转换-j MASQUERADE:伪装-j REDIRECT:端口转换
- mangle表
-j MARK:标记
1.5 常用命令示例
- 设置默认值
设置默认值,禁止所有穿过防火墙
- 禁止80端口访问
iptables-IINPUT-ptcp--dport80-jDROP- 查看防火墙规则
默认查看nat表
查看fileter表
查看防火墙规则编号
iptables-nL--line-number- 保存规则
命令
规则保存位置
该命令会把防火墙规则保存在
/etc/sysconfig/iptables文件中
[root@liubei-02 ~]# cat /etc/sysconfig/iptables# Generated by iptables-save v1.4.21 on Tue Jan 10 16:06:09 2023*mangle :PREROUTING ACCEPT[31154:2463094]:INPUT ACCEPT[10892:1355724]:FORWARD ACCEPT[0:0]:OUTPUT ACCEPT[15203:10068473]:POSTROUTING ACCEPT[15203:10068473]COMMIT# Completed on Tue Jan 10 16:06:09 2023# Generated by iptables-save v1.4.21 on Tue Jan 10 16:06:09 2023*raw :PREROUTING ACCEPT[31154:2463094]:OUTPUT ACCEPT[15203:10068473]COMMIT# Completed on Tue Jan 10 16:06:09 2023# Generated by iptables-save v1.4.21 on Tue Jan 10 16:06:09 2023*filter :INPUT ACCEPT[5015:664817]:FORWARD ACCEPT[0:0]:OUTPUT ACCEPT[7751:5368662]-AINPUT-ptcp-mtcp--sport80-jDROP COMMIT# Completed on Tue Jan 10 16:06:09 2023# Generated by iptables-save v1.4.21 on Tue Jan 10 16:06:09 2023*nat :PREROUTING ACCEPT[20546:1128148]:INPUT ACCEPT[235:18006]:OUTPUT ACCEPT[1055:72144]:POSTROUTING ACCEPT[1055:72144]COMMIT# Completed on Tue Jan 10 16:06:09 2023如上可见:
*mangle:表明:INPUT ACCEPT [5015:664817]:这种是默认规则-A INPUT -p tcp -m tcp --sport 80 -j DROP:这种是我们在每个表下加的规则
- 允许ssh
iptables-IINPUT-ptcp--dport22-jACCEPT- 禁止ping
- 禁止ping其他服务器
iptables-tfilter-IINPUT-picmp-micmp --icmp-type echo-reply-jREJECT或
iptables-tfilter-IINPUT-picmp-micmp --icmp-type0-jREJECT- 禁止其他服务器ping本机
iptables-tfilter-IINPUT-picmp-micmp --icmp-type echo-request-jREJECT或
iptables-tfilter-IINPUT-picmp-micmp --icmp-type8-jREJECT- 删除规则
N为规则编号。
- 清除规则(不包括默认规则)
- 新建自定义链
- 删除空的自定义链
- 端口转发
访问本机100端口转发至本机80端口
iptables-tnat-IPREROUTEING-ptcp--dport100-jREDIRECT --to-port803.1 创建和删除规则
- 查看规则
[root@liubei-02 ~]# iptables -LChain INPUT(policy ACCEPT)target prot optsourcedestination Chain FORWARD(policy DROP)target prot optsourcedestination Chain OUTPUT(policy ACCEPT)target prot optsourcedestination如上可见,当初没有任何规则。
- 添加一条规则
iptables-IINPUT-ptcp--dport80-jDROP- 查看添加结果
[root@liubei-02 ~]# iptables -LChain INPUT(policy ACCEPT)target prot optsourcedestination DROP tcp -- anywhere anywhere tcp dpt:http Chain FORWARD(policy DROP)target prot optsourcedestination Chain OUTPUT(policy ACCEPT)target prot optsourcedestination如上可见,nat表中多了一条记录
- 保存iptables规则
[root@liubei-02 ~]# service iptables saveiptables: Saving firewall rules to /etc/sysconfig/iptables:[确定]如上可见,规则保存在
/etc/sysconfig/iptables中
- 查看保存文件
# Generated by iptables-save v1.4.21 on Tue Jan 10 17:22:38 2023*mangle :PREROUTING ACCEPT[1960:156458]:INPUT ACCEPT[675:88821]:FORWARD ACCEPT[0:0]:OUTPUT ACCEPT[961:649865]:POSTROUTING ACCEPT[961:649865]COMMIT# Completed on Tue Jan 10 17:22:38 2023# Generated by iptables-save v1.4.21 on Tue Jan 10 17:22:38 2023*raw :PREROUTING ACCEPT[1960:156458]:OUTPUT ACCEPT[961:649865]COMMIT# Completed on Tue Jan 10 17:22:38 2023# Generated by iptables-save v1.4.21 on Tue Jan 10 17:22:38 2023*filter :INPUT ACCEPT[312:38483]:FORWARD DROP[0:0]:OUTPUT ACCEPT[457:343983]-AINPUT-ptcp-mtcp--dport80-jDROP COMMIT# Completed on Tue Jan 10 17:22:38 2023# Generated by iptables-save v1.4.21 on Tue Jan 10 17:22:38 2023*nat :PREROUTING ACCEPT[1300:68667]:INPUT ACCEPT[15:1030]:OUTPUT ACCEPT[77:5220]:POSTROUTING ACCEPT[77:5220]COMMIT# Completed on Tue Jan 10 17:22:38 2023如上可见,我们创建的规则被保存在文件中。
- 删除一条规则
先查看规则的编号
[root@liubei-02 ~]# iptables -nL --line-numberChain INPUT(policy ACCEPT)num target prot optsourcedestination1DROP tcp --0.0.0.0/00.0.0.0/0 tcp dpt:80 Chain FORWARD(policy DROP)num target prot optsourcedestination Chain OUTPUT(policy ACCEPT)num target prot optsourcedestination如上可见,我们刚才创建的规则是
nat表INPUT链中编号为1的规则
删除规则
[root@liubei-02 ~]# iptables -D INPUT 1默认是
nat表,因此我们不用写-t nat
- 查看删除结果
[root@liubei-02 ~]# iptables -nLChain INPUT(policy ACCEPT)target prot optsourcedestination Chain FORWARD(policy DROP)target prot optsourcedestination Chain OUTPUT(policy ACCEPT)target prot optsourcedestination如上可见,之前创建的规则被删除了。
3.2 创建新链并应用
要求:使用新建的MYCHAIN创建允许80端口访问的规则
- 为了演示效果,INPUT链拒绝一切请求
[root@liubei-02 ~]# iptables -I INPUT -p tcp --dport 80 -j DROP- 创建MYCHAIN链
[root@liubei-02 ~]# iptables -N MYCHAIN- 目标地址是本机地址且目标端口是80端口的请求全部交给MYCHAIN链处理
[root@liubei-02 ~]# iptables -I INPUT -p tcp --dport 80 -d 10.10.239.32 -j MYCHAIN- 设置MYCHAIN链的端口允许通过。
[root@liubei-02 ~]# iptables -I MYCHAIN -p tcp --dport 80 -j ACCEPT测试一下,此时80端口可以访问了。
- 查看规则
[root@liubei-02 ~]# iptables -LChain INPUT(policy ACCEPT)target prot optsourcedestination MYCHAIN tcp -- anywhere liubei-02 tcp dpt:http DROP tcp -- anywhere anywhere tcp dpt:http Chain FORWARD(policy ACCEPT)target prot optsourcedestination Chain OUTPUT(policy ACCEPT)target prot optsourcedestination Chain MYCHAIN(1references)target prot optsourcedestination ACCEPT tcp -- anywhere anywhere tcp dpt:http如上可见
- INPUT链中添加了一个拒绝规则,添加了一条规则转发的规则
- 多了一个MYCHAIN链,下边有一条允许80端口通过规则。
3.3 SNAT模式
作用:内网客户端访问公网
- 环境
| 内网 | 路由 | 公网 |
|---|---|---|
| client | LAN:192.168.1.1--------WAN:10.10.239.32 | web:10.252.96249 |
iptables-tnat-IPOSTROUTING-s10.252.96.0/24-ptcp-jSNAT--to10.10.239.32理解路由后过滤,在请求出路由的时候把请求的源地址改成路由本机,使得web可以返回给路由。
3.3 DNAT模式
作用:公网访问内网
- 环境:
| 内网 | 路由 | 公网 |
|---|---|---|
| web:192.168.1.110 | LAN:192.168.1.1,WAN 10.10.239.3 | client |
- 添加规则:
iptables-tnat-IPREROUTING-d10.10.239.32-ptcp--dport80-jDNAT--to192.168.1.110理解路由前过滤:请求目标是路由地址,在进入路由前被修改,否则将直接被路由本机接收。
如果转发端口不同
路由8080端口转发至内网web服务器8080端口
iptables-tnat-IPREROUTING-d10.10.239.32-ptcp--dport8080-jDNAT--to192.168.1.110:803.4 FTP服务器防火墙规则
iptables-AINPUT-ptcp--dport20-jACCEPT# 开放FTP主动数据端口iptables-AINPUT-ptcp--dport21-jACCEPT# 对外开放FTP控制端口iptables-AINPUT-ptcp--dport50000:60000-jACCEPT# 对外开放FTP数据端口iptables-AINPUT-jREJECT3.5 规则备份与恢复
- 备份:
iptables-save>/etc/iptables-script- 恢复
iptables-restore</etc/iptables-script- 开机执行
将恢复命令写入/etc/rc.local
注意:/etc/rc.local需要执行权限。