您当前的位置:网站首页>碎碎语>linux防火墙iptables的详细介绍和配置方法

linux防火墙iptables的详细介绍和配置方法

2023年02月02日 投稿作者:admin 围观人数:401
linux防火墙iptables的详细介绍和配置方法

1.1 iptables防火墙简介

Netfilter/Iptables(以下简称Iptables)是unix/linux自带的一款优秀且开放源代码的安全自由的**基于包过滤的防火墙工具**,它的功能十分强大,使用非常灵活,可以对流入和流出服务器的数据包进行很精细的控制。特别是它可以在一台非常低的硬件配置下跑的非常好

Iptables是Linux2.4及2.6内核中集成的服务。其功能与安全性比其**ipfwadm,ipchains**强大的多,iptables主要工作在OSI七层的二、三、四层,如果重新编译内核,iptables也可以支持**7层控制**(squid代理+iptables)

1.2 iptables 名词和术语

容器:包含和被包含的关系

iptables是表的容器

iptables包含表 (4张表)表是链的容器,每个表都包含若干个链

链是规则的容器,真正过滤规则是属于链里面的

级别介绍

iptables 国家表 省链 市规则 县

1.3 iptables工作流程

iptables是采用数据包过滤机制工作的,所以它会对请求的数据包的包头数据进行分析,并根据我们预先设定的规则来进行匹配是否可以进入到主机。

linux防火墙iptables的详细介绍和配置方法 [db:标签] 碎碎语  第1张

iptables工作流程小结

  • 防火墙是一层层过滤的。实际是按照配置规则的顺序从上到下,从前到后进行过滤的。

  • 如果匹配上规则,即明确表是阻止还是通过,此时数据包就不在向下匹配新规则了。

  • 如果所有规则中没有明确是阻止还是通过这个数据包,也就是么有匹配上新规则,向下进行匹配,直到匹配默认规则得到明确的组织还是通过

  • 防火墙的默认规则是对应链的所有规则执行完才会执行的。

1.4 iptables表(tables)和链(chains)

iptables根据功能和表的定义划分包含三个表,filter,nat,mangle,其每个表又包含不同的操作链(Chains)

linux防火墙iptables的详细介绍和配置方法 [db:标签] 碎碎语  第2张

linux防火墙iptables的详细介绍和配置方法 [db:标签] 碎碎语  第3张

Filter表 是真正的防火墙功能

INPUT 进服务器 OUTPUT出服务器 FORWARD 流经服务器

Nat 表 负责数据包改写 网关共享上网、IP和端口映射

OUTPUT

PREROUTING

POSTROUTING

Mangle表 路由标记 用的不多

####所有链全有

RAW 表 用处很少和Mangle一样

我们可以通过man iptables 来获取

1.5 表介绍

linux防火墙iptables的详细介绍和配置方法 [db:标签] 碎碎语  第4张

对于filter表的控制是我们实现本机防火墙的重要手段,特别是对INPUT链的控制

linux防火墙iptables的详细介绍和配置方法 [db:标签] 碎碎语  第5张

linux防火墙iptables的详细介绍和配置方法 [db:标签] 碎碎语  第6张

linux防火墙iptables的详细介绍和配置方法 [db:标签] 碎碎语  第7张

linux防火墙iptables的详细介绍和配置方法 [db:标签] 碎碎语  第8张

1.6 iptables表和链工作流程图

linux防火墙iptables的详细介绍和配置方法 [db:标签] 碎碎语  第9张

linux防火墙iptables的详细介绍和配置方法 [db:标签] 碎碎语  第10张

提示: iptables主要由2个作用,第一是防火墙,第二是路由。

NAT功能:

企业案例:1)局域网上网共享(路由和网关)NAT POSTROUTING

     2)外部IP和端口映射为内部IP和端口(DMZ功能),NAT PREROUTING

Filter功能:

即防火墙FILTER INPUT FORWARD

企业案例:主要应用于服务器防火墙

2.1 配置iptables

iptables默认已经安装[root@web02~]#iptables-Viptablesv1.4.7[root@web02~]#rpm-qaiptablesiptables-1.4.7-16.el6.x86_64[root@web02~]#/etc/init.d/iptablesstatusiptables:Firewallisnotrunning.

