24
2020
03

linux iptables

防火墙的作用


众所周知,相较于企业内网,外部的公网环境更加恶劣,罪恶丛生。在公网与企业内网之间充当保护屏障的防火墙。虽然有软件或硬件之分,但主要功能都是依据策略对穿越防火墙自身的流量进行过滤。防火墙策略可以基于流量的源目地址、端口号、协议、应用等信息来定制,然后防火墙使用预先定制的策略规则监控出入的流量,若流量与某一条策略规则相匹配,则执行相应的处理,反之则丢弃。这样一来,就可以保证仅有合法的流量在企业内网和外部公网之间流动了。


我们要知道,iptables与firewalld都不是真正的防火墙,它们都只是用来定义防火墙策略的防火墙管理工具而已,或者说,它们只是一种服务。iptables服务会把配置好的防火墙策略交由内核层面的netfilter网络过滤器来处理,而firewalld服务则是把配置好的防火墙策略交由内核层面的nftables包过滤框架来处理。换句话说,当前在Linux系统中其实存在多个防火墙管理工具,旨在方便运维人员管理Linux系统中的防火墙策略,我们只需要配置妥当其中的一个就足够了。虽然这些工具各有优劣,但它们在防火墙策略的配置思路上是保持一致的。


iptables


iptables是运行在用户空间的应用软件,通过控制Linux内核netfilter模块,来管理网络数据包的处理和转发,由netfilter和iptables组成。在RHEL 7系统中,firewalld防火墙虽取代了iptables防火墙,但其并没有被移除,依然可以使用。


netfilter和iptables关系:


netfilter组件也称为内核空间(Kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。


iptables组件是一种工具,也称为用户空间(userspace),它使插入,修改和除去信息包过滤表中的规则变得容易。


netfilter/iptables后期简称为:iptables,其内置了filter,,raw,nat和mangle四张表,所有规则配置后,立即生效,不需要重启服务。


简单概述一下四张表作用:filter:负责过滤数据包,nat:地址转换,mangle:流量整形,给数据包打个标识,raw表:用于处理异常,一般用不到。


安装


首先,可以通过rpm查看一下iptables是否安装,默认都是安装好在系统中的。


[root@test2 ~]# rpm -qf $(which iptables)

iptables-1.4.21-18.0.1.el7.centos.x86_64


若没有安装,可以挂载系统镜像,使用rpm安装或yum安装


[root@test2 Packages]# rpm -ivh /mnt/Packages/iptables-1.4.21-18.0.1.el7.centos.x86_64.rpm 

[root@test2 /]# yum install -y iptables-services


其配置文件位于/etc/sysconfig/目录下


[root@test2 Packages]# ls /etc/sysconfig/iptables-config 

/etc/sysconfig/iptables-config


通过查看其状态,看iptables是否安装完成


[root@test2 /]# systemctl status iptables

● iptables.service - IPv4 firewall with iptables

   Loaded: loaded (/usr/lib/systemd/system/iptables.service; disabled; vendor preset: disabled)

   Active: inactive (dead)


启动iptables

注:启动iptables需要关闭selinux,要不然iptables不读取配置文件


[root@test2 /]# systemctl start  iptables


iptables使用介绍


语法

iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作


看起来有点不明白?我刚开始也不明白,通过实例加以说明你就懂了。

选项

-t<表>:指定要操纵的表;

-A:向规则链中添加条目;

-D:从规则链中删除条目;

-i:向规则链中插入条目;

-R:替换规则链中的条目;

-L:显示规则链中已有的条目;

-F:清空规则链中已有的条目;

-Z:清空规则链中的数据包计算器和字节计数器;

-N:创建新的用户自定义规则链;

-P:定义规则链中的默认目标;

-h:显示帮助信息;

-p:指定要匹配的数据包协议类型;

-s:指定要匹配的数据包源ip地址;

-j<目标>:指定要跳转的目标;

-i<网络接口>:指定数据包进入本机的网络接口;

-o<网络接口>:指定数据包要离开本机所使用的网络接口。


表名

raw :高级功能,如:网址过滤。

mangle :数据包修改(QOS),用于实现服务质量。

net :地址转换,用于网关路由器。

filter :包过滤,用于防火墙规则。


规则链名

INPUT链 :处理输入数据包。

OUTPUT链 :处理输出数据包。

PORWARD链 :处理转发数据包。

PREROUTING链 :用于目标地址转换(DNAT)。

POSTOUTING链 :用于源地址转换(SNAT)。


动作

accept :接收数据包。

DROP :丢弃数据包。

REDIRECT :重定向、映射、透明代理。

SNAT :源地址转换。

DNAT :目标地址转换。

MASQUERADE :IP伪装(NAT),用于ADSL。

LOG :日志记录。


案例


显示规则链中已有的条目


[root@test2 ~]# iptables -L


清除已有iptables规则


[root@test2 ~]# iptables -Z

[root@test2 ~]# iptables -F


不允许本机回环接口,即不允许自己访问自己


[root@test2 ~]# iptables -A INPUT -s 127.0.0.1 -j DROP

iptables:命令关键字 -A:添加规则 INPUT:控制输入数据包 -s:源IP地址 -j:指定动作 DROP:丢弃数据包


不允许所有主机访问


[root@test2 ~]# iptables -A INPUT -j DROP 


允许所有本机向外的访问


[root@test2 ~]# iptables -A OUTPUT -j ACCEPT


允许ssh的22端口访问


[root@test2 ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT 

iptables:命令关键字 -A:添加规则 INPUT:控制输入数据包 -p:指定要匹配的数据包协议类型 --dport:指定目标端口 -j:指定规则 ACCEPT:接收数据包


允许http的80端口访问


[root@test2 ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT 


允许ftp的21和20端口访问


[root@test2 ~]# iptables -A INPUT -p tcp --dport 21 -j ACCEPT 

[root@test2 ~]# iptables -A INPUT -p tcp --dport 20 -j ACCEPT


将所有iptables以序号标记显示


[root@test2 ~]# iptables -L -n --line-numbers 


删除INPUT序号为3的规则


[root@test2 ~]# iptables -D INPUT 3


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/qq_42534026/article/details/105064633


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。