iptables浅谈使用(三)

举报
Aion 发表于 2022/09/18 19:36:38 2022/09/18
【摘要】 防火墙技术是通过有机结合各类用于安全管理与筛选的软件和硬件设备,帮助计算机网络于其内、外网之间构建一道相对隔绝的保护屏障,以保护用户资料与信息安全性的一种技术。 防火墙技术的功能主要在于及时发现并处理计算机网络运行时可能存在的安全风险、数据传输等问题,其中处理措施包括隔离与保护,同时可对计算机网络安全当中的各项操作实施记录与检测,以确保计算机网络运行的安全性,保障用户资料与信息的完整性

引言

1 概述

防火墙技术是通过有机结合各类用于安全管理与筛选的软件和硬件设备,帮助计算机网络于其内、外网之间构建一道相对隔绝的保护屏障,以保护用户资料与信息安全性的一种技术。

防火墙技术的功能主要在于及时发现并处理计算机网络运行时可能存在的安全风险、数据传输等问题,其中处理措施包括隔离与保护,同时可对计算机网络安全当中的各项操作实施记录与检测,以确保计算机网络运行的安全性,保障用户资料与信息的完整性,为用户提供更好、更安全的计算机网络使用体验。


上两个章节熟悉并了解了什么是防火墙,防火墙的工具iptables以及iptables原理和应用。这一篇是具体的详细实验操作。


2 安装与使用

2.1 安装iptables环境

在Linux操作系统中,可以使用yum管理来安装,也可以从官网下载后上传到服务器手动安装。

「yum安装」

$ yum -y install iptables-services

「下载安装」

image.png


2.2 启动iptables

按照我们平时启动软件方式即可。

$ systemctl stop firewalld && systemctl disable firewalld
$ systemctl start iptables && systemctl enable iptables


3 基本命令

这个有点像firewalld防火墙,都是有基本的操作命令。


3.1 查看iptables已设置的规则

查看已设置规则列表:iptables -L