查看iptables规则

[root@web02~]#iptables-nLChainINPUT(policyACCEPT)

表示针对input链 ACCEPT是默认规则,默认是运行通过的

targetprotoptsourcedestinationinput链下面具体的规则ACCEPTall--0.0.0.0/00.0.0.0/0stateRELATED,ESTABLISHEDACCEPTicmp--0.0.0.0/00.0.0.0/0ACCEPTall--0.0.0.0/00.0.0.0/0ACCEPTtcp--0.0.0.0/00.0.0.0/0stateNEWtcpdpt:22REJECTall--0.0.0.0/00.0.0.0/0reject-withicmp-host-prohibitedChainFORWARD(policyACCEPT)targetprotoptsourcedestinationREJECTall--0.0.0.0/00.0.0.0/0reject-withicmp-host-prohibitedChainOUTPUT(policyACCEPT)targetprotoptsourcedestination

如果没有指定表,默认就是filfer表

iptables默认加载的内核模块[root@web02~]#lsmod|egrep"nat|filter|ipt"ipt_REJECT23512iptable_filter27931ip_tables178311iptable_filter

加载如下模块到linux内核

modprobeip_tablesmodprobeiptable_filtermodprobeiptable_natmodprobeip_conntrack连接跟踪modprobeip_conntrack_ftp连接跟踪modprobeip_nat_ftpmodprobeipt_state

再次过滤,查看生效情况

[root@web02~]#lsmod|egrep"nat|filter|ipt"nf_nat_ftp34430nf_conntrack_ftp119531nf_nat_ftpiptable_nat59230nf_nat226762nf_nat_ftp,iptable_natipt_REJECT23512nf_conntrack_ipv491545iptable_nat,nf_natnf_conntrack792066nf_nat_ftp,nf_conntrack_ftp,iptable_nat,nf_nat,nf_conntrack_ipv4,xt_stateiptable_filter27931ip_tables178312iptable_nat,iptable_filter

清空所有的规则,只留下默认规则

[root@web02~]#iptables-F[root@web02~]#iptables-X[root@web02~]#iptables-Z

iptables -F 清除所有规则

iptables -X 删除用户自定义规则

iptables -Z 链的计数器清零

2.2 禁止规则

查看端口

[root@web02~]#netstat-lntup|grepsshtcp000.0.0.0:220.0.0.0:*LISTEN1329/sshdtcp00:::22:::*LISTEN1329/sshd

命令如下:

iptables-tfilter-AINPUT-ptcp--dport22-jDROP

-A 添加规则到指定链的结尾,最后一条

-I 添加规则到指定链的开头,第一条

-t 指定表,也可以不指定默认是filter

-p 指定协议(all.tcp,udp.icmp)默认all

--dport 指定端口

-j 处理的行为

ACCPET接收、DROP丢弃、REJECT拒绝

最好使用ACCPET和DROP,因为拒绝会返回给用户信息。

linux防火墙iptables的详细介绍和配置方法 [db:标签] 碎碎语  第11张

清除规则可以使用iptables -F

还可以使用iptables -D INPUT 1

-D指定删除的链

--line-number 显示序列号

iptables -nl --line-number

linux防火墙iptables的详细介绍和配置方法 [db:标签] 碎碎语  第12张

提示:需要写上链和序列号

温馨提示:恢复刚才断掉的SSH连接

1)去机房重启系统或登录服务器删除刚才的禁止规则

2)让机房人员重启服务器或者让机房人员拿用户密码登录进去

3)通过服务器的远程管理卡管理(推荐)

4)先写一个定时任务,每5分钟就停止防火墙

5)测试环境测试好,写成脚本,批量执行

企业案例

3.1: 加-A和-I的区别

[root@web02~]#iptables-AINPUT-ptcp--dport80-jDROP[root@web02~]#iptables-IINPUT-ptcp--dport80-jACCEPT

按照iptables匹配规则,首先会先匹配第一行,依次向下。这样设置拒绝就没有用

如果想在中间插入可以指定插入行号

