实验环境
两台Kali Linux(其他Linux主机也可以)
iptables实验机ip:192.168.30.182
另一个台主机ip:192.168.30.209
实验前先查看iptables实验机的ssh是否正常,用另一台linux主机进行ssh连接
这里ssh有问题的话,推荐看着一篇博客,若可以远程连接则没有问题,如下图
知识点:
iptables五种规则链:
INPUT:处理入站数据包,比如数据包进入防火墙 (与内外网无关)
OUTPUT:处理出站数据包,比如数据包离开防火墙 (与内外网无关)
FORWARD:处理转发数据包,无论数据包从内网口到外网口,还是从外网口到内网口
POSTROUTING:在进行路由选择后处理数据包,,比如数据包要从eth0到eth1,路由选择后eth1处理
PREROUTING:在进行路由选择前处理数据包,比如数据包要从eth0到eth1,路由选择前eth0处理
iptables默认四个规则表:
raw表:确定是否对数据包进行状态跟踪
mangle表:为数据包设置标记
nat表:修改数据包中的源、目标IP地址或端口 网关型防火墙(多网卡)
filter表:确定是否放行该数据包 主机型防火墙(单网卡)
实验步骤
0x01 通过iptables进行端口设置
- 添加规则关闭某端口(如TCP的22端口);然后,查看已有规则,并试图访问该端口。
1)关闭端口22:
iptables命令语法格式:
iptables [-t 表名] 管理选项 [链名] [条件匹配] [-j 目标动作或跳转]
不指定表名时,默认为filter表
管理选项:追加:-A,插入:-I,修改:-R,删除:-D,查询:-L
条件匹配:默认策略 -p
目标动作:ACCEPT:允许,DROP:丢弃,REJECT:拒绝,LOG:记录日志
SNAT,DNAT:进行地址转换
#--dport:目的端口,其他参数看上面命令语法格式
iptables -A INPUT -p tcp --dport 22 -j DROP
iptables -A OUTPUT -p tcp --dport 22 -j DROP
REJECT动作会返回一拒绝数据包,而DROP是将数据包直接丢弃,并不做任何的回应,两者均可
2)查看当前规则,出入链都已对需要访问端口22的数据包进行丢弃操作
iptables -L -n
3)使用另一台主机ssh连接,访问端口22,若使用DROP端口禁用端口22,则会出现如下图所示情况,没有任何回包,最终连接超时
若使用REJECT动作禁用端口22,会出现拒绝连接,如下图
- 删除上述规则开放该端口;然后,查看已有规则,并试图访问该端口。
#删除INPUT链的第一条规则
iptables -D INPUT 1
#删除OUTPUT链的第一条规则
iptables -D OUTPUT 1
#查看规则,-L:列表查看各条规则信息,-n:以数字形式显示ip地址及端口信息
iptables -L -n
ssh可以成功连接
0x02 通过iptables实现ICMP包的过滤。
- 添加规则拒绝ICMP包通过;然后,查看已有规则,并试图执行ping命令。
1)先进行ping测试,可以成功ping
ping 192.168.30.182 -c 4
2) 拒绝icmp包通过
iptables -A INPUT -p icmp -j REJECT
3)查看当前规则
iptables -L -n
4)ping失败,icmp包不能到达目标主机
- 删除上述规则允许ICMP包通过;然后,查看已有规则,并试图执行ping命令。
1)删除INPUT链的第一条规则
iptables -D INPUT 1
2)查看规则发现已经被删除
iptables -L -n
3)成功ping通