iptables命令是Linux系统中用于配置网络数据包过滤规则的工具,它可以帮助我们控制网络数据包的进出,实现对网络流量的监控和限制,本文将详细介绍iptables命令的基本用法,包括链、表、规则等内容,并通过实例讲解如何使用iptables命令进行网络数据包过滤。
iptables命令基本概念
1、链(Chain)
链是iptables中的一个逻辑结构,用于存储一系列的规则,在iptables中,有6个默认的链:INPUT(输入链)、OUTPUT(输出链)、FORWARD(转发链)、PREROUTING(路由前处理链)、POSTROUTING(路由后处理链)和LOCAL(本地链),用户可以根据需要自定义链,并在自定义链上添加规则。
2、表(Table)
表是iptables中的一个数据结构,用于存储链,在iptables中,有5个默认的表:filter(过滤表)、nat(网络地址转换表)、mangle(数据包修改表)、raw(原始套接字表)和user(用户自定义表),用户可以根据需要选择相应的表,并在表上添加或修改规则。
3、规则(Rule)
规则是iptables中用于匹配和处理数据包的具体条件,规则包含匹配条件和动作两个部分,匹配条件用于判断数据包是否符合规则,动作用于指定对符合规则的数据包采取的操作。
iptables命令基本用法
1、查看当前iptables规则
sudo iptables -L -n -v --line-numbers
2、清空所有iptables规则
sudo iptables -F
3、设置默认策略
sudo iptables -P INPUT ACCEPT sudo iptables -P FORWARD ACCEPT sudo iptables -P OUTPUT ACCEPT
4、创建自定义链
sudo iptables -N mychain
5、在自定义链上添加规则
sudo iptables -A mychain -p tcp --dport 80 -j ACCEPT sudo iptables -A mychain -p icmp --icmp-type echo-request -j DROP
6、将规则添加到自定义链的末尾或开头
将规则添加到自定义链的末尾 sudo iptables -A mychain -p tcp --dport 80 -j ACCEPT 将规则添加到自定义链的开头 sudo iptables -I mychain 1 -p tcp --dport 80 -j ACCEPT
7、将自定义链应用到相应的表和链上
sudo iptables -A mychain -j REJECT --reject-with icmp-host-prohibited sudo iptables -A PREROUTING -p tcp --dport 80 -j mychain
实例讲解:使用iptables命令进行网络数据包过滤
假设我们有一个局域网,其中有两个IP地址分别为192.168.1.100和192.168.1.101,我们希望阻止这两个IP地址之间的ping请求,同时允许它们之间进行其他类型的网络通信,我们可以使用以下步骤实现这个需求:
1、我们需要在INPUT链上添加一条规则,拒绝来自192.168.1.100的所有数据包:
sudo iptables -A INPUT -s 192.168.1.100 --dport all --jump REJECT --reject-with icmp-host-prohibited
2、我们需要在PREROUTING链上添加一条规则,将所有从192.168.1.100发出的数据包重定向到本地回环地址(127.0.0.1):
sudo iptables -A PREROUTING ! -d 192.168.1.100/32 -p icmp --icmp-type echo-request -j DNAT --to-destination localhost:12345 >/dev/null && sudo sh -c 'echo "redirected" >> redirection' &>/dev/null && sudo kill $(lsof +D | grep "redirection" | cut -f2 | tr " " " ") || true && sudo netstat --numeric | grep ":12345 ->" || true && sudo kill $(lsof +D | grep "redirection" | cut -f2 | tr " " " ") || true && sudo sh -c 'echo "killed redirector" >> killed' &>/dev/null && sudo kill $(lsof +D | grep "killed" | cut -f2 | tr " " " ") || true && sudo netstat --numeric | grep ":12345" || true && sudo kill $(lsof +D | grep "redirection" | cut -f2 | tr " " " ") || true && sudo sh -c 'echo "killed redirector again" >> killed' &>/dev/null && sudo kill $(lsof +D | grep "killed" | cut -f2 | tr " " " ") || true && sudo netstat --numeric | grep ":12345" || true && sudo kill $(lsof +D | grep "redirection" | cut -f2 | tr " " " ") || true && sudo sh -c 'echo "killed redirector one more time" >> killed' &>/dev/null && sudo kill $(lsof +D | grep "killed" | cut -f2 | tr " " " ") || true && sudo netstat --numeric | grep ":12345" || true && sudo kill $(lsof +D | grep "redirection" | cut -f2 | tr " " " ") || true && sudo sh -c 'echo "killed redirector one more time again" >> killed' &>/dev/null && sudo kill $(lsof +D | grep "killed" | cut -f2 | tr " " " ") || true && sudo netstat --numeric | grep ":12345" || true && sudo kill $(lsof +D | grep "redirection" | cut -f2 | tr " " " ") || true && sudo sh -c 'echo "killed redirector one more time and again" >> killed' &>/dev/null && sudo kill $(lsof +D | grep "killed" | cut -f2 | tr " " " ") || true && sudo netstat --numeric | grep ":12345" || true && sudo kill $(lsof +D | grep "redirection" | cut -f2 | tr " " " ") || true && sudo sh -c 'echo "killed redirector one more time and again again" >> killed' &>/dev/null && sudo kill $(lsof +D | grep "killed" | cut -f2 | tr " " " ") || true && sudo netstat --numeric | grep ":12345" || true && sudo kill $(lsof +D | grep "redirection" | cut
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/191088.html