Linux 学习之防火墙配置

1.安装iptables防火墙

yum install iptables

2. 清除已有的iptables规则

iptables -F

iptables -X

iptables -Z

3.显示iptables规则数

iptables -L -n --line-numbers

4. 删除已经添加的iptables规则

iptables -D INPUT 8

5.iptables开机自动启动保存

chkconfig --level 345 iptables on

service iptables save

iptables简介

netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。

iptables基础

规则(rules)其实就是网络管理员预定义的条件,规则一般的定义为“如果数据包头符合这样的条件,就这样处理这个数据包”。规则存储在内核空间的信息包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。配置防火墙的主要工作就是添加、修改和删除这些规则。

iptables和netfilter的关系:

这是第一个要说的地方,Iptables和netfilter的关系是一个很容易让人搞不清的问题。很多的知道iptables却不知道netfilter。其实iptables只是Linux防火墙的管理工具而已,位于/sbin/iptables,真正实现防火墙功能的是netfilter,它是Linux内核中实现包过滤的内部结构。

iptables传输数据包的过程

① 当一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去。 
② 如果数据包就是进入本机的,它就会沿着图向下移动,到达INPUT链,数据包到了INPUT链后,任何进程都会收到它,本机上运行的程序可以发送数据包,这些数据包会经过OUTPUT链,然后到达POSTROUTING链输出。 
③ 如果数据包是要转发出去的,且内核允许转发,数据包就会如图所示向右移动,经过FORWARD链,然后到达POSTROUTING链输出。

iptables的规则表和链:

表(tables)提供特定的功能,iptables内置了4个表,即filter表、nat表、mangle表和raw表,分别用于实现包过滤,网络地址转换、包重构(修改)和数据跟踪处理。

   链(chains)是数据包传播的路径,每一条链其实就是众多规则中的一个检查清单,每一条链中可以有一条或数条规则。当一个数据包到达一个链时,iptables就会从链中第一条规则开始检查,看该数据包是否满足规则所定义的条件。如果满足,系统就会根据该条规则所定义的方法处理该数据包;否则iptables将继续检查下一条规则,如果该数据包不符合链中任一条规则,iptables就会根据该链预先定义的默认策略来处理数据包。
    Iptables采用“表”和“链”的分层结构。在REHL4中是三张表五个链,现在REHL5成了四张表五个链了,不过多出来的那个表用的也不太多,所以基本还是和以前一样。下面罗列一下这四张表和五个链。注意一定要明白这些表和链的关系及作用。

规则表:

1.filter表——三个链:INPUT、FORWARD、OUTPUT
作用:过滤数据包  内核模块:iptables_filter.
2.Nat表——三个链:PREROUTING、POSTROUTING、OUTPUT
作用:用于网络地址转换(IP、端口) 内核模块:iptable_nat
3.Mangle表——五个链:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD
作用:修改数据包的服务类型、TTL、并且可以配置路由实现QOS内核模块:iptable_mangle(别看这个表这么麻烦,咱们设置策略时几乎都不会用到它)
4.Raw表——两个链:OUTPUT、PREROUTING
作用:决定数据包是否被状态跟踪机制处理  内核模块:iptable_raw
(这个是REHL4没有的,不过不用怕,用的不多)

规则链:

1.INPUT——进来的数据包应用此规则链中的策略
2.OUTPUT——外出的数据包应用此规则链中的策略
3.FORWARD——转发数据包时应用此规则链中的策略
4.PREROUTING——对数据包作路由选择前应用此链中的规则
(记住!所有的数据包进来的时侯都先由这个链处理)
5.POSTROUTING——对数据包作路由选择后应用此链中的规则
(所有的数据包出来的时侯都先由这个链处理)

规则表之间的优先顺序:

Raw——mangle——nat——filter
规则链之间的优先顺序(分三种情况):

第一种情况:入站数据流向

