iptables 包含多个表,表包含多个链(链可以是内置的或用户定义的),一种链又可以存放在不同的表中,链中可能包含多个规则(规则是为数据包定义的),四表五链。所以,iptables有这几个概念 , Tables、Chains、Rules。
IPTables 有以下 4 个内置表。
filter表:负责过滤数据包。
nat表:用于网络地址转换。
mangle表:修改数据包中的内容,例如服务类型、TTL、QOS等等。
raw表:决定数据包是否被状态跟踪机制处理。
Iptables有五种不同的链,分别是INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING。
INPUT:从外界进入防火墙的数据包会应用此规则链中的策略。
OUTPUT:当前服务器从防火墙外出的数据表会应用此规则链中的策略。
FORWARD:转发数据包时会应用此规则链中的策略。
PREROUTING:主机外的报文要进入防火墙,所有的数据包进来的时候都会由PREROUTING链进行处理。
POSTROUTING:主机内的报文要从防火墙出去,需要经过POSTROUTING链进行处理。
raw | mangle | nat | filter | |
---|---|---|---|---|
INPUT | + | + | + | |
OUTPUT | + | + | + | + |
FORWARD | + | + | ||
PREROUTING | + | + | + | |
POSTROUTING | + | + |
以下是 iptables 规则要记住的要点。
如果您执行 iptables --list (或) iptables -L,您将看到系统上所有可用的防火墙规则。如果防火墙没有开启,显示默认输入表,带有默认输入链、前向链和输出链。
[root@MiWiFi-R4AC-srv ~]# iptables -t filter --list #执行该操作以查看filter表
[root@MiWiFi-R4AC-srv ~]# iptables -t mangle --list #执行该操作以查看mangle表
[root@MiWiFi-R4AC-srv ~]# iptables -t nat --list #执行该操作以查看nat表
[root@MiWiFi-R4AC-srv ~]# iptables -t raw --list #执行该操作以查看raw表
注意:如果不指定 -t 选项,它将显示默认过滤器表。因此,以下两个命令是相同的
iptables -t filter --list
(or)
iptables --list
下面的 iptable 示例显示了在过滤表的输入、转发和输出链中定义了一些规则。
iptables --list
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 RH-Firewall-1-INPUT all -- 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 RH-Firewall-1-INPUT all -- 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
Chain RH-Firewall-1-INPUT (2 references)
num target prot opt source destination
1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 255
3 ACCEPT esp -- 0.0.0.0/0 0.0.0.0/0
4 ACCEPT ah -- 0.0.0.0/0 0.0.0.0/0
5 ACCEPT udp -- 0.0.0.0/0 224.0.0.251 udp dpt:5353
6 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:631
7 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:631
8 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
9 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
10 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
iptables --list 命令输出中的规则包含以下字段:
systemctl list-unit-files |grep iptables #查看是否安装了iptables防火墙
systemctl status iptables #查看防火墙状态
启动iptables服务
systemctl start iptables
重启iptables服务
systemctl restart iptables
service iptables restart
关闭iptables防火墙
service iptables stop
systemctl stop iptables
开机启动防火墙
chkconfig iptables on #开机启动iptables
开机不启动防火墙
chkconfig iptables off #永久关闭iptables
查看或清除规则
iptables -F #清除现有规则
iptables -t 表名 -F 链名 #清空规则F
iptables操作的一些参数
选项 | 用法 |
---|---|
-A | 在指定链路末尾追加一条规则,如:iptables-A INPUT(操作) |
-I(大写) | 在指定链中插入一条规则,如:iptables -I INPUT (操作) |
-P(大写) | 指定默认规则,如:iptables -P OUTPUT ACCEPT(操作) |
-p(小写) | 连接端口 tcp/udp/icmp/al1指定端口的时候需要指定协议 |
–sport | 源端口 |
–dport | 目标端口 |
-D | 删除指定规则 iptables -t nat -D INPUT (操作) |
-R | 修改、替换一条规则 iptables -t nat -R INPUT()操作) |
-L | 查看 iptables-tnat-L(查看) |
-n | 有字段以数字形式显示,如: iptables -L -n,iptables -nL,iptables -vnL (查看) |
-v | 查看时显示更详细信息 |
–line-number | 规则带编号,如: iptables -t nat -L -n --line-number /iptables -t nat -L–line-number |
-F | 清除链中所有规则 iptables -F |
-X | 清空自定义链的规则,不影响其它链 iptables -X |
-Z | 清空链的计数器(匹配到的数据包的大小和总和) iptables -Z |
-S | 看链的所有规则或者某个链的规则/某个具体规则后面跟编号 iptables -t nat -S,iptables -t nat -S POSTROUTING 1 |
-j | ACCEPT/DROP/REJECT |
-m state–state (不常用) | NEW:已经或将启动新的连接 ESTABLISHED:已建立的连接 RELATED:正在启动的新连接 INVALID:非法或无法识别的 ftp服务是特殊的,需要配状态连接 |
-m multiport | –sport 源端口列表 –dport 目的端口列表 |
-m iprange --src-range | IP范围匹配: -m iprange --src-range IP范围 |
-m mac --mac-source | MAC地址匹配: -m mac --mac-source MAC地址 |
目标值列表
控制类型 | 作用 |
---|---|
ACCEPT | 允许数据包通过accret |
DROP | 直接丢弃数据包,不给出任何回应消息dorp |
REJECT | 拒绝数据包通过,会给数据发送端一个响应信息reject |
SNAT | 源地址转换,根据指定条件修改数据包的源IP地址,通常被叫做源映射。 |
DNAT | 修改数据包的目的地址 |
MASQUERADE | 伪装成一个非固定公网IP地址masquerand |
LOG | 在/var/log/messages中记录日志信息,然后将数据包传递给下一条规则log |
命令行操作:
(1)使用命令"iptables-L"查看现有的链;
(2)使用命令"iptables-A [chain_name]-p [protocol] --dport[destination_port]-j ACCEPT"添加新规则;
例如:iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
(3)使用命令"iptables-L"确认添加的规则生效;
(4)使用命令"iptables-S"保存规则;
(5)重启iptables务,使添加的规则永久有效
修改配置文件操作:
/etc/sysconfig/iptables
实例:修改3080端口tcp协议转发的命令
echo "1" > /proc/sys/net/ipv4/ip_forward #启用IPV4转发
iptables -F -t filter #清空filter表,以防止本来有规则影响后面的操作
iptables -F -t nat #清空nat表,以防止本来有规则影响后面的操作
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 3080 -j DNAT --to-destination IP1:3080 #修改nat表的PREROUTING连3080端口的目的地址为IP1:3080
iptables -t nat -A POSTROUTING -p tcp -m tcp --dport 3080 -j SNAT --to-source IP2 #修改nat表POSTROUTING连3080端口原地址为IP2
service iptables save #保存修改
service iptables restart #重启服务使之生效
学习中参考诸多文档,不一一列举,感谢:
https://blog.csdn.net/weixin_43554927/article/details/125809342
https://blog.csdn.net/weixin_44953658/article/details/125671469
https://jiangxl.blog.csdn.net/article/details/125671469
https://bbs.huaweicloud.com/blogs/300668?utm_source=juejin&utm_medium=bbs-ex&utm_campaign=other&utm_content=content
https://blog.csdn.net/qq_16116881/article/details/125514524