[root@web02~]#iptables-nLChainINPUT(policyACCEPT)targetprotoptsourcedestinationACCEPTtcp--0.0.0.0/00.0.0.0/0tcpdpt:80DROPtcp--0.0.0.0/00.0.0.0/0tcpdpt:80ChainFORWARD(policyACCEPT)targetprotoptsourcedestinationChainOUTPUT(policyACCEPT)targetprotoptsourcedestination

还可以通过序列号插入iptables 命令

[root@web02~]#iptables-IINPUT2-ptcp--dport80-jACCEPT[root@web02~]#iptables-nL--line-numberChainINPUT(policyACCEPT)numtargetprotoptsourcedestination1ACCEPTtcp--0.0.0.0/00.0.0.0/0tcpdpt:802ACCEPTtcp--0.0.0.0/00.0.0.0/0tcpdpt:803DROPtcp--0.0.0.0/00.0.0.0/0tcpdpt:80ChainFORWARD(policyACCEPT)numtargetprotoptsourcedestinationChainOUTPUT(policyACCEPT)numtargetprotoptsourcedestination

小结:总结下删除规则的方法

1. iptables -D INPUT -p tcp --dport 8080 -j DROP

2. iptables -F 删所有规则

3. /etc/init.d/iptables restart (用iptables命令行配置的命令都是临时生效)

4. iptables -D INPUT 规则序号

3.2:禁止10.0.0.0网段接入

基于客户端网段控制

[root@web02~]#iptables-AINPUT-s10.0.0.0/24-jDROP

-s指定源地址

还可以使用不是这个网段的进行操作

[root@web02~]#iptables-AINPUT!-s10.0.0.0/24-jDROP

案例:控制22端口 eth0网卡进来的数据

iptables-AINPUT-ptcp--dport22-ieth0!-s10.0.0.0/24-jDROPiptables-AINPUT-ptcp--dport22-ieth0!-s192.168.1.1-jDROP

封掉3306端口

iptables-AINPUT-ptcp--dport3306-jDROP

匹配指定的协议

iptables-AINPUT-ptcpiptables-AINPUT-pudp

匹配指定协议外的所有协议

iptables-AINPUT!-ptcp

``匹配单一端口**

iptables-AINPUT-ptcp--sport22源端口iptables-AINPUT-pudp--dport22目的端口

匹配端口范围:

iptables-AINPUT-ptcp--sport22:80iptables-AINPUT-ptcp--dport21,22,23-jDROP---->错误语法iptables-IINPUT-ptcp-mmultiport--dport22,23,24,25-jDROPiptables-IINPUT-ptcp-mmultiport!--dport22,23,24,25-jDROPiptables-IINPUT-ptcp--dport3306:8809-jACCEPTiptables-IINPUT-ptcp--dport18:80-jDROP/etc/sysconfig/iptables

推荐使用第一种方式

测试:我通过其他服务器扫描我们配置的防火墙

使用nmap工具进行分析,此工具需要安装

[root@web02~]#yum-yinstallnmap

使用如下:更多可以使用nmap --help

[root@web02~]#nmap10.0.0.8-p1-65535StartingNmap5.51(http://nmap.org)at2016-08-1504:28CSTNmapscanreportfor10.0.0.8Hostisup(0.0000070slatency).Notshown:65532closedportsPORTSTATESERVICE22/tcpopenssh80/tcpopenhttp3306/tcpopenmysqlNmapdone:1IPaddress(1hostup)scannedin14.21seconds

生产维护

(1)确定的规则;

编辑/etc/sysconfig/iptables

加入想要的规则:例如

-AINPUT-ptcp-mtcp--dport873-jACCEPT/etc/init.d/iptablesreload

或者改配置的同时命令在执行,也是永久生效。

(2)命令试错,没问题了,然后放配置文件,这时不需要重启了

恶意IP封杀

封IP,在第一行封。10.0.0.1 这个机器攻击我们服务器或者在BBS里发垃圾帖子

手工封IP:

iptables-IINPUT-s10.0.0.1-jDROP#粗,范围大,外部攻击者Iptables-IINPUT-s10.0.0.1-jDROPiptables-IINPUT-ptcp-s10.0.0.1--dport80-jDROP#细,范围小。内部

自动封IP:分析Web或应用日志或者网络连接状态封掉垃圾IP

