7、linux防火墙的使用(iptables)
7.1、说明:
CentOS 7 系统默认的防火墙是 Filewalld。不过,现在应该还有很多用户习惯使用 iptables。本文以 CentOS 7 为例,
说明在 CentOS 7 中如何安装并使用 iptables。
防火墙是层层过滤的,实际是按照配置规则的顺序从上到下,从前到后进行过滤的。
如果匹配上规则,即明确表示是阻止(DROP)还是通过(ACCEPT)数据包就不再向下匹配新的规则。
如果规则中没有明确表明是阻止还是通过的,也就是没有匹配规则,向下进行匹配,直到匹配默认规则得到明确的阻止还是通过。
防火墙的默认规则是所有规则执行完才执行的。
(1)如果是命令增加条目,那规则是临时生效的,重启iptables服务后就消失了。
(2)如果要永久生效,要把规则写进配置文件。写配置文件的办法有两种:
一种是直接编辑后 service iptables restart,一种是 service iptables save后service iptables restart。
(3)iptables服务每次启动的时候才会去读一次规则。如果直接编辑了配置文件,然后用 service iptables save,那么内存里的配置规则是初始的,会覆盖你直接对配置
文件的编辑。因此,最后的结论是,如果是临时规则,用上面的第(1)种办法,但是不要save;如果是永久规则,用上面(2)中的第一种或第二种方法,二选一不可混用。
(4)进站默认:firewalld默认是拒绝的(ping和ssh不拒绝),需要设置以后才能放行。而iptables默认是允许的,需要拒绝的才去限制。
出站默认:firewalld、iptables 不限制。
7.2、iptables 服务命令:
1、安装iptables 服务:
yum install iptables-services
2、iptables 的启动、停止、重启,状态:
systemctl start iptables.service
systemctl stop iptables.service
systemctl restart iptables.service
systemctl status iptables.service
3、iptables 开机自启动服务的开启、关闭,查看状态:
systemctl enable iptables.service
systemctl disable iptables.service
[root@centos-test ~]# systemctl list-unit-files| grep iptables.service
iptables.service enabled
4、卸载 iptables:
yum erase iptables
5、五链:
PREROUTING
FORWARD
INPUT
OUPUT
POSTROUTING
(1)Filter表:
表示iptables的默认表,因此如果你没有自定义表,那么就默认使用filter表,它具有以下三种内建链:
INPUT链
#处理来自外部的数据。
OUTPUT链
#处理向外发送的数据。
FORWARD链
#将数据转发到本机的其他网卡设备上。
(2)NAT表有三种内建链:
PREROUTING链
#处理刚到达本机并在路由转发前的数据包。它会转换数据包中的目标IP地址(destination ip address),通常用于DNAT(destination NAT)。
POSTROUTING链
#处理即将离开本机的数据包。它会转换数据包中的源IP地址(source ip address),通常用于SNAT(source NAT)。
OUTPUT链
#处理本机产生的数据包。
7.3、防火墙之filter表操作:
(0)备份原有的iptables文件,方便进行恢复:
[root@centos-test ~]# cp -a /etc/sysconfig/iptables /etc/sysconfig/iptables.bak
(1)查看本机关于IPTABLES的设置情况
[root@centos-test ~]# cat /etc/sysconfig/iptables
# sample configuration for iptables service
# you can edit this manually or use system-config-firewall
# please do not ask us to add additional ports/services to this default configuration
*filter
:INPUT ACCEPT [0:0]
#该规则表示INPUT表默认策略是ACCEPT。
:FORWARD ACCEPT [0:0]
#该规则表示FORWARD表默认策略是ACCEPT。
:OUTPUT ACCEPT [0:0]
#该规则表示OUTPUT表默认策略是ACCEPT。
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
#该规则表示允许进入的数据包只能是刚刚我发出去的数据包的回应,ESTABLISHED:已建立的链接状态。RELATED:该数据包与本机发出的数据包有关。
-A INPUT -p icmp -j ACCEPT
#该规则指的是icmp协议的包都接受通过(ping命名发出的就是icmp的包)。
-A INPUT -i lo -j ACCEPT
#-i参数是指定接口,这里的接口是lo ,lo就是Loopback(本地环回接口),意思就允许本地环回接口在INPUT表的所有数据通信。
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
#该规则指的是新连接ssh默认端口22的允许进入。
-A INPUT -j REJECT --reject-with icmp-host-prohibited
#该规则指的是在INPUT表中拒绝所有其他不符合上述任何一条规则的数据包,并且发送一条host prohibited的消息给被拒绝的主机。
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
#该规则指的是在FORWARD表中拒绝所有其他不符合上述任何一条规则的数据包。并且发送一条host prohibited的消息给被拒绝的主机。
COMMIT
#iptables可以使用扩展模块来进行数据包的匹配,语法就是 -m module_name, 所以 -m tcp 的意思是使用 tcp 扩展模块的功能 (tcp扩展模块提供了 --dport, --tcp-flags, --sync等功能)
#其实在命令中只用 -p tcp 的话, iptables也会默认的使用 -m tcp 来调用 tcp 模块提供的功能(写在/etc/sysconfig/iptables 文件中的规则必须使用 –m tcp,否则报错)。
#在使用 –m 其它模块时,命令行和配置文件都要写。
#-m state --state <状态> 有数种状态,状态有:
#NVALID:无效的封包,例如数据破损的封包状态,通常这些包被DROP;
#STABLISHED:已经联机成功的联机状态;
#NEW:想要新建立联机的封包状态,允许已建立的连接接收数据,iptables -A INPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT
#RELATED:这个最常用!表示这个封包是与我们主机发送出去的封包有关, 可能是响应封包或者是联机成功之后的传送封包!这个状态很常被设定,因为设定了他之后,
#要未来由本机发送出去的封包,即使我们没有设定封包的 INPUT 规则,该有关的封包还是可以进入我们主机,相反也可,可以简化相当多的设定规则。
[root@centos-test ~]# iptables -L –n
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
#可以看出我在安装linux时,选择了有防火墙,允许所有的进站和出站规则,并且有一些默认的规则。
#查看管理命令 “-L”的附加子命令:
#-n:以数字的方式显示ip,它会将ip直接显示出来,如果不加-n,则会将ip反向解析成主机名。
#-v:显示详细信息
#-vvv :越多越详细
#-x:在计数器上显示精确值,不做单位换算
iptables -L –n –line-number
#—line-number 参数表示在规则前显示行号。
pkts
#被本机报文所匹配的个数
bytes
#报文所有大小记起来之和
target
#处理机制
prot
#放行哪种协议
opt
#额外的选项,-- 表示没有
source
#源地址
destination
#目标地址
target处理机制规则如下:
DROP
#丢弃
REJECT
#拒绝
ACCEPT
#接受
RETURN
#返回主链继续匹配
REDIRECT
#端口重定向
MASQUERADE
#地址伪装
DNAT
#目标地址转换
SNAT
#源地址转换
MARK
#打标签
#如果你在安装linux时没有选择启动防火墙,如下,什么规则都没有
[root@tp ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
(2)清除原有规则.
如果你想配置属于自己的防火墙,那就清除现在filter的所有规则.
[root@tp ~]# iptables –F 清除预设表filter中的所有规则链的规则
警告:这只适合在没有配置防火墙的环境中,如果已经配置过默认规则为deny的环境,此步骤将使系统的所有网络访问中断,
如果想在配置了iptables默认规则为DROP的环境中清空的话,必须首先执行
1)/sbin/iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
然后执行
2)/sbin/iptables -F
通过iptables -L 看到如下信息
Chain INPUT (policy DROP 0 packets, 0 bytes) (注意 是DROP)
因为默认INPUT链规则如果是DROP的,此时执行/sbin/iptables -F 你的ssh远程连接立马断开所有的连接。此时只能去现场接屏幕或ILO了。
[root@tp ~]# iptables –X 清除预设表filter中使用者自定链中的规则
[root@tp ~]# iptables –Z 清空计数器
我们在来看一下
[root@tp ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
什么都没有了吧,和我们在安装linux时没有启动防火墙是一样的.(提前说一句,这些配置就像用命令配置IP一样,重起就会失去作用),怎么保存.
[root@tp ~]# service iptables save
这样就可以写到/etc/sysconfig/iptables文件里了.写入后记得把防火墙重起一下,才能起作用.
[root@tp ~]# service iptables restart
现在IPTABLES配置表里什么配置都没有了,那我们开始我们的配置吧
(3)设定预设规则
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
#提前开放22端口,如果你是远程SSH登陆不使用该命令,当你输入下面第一条命令回车时ssh登录就应该掉了,因为你没有设置任何规则,断开后只能通过服务器本机进行操作了。
[root@tp ~]# iptables -P INPUT DROP
[root@tp ~]# iptables -P OUTPUT ACCEPT
[root@tp ~]# iptables -P FORWARD DROP
上面的意思是,当超出了IPTABLES里filter表里的两个链规则(INPUT,FORWARD)时,不在这两个规则里的数据包怎么处理呢,那就是DROP(放弃).应该说这样配置是很安全的.我们要控制流入数据包
而对于OUTPUT链,也就是流出的包我们不用做太多限制,而是采取ACCEPT,也就是说,不在着个规则里的包怎么办呢,那就是通过.
可以看出INPUT,FORWARD两个链采用的是不允许什么包通过,而OUTPUT链采用的是允许什么包通过.
这样设置还是挺合理的,当然你也可以三个链都DROP,但这样做我认为是没有必要的,而且要写的规则就会增加.但如果你只想要有限的几个规则是,如只做WEB服务器.还是推荐三个链都是DROP.
(4)添加规则.
iptables命令书写格式及参数
Iptables [-t/table] COMMAND chain CRETIRIA -j ACTION
-i:入站接口,只能用-i指定进来的网络接口。
-o:出站接口,只能用-o指定出去的网络接口。
为了能采用远程SSH登陆,我们要开启22端口.
[root@tp ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
[root@tp ~]# iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT (如果是OUTPUT DROP)
(注:这个规则,如果你把OUTPUT 设置成DROP的就要写上这一条,好多人都是忘了写这一部规则导致,始终无法SSH.在远程一下,是不是好了.其他的端口也一样,
如果开启了web服务器,OUTPUT设置成DROP的话,同样也要添加一条链,其他同理.)
允许用户与服务器建立连接(不常用)
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#该规则表示允许进入的数据包只能是刚刚我发出去的数据包的回应
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#该规则表示发出去的数据包只能是刚刚进入数据包的回应,如下方法也可连接ssh。
[root@centos-test ~]# iptables -nL
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
Chain FORWARD (policy DROP)
target prot opt source destination
Chain OUTPUT (policy DROP)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
如果做了WEB服务器,开启80端口.
[root@tp ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
[root@tp ~]# iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT (如果是OUTPUT DROP)
如果做了邮件服务器,开启25,110端口.
[root@tp ~]# iptables -A INPUT -p tcp --dport 110 -j ACCEPT
[root@tp ~]# iptables -A INPUT -p tcp --dport 25 -j ACCEPT
如果做了FTP服务器,开启21端口
[root@tp ~]# iptables -A INPUT -p tcp --dport 21 -j ACCEPT
[root@tp ~]# iptables -A INPUT -p tcp --dport 20 -j ACCEPT
如果做了DNS服务器,开启53端口
[root@tp ~]# iptables -A INPUT -p tcp --dport 53 -j ACCEPT
允许icmp包通过,也就是允许ping
[root@tp ~]# iptables -A INPUT -p icmp -j ACCEPT
[root@tp ~]# iptables -A OUTPUT -p icmp -j ACCEPT (如果是OUTPUT DROP)
允许loopback!(不然会导致DNS无法正常关闭等问题,同时也允许本地ping)
IPTABLES -A INPUT -i lo -p all -j ACCEPT
IPTABLES -A OUTPUT -o lo -p all -j ACCEPT (如果是OUTPUT DROP)
减少不安全的端口连接
iptables -A OUTPUT -p tcp --sport 27444 -j DROP
iptables -A OUTPUT -p tcp --sport 27665 -j DROP
iptables -A OUTPUT -p tcp --sport 31337 -j DROP
有些些特洛伊木马会扫描端口31337到31340(即黑客语言中的 elite 端口)上的服务。既然合法服务都不使用这些非标准端口来通信,
阻塞这些端口能够有效地减少你的网络上可能被感染的机器和它们的远程主服务器进行独立通信的机会,还有其他端口也一样,
像:31335、27444、27665、20034 NetBus、9704、137-139(smb),2049(NFS)端口也应被禁止,我在这写的也不全,有兴趣的朋友应该去查一下相关资料.
只允许192.168.0.3的机器进行SSH连接
[root@tp ~]# iptables -A INPUT -s 192.168.0.3 -p tcp --dport 22 -j ACCEPT
[root@tp ~]# iptables -A OUTPUT -d 192.168.0.3 -p tcp --sport 22 -j ACCEPT (如果是OUTPUT DROP)
如果要允许,或限制一段IP地址可用 192.168.0.0/24 表示192.168.0.1-255端的所有IP,24表示子网掩码数,但要记得把 /etc/sysconfig/iptables 里的这一行删了.
!192.168.0.3 表示除了 192.168.0.3 的ip地址。
封IP段即从123.45.6.1到123.45.6.254,说明:注意一定要把拒绝的放在前面不然就不起作用了!
iptables -I INPUT -s 123.45.6.0/24 -j DROP
屏蔽某IP访问1-1024范围的端口(如果是多个不连续的端口用逗号’,’进行分割)
iptables -I INPUT -s 123.45.6.7 -p tcp --dport 1:1024 -j DROP
保存操作
[root@tp ~]# service iptables save
[root@tp ~]# service iptables restart
7、linux防火墙的使用(iptables)的更多相关文章
- LINUX防火墙firewall、iptables
(1) 重启后永久性生效: 开启: systemctl enable iptables.service'.ln -s '/usr/lib/systemd/system/iptables.service ...
- Linux防火墙firewall和iptables的使用
防火墙是整个数据包进入主机前的第一道关卡. Linux中有两种防火墙软件,ConterOS 7.0以上使用的是 firewall,ConterOS 7.0以下使用的是 iptables,本文将分别介绍 ...
- Linux防火墙简介及iptables的基本使用
一.防火墙基础知识 iptables/netfilter:网络防火墙,连接追踪(状态检测) netfilter:工作内核中,让规则能够生效的网络框架(framework) iptables:防火墙规则 ...
- Linux 防火墙:Netfilter iptables
一.Netfilter 简介 (1) Netfilter 是 Linux 内置的一种防火墙机制,我们一般也称之为数据包过滤机制,而 iptables 只是操作 netfilter 的一个命令行工具(2 ...
- Linux 防火墙 开放 端口 iptables
查看状态:iptables -L -n 方法1.使用iptables开放如下端口/sbin/iptables -I INPUT -p tcp --dport 8000 -j ACCEPT保存/etc/ ...
- linux 防火墙 iptables 目录
linux iptables 防火墙简介 Linux 防火墙:Netfilter iptables 自动化部署iptables防火墙脚本
- linux 防火墙基本使用
写在最前面 由于工作后,使用的Linux就是centos7 所以,本文记录是是centos7的防火墙使用. 从 centos7 开始,系统使用 firewall 进行防火墙的默认管理工具. 基本使用 ...
- Linux防火墙配置(iptables, firewalld)
netfilter和底层实现 iptables firealld Linux中的防火墙 RHEL中有几种防火墙共存: iptables firewalld ip6tables ebtables 这些软 ...
- Linux 防火墙开放特定端口 (iptables)
iptables是linux下的防火墙,同时也是服务名称. service iptables status 查看防火墙状态 service iptables start ...
随机推荐
- 【转载】fedora22和win10之间的文件共享互访
fedora22和win10之间的文件共享互访 钢铁侠与孔子 关注 2016.06.04 14:10* 字数 1327 阅读 2170评论 0喜欢 1 一,相关知识了解(本文执行环境为fedora22 ...
- docker部署harbor私有镜像库(3)
一.harbor介绍 在实际生产运维中,往往需要把镜像发布到几十.上百台或更多的节点上.这时单台Docker主机上镜像已无法满足,项目越来越多,镜像就越来越多,都放到一台Docker主机上是不行的,我 ...
- 服务器RAID配置
一.RAID介绍RAID是Redundent Array of Inexpensive Disks的缩写,直译为"廉价冗余磁盘阵列",也简称为"磁盘阵列".后来 ...
- 【分布式】-- 基于Nacos、OpenFeign搭建的微服务抽奖系统后台小案例
1.项目介绍 最近入项目之前要求熟悉一下SpringCloud Nacos微服务基于Feign接口调用并整合Swagger2进行接口文档展示给前端,所以自己按照要求来编写并整合了一套基于SpringC ...
- Mysql索引的创建与删除
1. 创建索引 1.1 使用Alter创建索引 1 添加主键索引 特点:数据列不允许重复,不能为null,一张表只能有一个主键:Mysql主动将该字段进行排序 ALTER TABLE 表名 ADD P ...
- centos ping命令找不到服务
1 首先 添加dns服务器 vi /etc/resolv.conf 在文件中添加如下两行: nameserver 8.8.8.8 nameserver 8.8.4.4 保存退出,重启服务器.之后再pi ...
- node.js学习(1)全局对象
1 计时器 1)三秒后执行 2) 每隔2秒执行一次 3)清除计时器 2 全局对象 1)当前文件所在目录 2)当前文件路径
- MLIR中间表示和编译器框架
MLIR中间表示和编译器框架 TensorFlow生态系统包含许多在软件和硬件堆栈的多个级别上运行的编译器和优化器.作为TensorFlow的日常用户,使用不同类型的硬件(GPU,TPU,移动设备)时 ...
- 2.5D Visual Sound:CVPR2019论文解析
2.5D Visual Sound:CVPR2019论文解析 论文链接: http://openaccess.thecvf.com/content_CVPR_2019/papers/Gao_2.5D_ ...
- 多尺度目标检测 Multiscale Object Detection
多尺度目标检测 Multiscale Object Detection 我们在输入图像的每个像素上生成多个锚框.这些定位框用于对输入图像的不同区域进行采样.但是,如果锚定框是以图像的每个像素为中心生成 ...