从外界到达防火墙的数据包,先被PREROUTING规则链处理(是否修改数据包地址等),之后会进行路由选择(判断该数据包应该发往何处),如果数据包的目标主机是防火墙本机(比如说Internet用户访问防火墙主机中的web服务器的数据包),那么内核将其传给INPUT链进行处理(决定是否允许通过等),通过以后再交给系统上层的应用程序(比如Apache服务器)进行响应。

第二冲情况:转发数据流向
    来自外界的数据包到达防火墙后,首先被PREROUTING规则链处理,之后会进行路由选择,如果数据包的目标地址是其它外部地址(比如局域网用户通过网关访问QQ站点的数据包),则内核将其传递给FORWARD链进行处理(是否转发或拦截),然后再交给POSTROUTING规则链(是否修改数据包的地址等)进行处理。

第三种情况:出站数据流向
    防火墙本机向外部地址发送的数据包(比如在防火墙主机中测试公网DNS服务器时),首先被OUTPUT规则链处理,之后进行路由选择,然后传递给POSTROUTING规则链(是否修改数据包的地址等)进行处理。

防火墙修改示例:

service iptables status可以查看到iptables服务的当前状态
/etc/init.d/iptables stop
/etc/init.d/iptables start

封单个IP的命令
iptables -I INPUT -s 211.1.0.0 -j DROP

封IP段的命令是
iptables -I INPUT -s 211.1.0.0/16 -j DROP
iptables -I INPUT -s 211.2.0.0/16 -j DROP
iptables -I INPUT -s 211.3.0.0/16 -j DROP

封整个段的命令是
iptables -I INPUT -s 211.0.0.0/8 -j DROP

封几个段的命令是
iptables -I INPUT -s 61.37.80.0/24 -j DROP
iptables -I INPUT -s 61.37.81.0/24 -j DROP

服务器启动自运行
有三个方法:
1、把它加到/etc/rc.local中
2、iptables-save >;/etc/sysconfig/iptables可以把你当前的iptables规则放到/etc/sysconfig/iptables中,系统启动iptables时自动执行。
3、service  iptables  save 也可以把你当前的iptables规则放/etc/sysconfig/iptables中,系统启动iptables时自动执行。
后两种更好此,一般iptables服务会在network服务之前启来,更安全

解封:

iptables -L INPUT

iptables -L --line-numbers 然后iptables -D INPUT 序号

----------------------------------------------------

防火墙端口操作

开启端口:

#/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT

#/sbin/iptables -I INPUT -p tcp --dport 22 -j ACCEPT

然后保存:

#/etc/rc.d/init.d/iptables save

关闭端口:

#/sbin/iptables -I INPUT -p tcp --dport 80 -j DROP

#/sbin/iptables -I INPUT -p tcp --dport 22 -j DROP

然后保存:

#/etc/rc.d/init.d/iptables save

-------------------------

 iptables -F /* 清除所有规则 */
 iptables -A INPUT  -p tcp --dport 22 -j ACCEPT /*允许包从22端口进入*/
 iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT /*允许从22端口进入的包返回*/
 iptables -A OUTPUT -p udp --dport 53 -j ACCEPT /* 域名解析端口,一般不开 */
 iptables -A INPUT -p udp --sport 53 -j ACCEPT /* 域名解析端口,一般不开 */
 iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT /*允许本机访问本机*/
 iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
 iptables -A INPUT -p tcp -s 0/0 --dport 80 -j ACCEPT /*允许所有IP访问80端口*/
 iptables -A OUTPUT -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
 iptables-save > /etc/sysconfig/iptables /*保存配置*/
 iptables -L /* 显示iptables列表 */

首先简单介绍一下什么是IPTables:

iptables是Linux内核中内置的防火墙,可以允许管理员通过设置table, chain以及相关的规则来进行数据包过滤和NAT。 一般来讲,iptables防火墙已经内置于CentOS 6及其他Linux版本中,而且iptables服务默认都是启动的。  iptables应用于IPv4, 如果要用IPv6,需要使用ip6tables.

iptables [-t table] command [chain] [rules] [-j target] 