脚本:

#!/bin/bash#thisisaserverfirewallcreatedbyoldboy17:032006-7-26#e_mail:31333741@qq.com#qqinfo:49000448#function:aserverfirewall#version:1.1#################################################oldboytrainninginfo.#QQ198678735070271111#site:http://www.etiantian.org#blog:http://oldboy.blog.51cto.com#oldboytrainningQQgroup:20816098745039636#################################################definevariablePATHIPT=/sbin/iptables#Removeanyexistingrules$IPT-F$IPT-X$IPT-Z#settingdefaultfirewallpolicy$IPT--policyOUTPUTACCEPT$IPT--policyFORWARDDROP$IPT-PINPUTDROP#settingforloopbackinterface$IPT-AINPUT-ilo-jACCEPT$IPT-AOUTPUT-olo-jACCEPT#settingaccessrules#one,ipaccessrules,allowalltheipsof$IPT-AINPUT-s10.0.10.0/24-pall-jACCEPT$IPT-AINPUT-s10.0.0.0/24-pall-jACCEPT##下面的是重复的,作为知识点保留,单个服务的配置#second,portaccessrules#nagios$IPT-AINPUT-s10.0.10.0/24-ptcp--dport5666-jACCEPT$IPT-AINPUT-s10.0.0.0/24-ptcp--dport5666-jACCEPT#db$IPT-AINPUT-s10.0.0.0/24-ptcp--dport3306-jACCEPT$IPT-AINPUT-s10.0.0.0/24-ptcp--dport3307-jACCEPT$IPT-AINPUT-s10.0.10.0/24-ptcp--dport3306-jACCEPT$IPT-AINPUT-s10.0.10.0/24-ptcp--dport3307-jACCEPT#sshdifferencefromotherservershere.>>$IPT-AINPUT-s10.0.0.0/24-ptcp--dport52113-jACCEPT$IPT-AINPUT-s10.0.10.0/24-ptcp--dport52113-jACCEPT$IPT-AINPUT-ptcp--dport22-jACCEPT#http$IPT-AINPUT-ptcp--dport80-jACCEPT#snmp$IPT-AINPUT-s10.0.0.0/24-pUDP--dport161-jACCEPT$IPT-AINPUT-s10.0.10.0/24-pUDP--dport161-jACCEPT#rsync$IPT-AINPUT-s10.0.0.0/24-ptcp-mtcp--dport873-jACCEPT$IPT-AINPUT-s10.0.10.0/24-ptcp-mtcp--dport873-jACCEPT#icmp#$IPT-AINPUT-picmp-micmp--icmp-typeany-jACCEPT#othersRELATED$IPT-AINPUT-mstate--stateESTABLISHED,RELATED-jACCEPT$IPT-AOUTPUT-mstate--stateESTABLISHED,RELATED-jACCEPT

企业案例:写一个脚本解决DOS攻击生产案例

提示:根据web日志或者或者网络连接数,监控当某个IP并发连接数或者短时内PV达到100,即调用防火墙命令封掉对应的IP,监控频率每隔3分钟。防火墙命令为:iptables -I INPUT -s 10.0.1.10 -j DROP

本脚本使用测试文件进行编写

[root@db02scripts]#cattest_6.sh#!/bin/sh#[-f/etc/init.d/functions]&&./etc/init.d/functionsIP_file="/server/scripts/ddos.txt"IP_filter_command="iptables-IINPUT-jDROP-s"IP_recover_command="iptables-DINPUT-jDROP-s"functionIP_check(){grep"EST"${IP_file}|awk-F"[|:]+"'{print$6}'|sort|uniq-c|sort-rn-k1>/server/scripts/ip.txt}functionIP_filter(){exec>/server/scripts/ip_filtered.txtaction"Filter${IP}"/bin/truefidone}functionIP_recover(){exec>/server/scripts/ip_filtered.txtaction"Recover${IP}"/bin/truefidone}functionmain(){case"$1"infilter)IP_checkecho"$(date+%F-%H:%M:%S)filteredby$(whoami)">>/server/scripts/ip_filtered.txtIP_filter;;recover)IP_checkecho"$(date+%F-%H:%M:%S)recoveredby$(whoami)">>/server/scripts/ip_filtered.txtIP_recover;;*)echo"USAGE:$0{filter|recover}"exit1esac}main$*

