一、介绍
iptables是Linux中功能最为强大的防火墙软件之一
是一个在 Linux 系统上常用的防火墙工具,用于配置和管理网络数据包过滤规则。它可以通过定义规则集来控制进出系统的网络流量,实现网络安全策略
可以定义多种类型的规则,包括过滤、转发、网络地址转换(NAT)、端口转发等。每个规则由一系列匹配条件和对应的动作组成。匹配条件可以包括源/目标 IP 地址、协议、端口等信息。动作可以是接受、拒绝、重定向等。
在centos7 之后,firewalld 防火墙正式取代了 iptables 防火墙,firewalld自身并不具备防火墙的功能,而是和iptables一样需要通过内核的netfilter来实现,firewalld是iptables的一个封装,可以让你更容易地管理iptables规则。
防火墙的分类:双宿主主机防火墙、基于代理型防火墙和基于屏蔽子网的防火墙
二、参数
iptables [-t tbl] -COMMAND 链名 匹配条件 相应操作 #[-t tbl]为可选参数,-t用来指定具体操作那张表,不指定的话默认是Filter表
COMMAND 说明
参数 | 作用 |
-P | 设置默认策略 |
-F | 清空规则链 |
-L | 查看规则链 |
-A | 在规则链的末尾加入新规则 |
-I num | 在规则链的头部加入新规则 |
-D num | 删除某一条规则 |
-s | 匹配来源地址IP/MASK,加叹号“!”表示除这个IP外 |
-d | 匹配目标地址 |
-i | 网卡名称 匹配从这块网卡流入的数据 |
-o | 网卡名称 匹配从这块网卡流出的数据 |
-p | 匹配协议,如TCP、UDP、ICMP |
--dport num | 匹配目标端口号 |
--sport num | 匹配来源端口号 |
-j | 执行的操作,例如:REJECT,DROP,ACCEPT |
匹配条件
匹配条件用来实现更为精细和具体的条件,如网络接口名称,协议名称,源目的端口号等,高频匹配条件如下:
-i:网络接口名称 #指定数据包从哪个网络接口进入 -m:匹配的模块 #指定数据包规则所使用的过滤模块 -o:网络接口名称 #指定数据包从哪个网络接口输出 -p:协议名称 #指定数据包匹配的协议,如TCP、UDP和ICMP等 -s:源地址或子网地址 #指定数据包匹配的源地址 -state:数据包当前状态 #指定ESTABLISHED,RELATED等 -sport:源端口号 #指定数据包匹配的源端口号 -dport:目的端口号 #指定数据包匹配的目的端口号iptables规则的动作
相应操作
对于符合过滤规则或条件的数据包,需要进行相应的操作,如下:
-ACCEPT:接受数据包 -DNAT:目标地址转换,即改变数据包的目的地址。例如:将的广域网IP(222.101.98.54/24) ==> 局域网的IP(.1/24),且在NAT表的PREROUTING链上进行该动作 -DROP:丢弃数据包 -LOG:日志功能,将符合规则的数据包的相关信息记录在日志中,便于分析和排错 -MASQUERADE:IP伪装,改写数据包来源IP为防火墙的IP及端口,和SNAT不同的是,当进行IP伪装时,不需指定要伪装成哪个IP,IP会从网卡直接读取 -EDIRECT:与DROP基本一样,区别在于它除了阻塞包之外,还向发送者返回错误信息 -SNAT:源地址转换,即改变数据包的源地址
三、样例使用
- 查看所有规则
iptables -L -n --line-number
- 禁用某个ip的ICMP协议(禁ping)
iptables -I INPUT -s 172.168.0.1 -p icmp -j DROP
- 封禁某个ip
iptables -I INPUT -s 172.168.0.1 -j DROP
- 允许外部访问指定端口(3306)
sudo iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
- 只允许指定 IP 访问指定端口
需要注意的是,使用iptables时,规则添加的顺序至关重要。
# 只允许指定ip(192.168.1.123、192.168.1.124)访问指定端口(50079) # 第一步:在tcp协议中,禁止所有的ip访问本机的50070端口。 iptables -I INPUT -p tcp --dport 50070 -j DROP # 第二步:允许192.168.1.123访问本机的50070端口 iptables -I INPUT -s 192.168.1.123 -p tcp --dport 50070 -j ACCEPT # 第三步:允许192.168.1.124访问本机的50070端口 iptables -I INPUT -s 192.168.1.124 -p tcp --dport 50070 -j ACCEPT # 注意以上3条命令的顺序不能错。
- 封杀指定网段
要添加IP段到封停列表中,使用下面的命令:
sudo iptables -I INPUT -s 192.168.1.0/24 -j DROP #DROP掉所有来自192.168.1.0网段的数据包 sudo iptables -I INPUT -s 123.0.0.0/8 -j DROP #封整个段即从123.0.0.1到123.255.255.254的数据包 sudo iptables -I INPUT -s 124.45.0.0/16 -j DROP #封IP段即从123.45.0.1到123.45.255.254的数据包 sudo iptables -I INPUT -s 123.45.6.0/24 -j DROP #封IP段即从123.45.6.1到123.45.6.254的数据包
- 允许SSH服务
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
- 拒绝其它数据包
需要的端口和协议都开启了,最后就需要iptables绝对拒绝上面规则之外的数据包内容,参考操作如下:
sudo iptables -A INPUT -j REJECT sudo iptables -A FORWARD -j REJECT sudo iptables -A OUTPUT -j REJECT
- 删除某条规则
# 展示带编号的所有iptables规则 sudo iptables -L -n --line-number # 对指定编号规则进行删除 sudo iptables -D INPUT {num} # 比如要删除INPUT里序号为8的规则,执行: sudo iptables -D INPUT 8
- 或直接
iptables -D INPUT -s ***.***.***.*** -j DROP
四、总结提高
以上学习了iptables的一些操作,可以封杀部分IP,禁用某个协议,更加详细的操作请看
参考网站