[-t table] :用来指明使用的表, 有三种选项: filter, nat 和 mangle,如果未指定,则使用filter作为缺省表。 事实上,对于单个服务器的防火墙配置,一般来讲,我们只需要对filter表进行配件就OK了。filter表包括 INPUT, OUTPUT,和FORWARD三个chain.

command 表明iptables命名要做什么,比如

-A (–append): 该命令会把一条规则附件到chain的末尾。

-D(–delete)用来删除某个规则。

-F (–flush) 如果指定了chain, 删除该chain中的所有规则,如果未指定chain, 则删除所有chain中的所有规则。

target: 是由规则指定的操作。 包括下面几种:

ACCEPT: 接收信息包(允许它前往目的地),并且将停止遍历chain.

DROP:  拒绝,

此外还有REJECT, RETURN, LOG, REDIRECT, MARK, MIRROR, MAQUERADE等。

具体的iptables的语法和概念就不再多说了,请参照iptables man page 官方文档 .

简单来说,iptables防火墙是由一系列的规则(rule)组成,  一个数据请求进来, 会依次和这些规则进行比较,如果正好符合规则的定义,那这个数据请求要么会被接收ACCEPT,要么被拒绝DRIP。如果不符合任何规则的定义,最后缺省的规则会被应用。

开始操作之前:

    注意:一定要把你在DigitalOcean/ Linode/ 阿里云上的服务器做一下快照备份 , 否则一旦你 iptables的配置出了问题,极有可能把你自己挡在门外,你自己都无法连接到服务器了!! 出现这种情况可是会欲哭无泪呀,除了重新做系统好像没有更好的办法了。( DigitalOcean提供了一个web console的界面,有时候会给你反悔和擦除iptables设置的机会,但阿里云没有)决定哪些端口需要开放,首先, SSH 的端口22自然是需要开放的,否则我们就无法登录服务器了。一般来讲,CentOS的VPS经常作为用LAMP搭建的Web服务器,FTP服务器, Mail服务器等。对于Web服务来说,需要开放80端口,如果是HTTPS/SSL协议的话,还需用开放443端口,对于Mail服务来说,由于涉及SMTP, POP3, IMAP协议,需要开放的端口如下:

SMTP : 25   Secure SMTP:465  POP3: 110   Secure POP3: 995   IMAP: 143   IMAP over SSL: 993

对于FTP服务来说,需要开放 20, 21两个端口

第一步: 屏蔽最常见的攻击

缺省情况下,CentOS的iptables的设置是允许任何数据通过的。

我们首先要清空iptables中的所有的规则:



iptables -F

然后我们加上阻止简单扫描和攻击的规则

1 iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP             #NONE 包(所有标识bit都没有设置)主要是扫描类的数据包
2 iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP     #防止sync-flood 攻击
3 iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP              #ALL包(所有的标注bit都被设置了)也是网络扫描的数据包

第二步: 为相应的服务开放对应的端口

首先我们应该接受本机localhost的任何请求,否则,数据库连接等将无法工作

iptables -A INPUT -i lo -j ACCEPT

对于不同的服务需要开放不同的端口

1 iptables -A INPUT -p tcp --dport 22 -j ACCEPT      # SSH
2 iptables -A INPUT -p tcp --dport 80 -j ACCEPT      # HTTP
3 iptables -A INPUT -p tcp --dport 443 -j ACCEPT     #HTTPS
4 iptables -A INPUT -p tcp --dport 25 -j ACCEPT   #SMTP
5 iptables -A INPUT -p tcp --dport 465  -j ACCEPT #Secure SMTP
6 iptables -A INPUT -p tcp --dport 110 -j ACCEPT   #POP3
7 iptables -A INPUT -p tcp --dport 995 -j ACCEPT   #Secure POP3
8 iptables -A INPUT -p tcp --dport 143 -j ACCEPT   #IMAP
9 iptables -A INPUT -p tcp --dport 993 -j ACCEPT   #Secure IMAP

第三步: 加上通用的规则

首先要允许所有从服务器端发起的连接,由此返回的响应数据应该是允许的!比如VPS发起的yum update , 必须要允许外部的update数据进来