生产环境iptables脚本讲解

技巧:具备外网IP的服务器不对外的服务最好要做源地址限制。对外提供的服务,不能做源地址限制,例如:80 端口

问题:企业硬件防火墙和IPTABLES防火墙是否要同时用。

解决:可以同时使用企业硬件防火墙一般放在网关位置,相当于大厦的保安,但是楼里的每个屋子还是需要有人锁门的iptables

问题: IDC机房部署了硬件防火墙,我们的服务器可以不开防火墙吗?

解答:绝对不可以,大厦有了保安,你的办公室门就不锁了吗?

NAT表设置

linux防火墙iptables的详细介绍和配置方法 [db:标签] 碎碎语  第13张

共享上网设置

linux网关B:

局域网共享的两条命令方法:

方法1:适合于有固定外网地址的:

iptables-tnat-APOSTROUTING-s192.168.1.0/24-oeth0-jSNAT--to-source10.0.0.7

(1)-s192.168.1.0/24 办公室或IDC内网网段。

(2)-oeth0 为网关的外网卡接口。

(3)-jSNAT --to-source 10.0.0.7 是网关外网卡IP地址。

方法2:适合变化外网地址(ADSL):

iptables-tnat-APOSTROUTING-s192.168.1.0/24-jMASQUERADE#伪装。

配置如下

第一步:外网服务器配置

[root@lb01~]#iptables-tnat-APOSTROUTING-s172.16.1.0/24-jSNAT--to-source10.0.0.5[root@lb01~]#iptables-tnat-L-n

开启内核转发

net.ipv4.ip_forward=1vim/etc/sysctl.confsysctl-p#生效

需要上网服务器设置

添加路由

routeadddefaultgw172.16.1.5#此处写提供外网的IP地址vim/etc/resolv.conf

添加 nameserver 223.5.5.5

linux防火墙iptables的详细介绍和配置方法 [db:标签] 碎碎语  第14张

route -n 检查

案例2:实现把访问10.0.0.5:80的请求转到172.16.1.8:80

[root@web02~]#iptables-tnat-APREROUTING-d10.0.0.5-ptcp--dport80-jDNAT--to-destination172.16.1.8:80[root@web02~]#iptables-PFORWARDDROP

linux防火墙iptables的详细介绍和配置方法 [db:标签] 碎碎语  第15张

iptables常用企业案例:

1、Linux主机防火墙(表:FILTER 控制链:INPUT)

2、局域网机器共享上网(表:NAT 控制链:POSTROUTING)

iptables-tnat-APOSTROUTING-s192.168.1.0/24-oeth0-jSNAT--to-source10.0.0.7

3、外部地址和端口,映射为内部地址和端口(表:NAT 控制的链:PREROUTING)

iptables-tnat-APREROUTING-d10.0.0.7-ptcp--dport80-jDNAT--to-destination192.168.1.8:9000

企业案例:实现外部IP 124.42.34.112 一对一映射到内部server 10.0.0.8

网关Ip:eth0:124.42.60.109 eth1:10.0.0.254

首先在路由网关上绑定VIP 124.42.34.112,可以是别名或辅助IP的方式。

-APOSTROUTING-s10.0.0.0/255.255.240.0-d124.42.34.112-jSNAT--to-source10.0.0.254-APREROUTING-d124.42.34.112-jDNAT--to-destination10.0.0.8-APOSTROUTING-s10.0.0.8-oeth0-jSNAT--to-source124.42.34.112

linux防火墙iptables的详细介绍和配置方法 [db:标签] 碎碎语  第16张

iptables 生产应用场景

1)局域网共享上网(适合做企业内部局域网上网网关,以及IDC机房内网的上网网关[nat POSTROUTING])

2)服务器防火墙功能(适合IDC机房具有外网IP的服务器)(主要是filter INPUT的控制)

3)把外部IP及端口映射到局域网内部(可以一对一IP映射,也可以针对某一个端口映射)也可能是IDC把网站的外网VIP及网站端口映射到负载均衡器上(硬件防火墙)。(nat PREROUTING)

