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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章