iptables -I INPUT -m state  --state ESTABLISHED, RELATED -j ACCEPT

最后,设置缺省的策略:屏蔽任何进入的数据请求,允许所有从Server发出的请求

1 iptables -P OUTPUT ACCEPT
2 iptables -P INPUT DROP

第四步: 保存设置

首先通过下面的命令查看一下我们的设置是否正确!

1 ptable -L -n

确认没有问题后,执行下面的命令

1 service iptables save

执行上述命令后,相应的规则会写入 /etc/sysconfig/iptables这个文件,你可以检查一下看看。

最后执行

1 service iptables restart

重新启动iptables防火墙,以使上述设置生效。

最佳的方法

为了更方便的修改和维护自己的iptables的设置,我一般是把所有的iptables的设置先写到一个单独文件中,测试没有问题后。然后再保存到iptable的配置文件中。下面是我自己的iptables文件:~/script/firewall.sh

 1 </pre>
 2 #!/bin/bash
 3 # A simple iptables firewall configuration
 4
 5 PATH=/sbin:/bin:/usr/sbin:/usr/bin; export PATH
 6
 7 #flush/erase original rules
 8 iptables -F #清除所有已制定的rule
 9 iptables -X #清除用户自定义的chain/table
10 iptables -Z #将所有的chain的计数和流量统计归零
11
12 #Accept localhost connetting, no matter what it is
13 iptables -A INPUT -i lo -j ACCEPT
14
15 #Accept any response package which is initiated from inside
16 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
17
18 #block most common network attacks(recon packets and syn-flood attack)
19 iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
20 iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
21 iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
22
23 #open ports for different services
24 iptables -A INPUT -p tcp --dport 22 -j ACCEPT #SSH
25 iptables -A INPUT -p tcp --dport 80 -j ACCEPT #HTTP
26 #iptables -A INPUT -p tcp --dport 443 -j ACCEPT #HTTPS
27 #iptables -A INPUT -p tcp --dport 25 -j ACCEPT #SMTP
28 #iptables -A INPUT -p tcp --dport 465 -j ACCEPT #Secure SMTP
29 #iptables -A INPUT -p tcp --dport 110 -j ACCEPT #POP3
30 #iptables -A INPUT -p tcp --dport 995 -j ACCEPT #Secure POP
31
32 #ICMP configuration
33 #To prevent ICMP DDOS,we do not allow ICMP type 8(echo-request) or limit this request with 1/second
34 #some ICMP requests are allowed.
35 icmp_type="0 3 4 11 12 14 16 18"
36 for ticmp in $icmp_type
37 do
38     iptables -A INPUT -p icmp --icmp-type $ticmp -j ACCEPT
39 done
40 #iptables -A INPUT -p icmp --icmp-type 8 -m limit --limit 1/second -j ACCEPT
41
42 #default policies
43 iptables -P OUTPUT ACCEPT
44 iptables -P INPUT DROP
45
46 #save to /etc/sysconfig/iptables
47 /etc/init.d/iptables save
时间: 2024-11-08 22:45:44

Linux 学习之防火墙配置的相关文章

Linux服务器 iptables 防火墙配置详解

导读: 很好的一篇关于Linux防火墙 iptables配置, linux防火墙配置很关键, 这牵扯到服务器安全, 安全不是绝对的,但是iptables配的好可以杜绝大多数灰色试探. 转载到老吧博客了, 更多iptables配置可以咨询作者. linux iptables 防火墙配置非常重要, 我们来配置一个filter表的防火墙. 查看本机关于IPTABLES的设置情况 [[email protected] ~]# iptables -L -n 如果你在安装linux时没有选择启动防火墙,什么

Linux学习笔记总结--配置iptables防火墙70o