4)办公路由器+网关功能(zebra路由+iptables过滤及NAT+squid正向透明代理)80+ntop/iftop/iptraf流量查看+tc/cbq流量控制限速

5)邮件的网关

iptables防火墙的应用

1)主机防火墙

2)网关的应用(IP映射,端口映射)

3)过滤信息,监控限制流量及员工上网行为(squid(正向代理缓存加过滤)+ntop(图形流量监控)+通常(流量限制)+iptraf/iftop(流量查看))

如果IPTABLES的服务器升级内核可以实现类似squid的过滤功能

4)网关装杀毒软件监听9999端口,(网关杀毒)

iptables-APREROUTING-ieth0-d211.167.253.109-ptcp-mtcp--dport25-jDNAT--to-destination192.168.10.6:9025

5)结合zebra配置企业级路由器

映射多个外网IP上网

iptables-tnat-APOSTROUTING-s10.0.0.1/255.255.255.0-oeth0-jSNAT--to-source124.42.60.11-124.42.60.16iptables-tnat-APOSTROUTING-s172.16.1.0/255.255.255.0-oeth0-jSNAT--to-source124.42.60.103-124.42.60.106#iptables-tnat-Apostrouting-S192.168.1.0/22-oeth0-jSNAT--to-source10.0.0.241-10.0.0.249

问题:

1、2000人被封

2、可用65535端口资源有限

企业案例: ip_conntrack: table full, dropping packet.的错误提示

以下是我的生产环境的某个服务器的配置:

net.ipv4.tcp_fin_timeout=2net.ipv4.tcp_tw_reuse=1net.ipv4.tcp_tw_recycle=1net.ipv4.tcp_syncookies=1net.ipv4.tcp_keepalive_time=600net.ipv4.ip_local_port_range=400065000net.ipv4.tcp_max_syn_backlog=16384net.ipv4.tcp_max_tw_buckets=36000net.ipv4.route.gc_timeout=100net.ipv4.tcp_syn_retries=1net.ipv4.tcp_synack_retries=1#5、dmesg里面显示ip_conntrack:tablefull,droppingpacket.的错误提示.如何解决。#以下参数是对iptables防火墙的优化,防火墙不开会提示,可以忽略不理。c58:net.ipv4.ip_conntrack_max=25000000net.ipv4.netfilter.ip_conntrack_max=25000000net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=180net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait=120net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait=60net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait=120################################################################C64:net.nf_conntrack_max=25000000net.netfilter.nf_conntrack_max=25000000net.netfilter.nf_conntrack_tcp_timeout_established=180net.netfilter.nf_conntrack_tcp_timeout_time_wait=120net.netfilter.nf_conntrack_tcp_timeout_close_wait=60net.netfilter.nf_conntrack_tcp_timeout_fin_wait=120

调整内核参数/etc/sysctl.conf后,需执行/sbin/sysctl -p使得修改生效。

强调:如果并发比较大,或者日PV多的情况下,开启防火墙要注意,很可能导致网站访问缓慢

大并发(并发1万,PV日3000万)要么购买硬件防火墙,要么不开iptables防火墙

iptables 参数简介

-n数字-L列表-F清除所有规则,不会处理默认规则-X删除用户自定义的链-Z链的计数器清零-A添加规则到指定链的结尾,最后一条-I添加规则到指定链的开头,第一条-t指定表,也可以不指定默认是filter-p指定协议(all.tcp,udp.icmp)默认all-P设置默认规则-s指定源地址-d目的地址--dport指定端口-j处理的行为ACCPET接收、DROP丢弃、REJECT拒绝-iinput匹配进入的网卡接口-ooutput匹配出去的网卡接口-mstate--state匹配网络状态

以上linux防火墙iptables的详细介绍和配置方法就是小编为大家收集整理的全部内容了,希望对大家有所帮助。如果您喜欢这篇文章,可以收藏或分享给您的小伙伴们吧!欢迎持续关注我们的后续更新。

标签

linux防火墙iptables的详细介绍和配置方法
版权说明
免责声明:本文文章内容由技术导航发布,但不代表本站的观点和立场,具体内容可自行甄别.