[root@otn2 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     udp  --  anywhere             anywhere             udp dpt:domain
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:domain
ACCEPT     udp  --  anywhere             anywhere             udp dpt:bootps
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:bootps

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

查看已设置规则详细列表:iptables -L -vn

[root@otn2 ~]# iptables -L -vn
Chain INPUT (policy ACCEPT 268M packets, 83G bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     udp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            udp dpt:53
    0     0 ACCEPT     tcp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:53
    0     0 ACCEPT     udp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            udp dpt:67
    0     0 ACCEPT     tcp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:67

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     all  --  *      virbr0  0.0.0.0/0            192.168.11.0/24     ctstate RELATED,ESTABLISHED
    0     0 ACCEPT     all  --  virbr0 *       192.168.11.0/24     0.0.0.0/0
    0     0 ACCEPT     all  --  virbr0 virbr0  0.0.0.0/0            0.0.0.0/0
    0     0 REJECT     all  --  *      virbr0  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
    0     0 REJECT     all  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT 249M packets, 74G bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     udp  --  *      virbr0  0.0.0.0/0            0.0.0.0/0            udp dpt:68


3.2 清除iptables已设置规则

清除所有规则:iptables -F

删除用户自定义的链:iptables -X

链的计数器清零:iptables -Z


「命令」

$ iptables -F   # 清除所有规则,不会处理默认的规则
$ iptables -X   # 删除用户自定义的链
$ iptables -Z   # 链的计数器清零(数据包计数器与数据包字节计数器)


3.3 添加iptables规则

指定表:iptables -t

把规则添加到指定的链上(默认添加到最后一行):iptables -A

插入规则(默认插入到第一行,封IP):iptables -I

删除链上的规则:iptables -D


「命令」

$ iptables -t   # 指定表(default: `filter')
$ iptables -A   # 把规则添加到指定的链上,默认添加到最后一行
$ iptables -I   # 插入规则,默认插入到第一行(封IP)
$ iptables -D   # 删除链上的规则


3.4 清除iptables指定规则

查看规则号码:iptables -nL --line-numbers

删除指定链上的指定序号:iptables -D INPUT 1 

$ iptables -nL --line-numbers   # 查看规则号码
$ iptables -D INPUT 1           # 删除指定链上的指定序号


4 实战

4.1 配置允许ssh端口连接

配置ssh连接:iptables -A INPUT


$ iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT

22:是ssh默认端口,

-s 192.168.1.0/24:表示允许这个网段的机器来连接,其它网段的ip地址是登陆不了你的机器的。

-j ACCEPT:表示接受这样的请求


4.2 允许本地圆环地址使用


$ iptables -A INPUT -i lo -j ACCEPT
$ iptables -A OUTPUT -o lo -j ACCEPT

本地圆环地址就是那个127.0.0.1,是本机上使用的,它进与出都设置为允许。


4.3 设置默认规则

默认情况,配置不允许进入:iptables -P INPUT DROP

默认情况,配置不允许转发:iptables -P FORWARD DROP

默认情况,配制可以转发出去:iptables -P OUTPUT ACCEPT

$ iptables -P INPUT DROP # 配置默认的不让进
$ iptables -P FORWARD DROP # 默认的不允许转发
$ iptables -P OUTPUT ACCEPT # 默认的可以出去

4.4 配置白名单

允许机房内网机器可以访问:iptables -A INPUT -p all

$ iptables -A INPUT -p all -s 192.168.1.0/24 -j ACCEPT  # 允许机房内网机器可以访问
$ iptables -A INPUT -p all -s 192.168.140.0/24 -j ACCEPT  # 允许机房内网机器可以访问
$ iptables -A INPUT -p tcp -s 183.121.3.7 --dport 3380 -j ACCEPT # 允许183.121.3.7访问本机的3380端口


4.5 开启相应的服务端口

$ iptables -A INPUT -p tcp --dport 80 -j ACCEPT # 开启80端口,因为web对外都是这个端口
$ iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT # 允许被ping
$ iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 已经建立的连接得让它进来


4.6 保存iptables规则

方法一

$ iptables-save > 1.txt 
# 将防火墙规则保存到文件中
$ iptables-save 
# 将防火墙规则保存到配置文件中,防止重启后失效
$ iptables-restore < 1.txt
# 从配置文件里载入防火墙配置

「方法二」

$ cp /etc/sysconfig/iptables /etc/sysconfig/iptables.bak # 任何改动之前先备份,请保持这一优秀的习惯
$ iptables-save > /etc/sysconfig/iptables
$ cat /etc/sysconfig/iptables

4.7 禁止某个IP访问

$ iptables -I INPUT -p tcp -s 192.168.1.253 -i ens33 -j DROP
$ iptables -A INPUT -p tcp ! -s 192.168.1.1 -i ens33 -j DROP
$ iptables -A INPUT -p tcp ! -s 192.168.1.0/24 -i ens33 -j DROP


4.8 禁止初跳板机以外的IP访问

$ iptables -I INPUT -p tcp ! -s 192.168.1.1 -j DROP


4.9 匹配端口范围

$ iptables -I INPUT -p tcp -m multiport --dport 21,22,23,24 -j DROP
$ iptables -I INPUT -p tcp --dport 3306:8809 -j ACCEPT
$ iptables -I INPUT -p tcp --dport 18:80 -j DROP
$ iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT               
# 允许本地回环接口(即运行本机访问本机)
$ iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 允许已建立的或相关连的通行
$ iptables -A OUTPUT -j ACCEPT         
# 允许所有本机向外的访问
$ iptables -A INPUT -p tcp --dport 22 -j ACCEPT    
# 允许访问22端口
$ iptables -A INPUT -p tcp --dport 80 -j ACCEPT    
# 允许访问80端口
$ iptables -A INPUT -p tcp --dport 21 -j ACCEPT    
# 允许ftp服务的21端口
$ iptables -A INPUT -p tcp --dport 20 -j ACCEPT    
# 允许FTP服务的20端口
$ iptables -A INPUT -j reject      
# 禁止其他未允许的规则访问
$ iptables -A FORWARD -j REJECT     
# 禁止其他未允许的规则访问


4.10 匹配ICMP类型

$ iptables -A INPUT -p icmp --icmp-type 8
# 例:iptables -A INPUT -p icmp --icmp-type 8 -j DROP
$ iptables -A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
$ iptables -A FORWARD -s 192.168.1.0/24 -p icmp -m icmp --icmp-type any -j ACCEPT


「实验」

$ iptables -I INPUT -s 192.168.1.200 -j DROP
# 封掉190.168.1.200
$ iptables -I INPUT -p icmp --icmp-type 8 -s 192.168.1.10 -j ACCEPT
$ iptables -I INPUT 2 -p icmp ! -s 192.168.1.1 --icmp-type 8 -j DROP
# 只允许192.168.1.1 192.168.1.10可以ping
$ iptables -I INPUT -p tcp --dport 3306 -j DROP
# 将3306端口封掉
$ iptables -A INPUT -p tcp -m tcp -s 192.168.0.8 -j DROP 
# 屏蔽恶意主机(比如,192.168.0.8
$ iptables -I INPUT -s 123.45.6.7 -j DROP       
# 屏蔽单个IP的命令
$ iptables -I INPUT -s 123.0.0.0/8 -j DROP     
# 封整个段即从123.0.0.1到123.255.255.254的命令
$ iptables -I INPUT -s 124.45.0.0/16 -j DROP   
# 封IP段即从123.45.0.1到123.45.255.254的命令
$ iptables -I INPUT -s 123.45.6.0/24 -j DROP    
# 封IP段即从123.45.6.1到123.45.6.254


4.11 端口映射

$ iptables -t nat -A PREROUTING -d 10.0.1.61 -p tcp --dport 9000 -j DNAT --to-destination 172.16.1.7:22
命令拆解:
表:nat
链:PREROUTING
源IP:10.0.1.61
源端口:9000
协议:tcp
动作:DNAT
目标IP:172.16.1.7
目标端口:22
 
$ iptables -t nat -A PREROUTING -d 210.14.67.127 -p tcp --dport 2222  -j DNAT --to-dest 192.168.188.115:22
# 本机的 2222 端口映射到内网 虚拟机的22 端口


4.12 IP映射

$ iptables -t nat -A PREROUTING -d 10.0.1.62 -j DNAT --to-destination 172.16.1.7
# 将10.0.1.62的访问请求转发到172.16.1.7


4.13 启动网络转发规则

$ iptables -A FORWARD -o eth0
# 只对 OUTPUT,FORWARD,POSTROUTING 三个链起作用


4.14 字符串匹配

$ iptables -A INPUT -p tcp --syn -m limit --limit 5/second -j ACCEPT
iptables -A INPUT -p tcp -m string --algo kmp --string "test" -j REJECT --reject-with tcp-reset
iptables -L
 
# Chain INPUT (policy ACCEPT)
# target     prot opt source               destination
# REJECT     tcp  --  anywhere             anywhere            STRING match "test" ALGO name kmp TO 65535 reject-with tcp-reset
#
# Chain FORWARD (policy ACCEPT)
# target     prot opt source               destination
#
# Chain OUTPUT (policy ACCEPT)
# target     prot opt source               destination


4.15阻止Windows蠕虫

$ iptables -I INPUT -j DROP -p tcp -s 0.0.0.0/0 -m string --algo kmp --string "cmd.exe"


4.16 防止SYN洪水

$ iptables -A INPUT -p tcp --syn -m limit --limit 5/second -j ACCEPT


4.17 列出已设置的规则

这个在基础规则已经列出来。

「格式」

iptables -L [-t 表名] [链名]


「描述」

• 四个表名 raw,nat,filter,mangle

• 五个规则链名 INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING

• filter表包含INPUT、OUTPUT、FORWARD三个规则链

$ iptables -L -t nat                  # 列出 nat 上面的所有规则
#            ^ -t 参数指定,必须是 raw, nat,filter,mangle 中的一个
$ iptables -L -t nat  --line-numbers  # 规则带编号
$ iptables -L INPUT
 
$ iptables -L -nv  # 查看,这个列表看起来更详细
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。