一、iptables相关概念理解
名词 | 含义 | 对比 |
---|
Netfilter/iptables | 是表的容器 | 国家 |
表(table) | 表是用来存放链的容器 | 省 |
链(chain) | 链 存放规则的容器 | 市 |
规则(policy) | 准许/拒绝访问 | 区/县 |
二、四表五链
2.1 四表及其作用
Filter
:过滤,默认的表,防火墙功能
NAT
:实现NAT转化:1.共享上网(SNAT功能) 2.端口转发(DNAT功能)
mangle
: 根据规则修改数据包的一些标志位,以便其他规则或程序可以利用这种标志对数据包进行过滤或策略路由
raw
:
2.2 五链
- INPUT :当收到访问防火墙本地地址的数据包时,应用此链的规则
- OUTPUT :当防火墙本机向外发出数据时,应用此链的规则
- FORWARD :当收到要通过防火墙发送给其他网络地址的数据包时,应用此链的规则
- PREROUTING :在对数据包进行路由选择之前,应用此链的规则
- POSTROUTING :在对数据包做路由选择之后,应用此链的规则
![四表五链](https://i-blog.csdnimg.cn/blog_migrate/78a31a1743f6c2001d2244da75201deb.png#pic_center)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/ee071eb751cc10e9425b014340ced40b.png#pic_center)
三、iptables常用命令及参数
command | 后跟的值和含义 |
---|
-t | 指定表 filter(默认) nat |
-A | append 把规则追加到末尾 |
-I | (大写字母i ) insert,把规则插入到规则的第1条 (添加拒绝类规则的时候) |
-p | protocal 指定协议,tcp /udp/icmp |
–dport | destination port 目标端口 |
–sport | source port,源端口 |
-d | dest ip address,目标ip地址 |
-s | source ip address,源ip地址 |
-j | jump 方法,DROP (拒绝)、 ACCEPT(准许) 、REJECT(拒绝) |
-F | 清除链中所有规则 |
---|
-X | 清空自定义链的规则 |
-Z | 清空计数器 |
-n | 不要把端口解析服务名字 |
-L | 显示表中的规则 |
–line-number | 给每个链中的规则加上行号 |
-D | 删除规则 根据规则的号码进行删除 |
四、iptables 常用指令
- 查看当前的防火墙规则
[root@Apache ~]# iptables-save
- 查看防火墙的默认规则
[root@Apache ~]# cat /etc/sysconfig/iptables
- 设置INPUT链默认策略为drop丢弃
[root@Apache ~]# iptables -P INPUT DROP
[root@Apache ~]# iptables -nL --line-number
Chain INPUT (policy DROP)
num target prot opt source destination
1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
2 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
3 INPUT_direct all -- 0.0.0.0/0 0.0.0.0/0
4 INPUT_ZONES_SOURCE all -- 0.0.0.0/0 0.0.0.0/0
5 INPUT_ZONES all -- 0.0.0.0/0 0.0.0.0/0
6 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
7 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
8 DROP tcp -- !192.168.31.0/24 0.0.0.0/0
- 允许协议为tcp,目的端口为22的数据包流量进入本机
[root@Apache ~]#iptables -A INPUT -p tcp --dport 22 -j ACCEPT
- INPUT链丢弃协议是TCP,但端口非80、443、22的流量
"!
"是非的意思
[root@Apache ~]# iptables -I INPUT -p tcp -m multiport ! --dport 80,443,22 -j DROP
[root@Apache ~]#
[root@Apache ~]# iptables -nL --line-number
Chain INPUT (policy DROP)
num target prot opt source destination
1 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports !80,443,22
2 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
3 DROP tcp -- !192.168.31.0/24 0.0.0.0/0
- 将去往目的地址为:10.0.0.61,目标端口为:8080的数据包转换成目标地址为10.0.0.11,目的端口为22的数据包,需要先开启路由转发功能
[root@Apache ~]
[root@Apache ~]
[root@Apache ~]
[root@Apache ~]
Chain PREROUTING (policy ACCEPT)
num target prot opt source destination
1 PREROUTING_direct all -- 0.0.0.0/0 0.0.0.0/0
2 PREROUTING_ZONES_SOURCE all -- 0.0.0.0/0 0.0.0.0/0
3 PREROUTING_ZONES all -- 0.0.0.0/0 0.0.0.0/0
4 DNAT tcp -- 0.0.0.0/0 10.0.0.61 tcp dpt:8080 to:10.0.0.11:22
- 将源地址为172.16.1.0/24,从本机eth0网卡出去的数据包进行SNAT转换成源地址为本机的网卡地址10.0.0.61
[root@Apache ~]