/etc/sysconfig/iptables详解

目录

一、iptables概念

二、iptables基础

三、iptables命令格式

命令格式

命令选项

条件匹配

处理动作

 

四、iptables命令

五、iptables实例

六、CentOS7无iptable解决方法

参考文献:


一、iptables概念


Linux内核集成的IP信息包过滤系统,linux的包过滤功能,即linux防火墙,它由netfilter和iptables两个组件组成。
防火墙在做数据包过滤决定时,有一套遵循和组成的规则,这些规则存储在专用的数据包过滤表中,而这些表集成在 Linux内核中。在数据包过滤表中,规则被分组放在我们所谓的链(chain)中。而netfilter/iptables IP 数据包过滤系统是一款功能强大的工具,可用于添加、编辑和移除规则。
netfilter组件也称为内核空间,是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。iptables组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。


二、iptables基础


iptables是按照规则来办事的,规则其实就是网络管理员预定义的条件,规则一般的定义为"如果数据包头符合这样的条件,就这样处理这个数据包"。规则存储在内核空间的信息包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放(accept)、拒绝(reject)和丢弃(drop)等。配置防火墙的主要工作就是添加、修改和删除这些规则。
当客户端访问服务器的web服务时,客户端发送报文到网卡,而tcp/ip协议栈是属于内核的一部分,所以,客户端的信息会通过内核的TCP协议传输到用户空间中的web服务中,而此时,客户端报文的目标终点为web服务所监听的套接字(IP:Port)上,当web服务需要响应客户端请求时,web服务发出的响应报文的目标终点则为客户端,这个时候,web服务所监听的IP与端口反而变成了原点,我们说过,netfilter才是真正的防火墙,它是内核的一部分,所以,如果我们想要防火墙能够达到"防火"的目的,则需要在内核中设置关卡,所有进出的报文都要通过这些关卡,经过检查后,符合放行条件的才能放行,符合阻拦条件的则需要被阻止,于是,就出现了input关卡和output关卡,而这些关卡在iptables中不被称为"关卡",而被称为"链"。
其实我们上面描述的场景并不完善,因为客户端发来的报文访问的目标地址可能并不是本机,而是其他服务器,当本机的内核支持IP_FORWARD时,我们可以将报文转发给其他服务器,所以,这个时候,我们就会提到iptables中的其他"关卡",也就是其他"链",他们就是  “路由前”、“转发”、“路由后”,他们的英文名是PREROUTING、FORWARD、POSTROUTING
也就是说,当我们启用了防火墙功能时,报文需要经过如下关卡,也就是说,根据实际情况的不同,报文经过"链"可能不同。如果报文需要转发,那么报文则不会经过input链发往用户空间,而是直接在内核空间中经过forward链和postrouting链转发出去的。
报文的流向:
到本机某进程的报文:PREROUTING --> INPUT
由本机转发的报文:PREROUTING --> FORWARD --> POSTROUTING
由本机的某进程发出报文(通常为响应报文):OUTPUT --> POSTROUTING


三、iptables命令格式


命令格式


iptables [ -t 表名] 命令选项 [链名] [条件匹配] [-j 处理动作或跳转]
-t 接表名,如果不加-t 默认就是 –t filter


命令选项


-L 列出一个或所有链的规则
-v 显示详细信息,包括每条规则的匹配句数量和匹配字节数
-x 在v的基础上,禁止自动换算单位(K,M)
-n 只显示ip地址和端口号,不显示域名和服务名称
-I 插入到防火墙第一条生效
-A 添加链是添加到最后一条
-D 删除指定链中的某一条规则,按规则序号或内容确定要删除的规则
-F 清空指定链中的所有规则,默认清空表中所有链的内容
-X 删除指定表中用户自定义的规则链


条件匹配


-i 入站请求接口
-o 出站请求接口
-s 入站源地址
-d 目标地址
-p 指定规则协议,如tcp, udp,icmp等,可以使用all来指定所有协议
–dport 目的端口,数据包的目的(dport)地址是80,就是要访问我本地的80端口
–sport 来源端口 数据包的来源端口是(sport)80,就是对方的数据包是80端口发送过来的。


处理动作


ACCEPT:允许数据包通过。
DROP:直接丢弃数据包,不给任何回应信息,这时候客户端会感觉自己的请求泥牛入海了,过了超时时间才会有反应。
REJECT:拒绝数据包通过,必要时会给数据发送端一个响应的信息,客户端刚请求就会收到拒绝的信息。
SNAT:源地址转换,解决内网用户用同一个公网地址上网的问题。
MASQUERADE:是SNAT的一种特殊形式,适用于动态的、临时会变的ip上。
DNAT:目标地址转换。
REDIRECT:在本机做端口映射。
LOG:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则,也就是说除了记录以外不对数据包做任何其他操作,仍然让下一条规则去匹配
一般不使用REJECT(拒绝)行为.REJECT会带来安全隐患

2480889e5f7ccc621b60e212f77e3f6afc3.jpg

(图片来源:https://my.oschina.net/u/1253780/blog/2050514

四、iptables命令

查询防火墙状态:
[root@localhost ~]# service   iptables status
停止防火墙:
[root@localhost ~]# service   iptables stop
启动防火墙:
[root@localhost ~]# service   iptables start
重启防火墙:
[root@localhost ~]# service   iptables restart
永久关闭防火墙:
[root@localhost ~]# chkconfig   iptables off
永久关闭后启用:
[root@localhost ~]# chkconfig   iptables on

五、iptables实例

#头两行是注释说明
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
#使用filter表
*filter
#下面三条内容定义了内建的INPUT、FORWAARD、ACCEPT链
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT

#注意默认的22端口别删掉了,这个是ssh的端口

-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

#仅限XXX.XXX.XXX.XXX访问6379端口
-A INPUT -s XXX.XXX.XXX.XXX -m state --state NEW -m tcp -p tcp --dport 6379 -j ACCEPT

#允许访问8080端口,这样8080端口就可以对外提供服务了
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8081 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8082 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8083 -j ACCEPT

-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

六、CentOS7无iptable解决方法

CentOS7没有iptables,默认使用firewalld ;iptables默认无法被systemctl控制,需要安装iptables-services、iptables-devel这两个依赖包。

1. 停止并禁用 firewalld

systemctl stop firewald.service && systemctl disable firewald.service

2.安装iptables-services、iptables-devel

yum install iptables-services iptables-devel

3.启用并启动iptables

systemctl enable iptables.service && systemctl start iptables.service

查看状态 systemctl status iptables.service

4.查看iptables配置文件 vim /etc/sysconfig/iptables


参考文献:


1、https://baike.baidu.com/item/IPTABLES/9139339?fr=aladdin
2、https://www.cnblogs.com/shuaixf/archive/2011/11/29/2268345.html
3、https://www.cnblogs.com/dulongly/p/10506499.html

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