龈瓴 猴快尉 ㄔ确峦 ъ绽 岷豹走哒 健胸 瞳绲衩 蔺冻屠 的惨淡情景了?那些女子一个打水漂的快速眼神就能辩认出你口袋里有几颗铜板了.后来 外尽毁谁都知道离谷六千守军就已经是一只瓮中鳖撤不敢撤战不敢战瓦筑和君子馆 è曼百 ┚黢璎 拙蝶呵≥ 银江经过三场大战后自知斤两桀骜性格早已抹平棱角对老将军的用兵本事心悦诚服 è┧⒀ 焙①猫 稻咽捉 条纂缺 煮演卵缥 ─钣凋 囡曩捭秧 脫釉慰夜問角级腊卵思拦胀碧犯固 "既然如此你严池集跪也跪了你的道理我和陛下其实心里都明白为何

马哥Linux学习之YUM配置

学习到第11天了,系统相关的软件配置使用rpm包或源码配置都会遇到各种依赖问题,YUM就是Red Hat出的软件包管理工具,能有效的自动解决软件包的依赖问题. YUM(Yellowdog Update Modifier):把各种程序依赖关系都集成收集,并在安装软件时自动解决的工具.这个工具是使用C/S架构的,从而分为了服务器端(yum仓库)和客户端.  YUM仓库相关. yum仓库,主要由数据和元数据组成.数据就是各种各样的软件包,而元数据就是包名.版本信息.各包所包含的文件列表.依赖关系.包分

windows文件夹共享给linux使用和防火墙配置

第一步,windows上文件设置共享 高级共享上设置共享名字 在共享上设置,添加用户 第二步,配置windows防火墙 第三步,linux上挂载目录 mount -t cifs -o username="xiaofeng",password="xxx" //172.18.1.156/log /mnt 注意:   log是共享名字 原文地址:https://www.cnblogs.com/xiaofeng0510/p/8669227.html

linux设置-centos7防火墙配置

一.配置防火墙,开启80端口.3306端口 CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙. 1.关闭firewall: systemctl stop firewalld.service #停止firewall systemctl disable firewalld.service #禁止firewall开机启动 2.安装iptables防火墙 yum install iptables-services #安装 vi /etc/sysconfig/ip

Linux学习 ---- 系统网络配置

前言 : 如果一台计算机想接入互联网,必须配置好IP地址,子网掩码,网关,DNS服务器.在Linux系统中,这些信息都可以修改对应的配置文件来进行配置.临时配置一下网络可以使用一些简单的命令来进行配置.例如ifconfig命令. 1.1 ifconfig命令 ifconfig是GNU/Linux中配置网卡的基本命令,包含在net-tools软件包中.主要作用是显示或者设置网卡的配置,如IP地址,子网掩码,最大分组传输树,I/O端口等.还可以启动或者禁用网卡. 在shell终端上输入ifconfi

linux 学习笔记 防火墙设置

1> 重新设置启动防火墙命令 #service iptables restart 2>添加防火墙规则命令 2.1 #service iptables stop 停止防火墙 2.2 #vi /etc/sysconfig/iptables 编辑配置文件 2.3  -A INPVT -P tcp -m tcp --sport 80 -j accept -A INPUT -P tcp -m tcp --dport 80 -j ACCEPT 如果有如下内容则删除 -A RH_Firewall-l-INP

linux学习记录-------网络配置

####默认的配置文件:/etc/sysconfig/network-scriptsifcfg-eno16777736 HWDDR=00:00:00:00:00:00TYPE=EthernetBOOTPROTO=dhcpDEFROUTE=yesPEERDNS=yesPEERROUTES=yesIPV4_FAILURE_FATAL=noIPV6INIT=yesIPV6_AUTOCONF=yesIPV6_DEFROUTE=yesIPV6_PEERDNS=yesIPV6_PEERROUTES=yesI

Linux学习篇之---Ubuntu14.04防火墙配置

Ubuntu14.04防火墙配置 1.安装: apt-get install ufw 2.启用: ufw enable ufw default deny 3.开启/禁用: ufw allow 22/tcp   允许所有的外部IP访问本机的22/tcp (ssh)端口 ufw deny 22/tcp     禁止所有外部IP访问本机的22/tcp(ssh)端口 ufw delete deny 22/tcp 删除防火墙中的规则 4.实例: 1)查看本机防火墙状态: 2)启用防火墙: 因为我用的ssh