- Iptables名词和术语 2
- iptables表(tables)和链(chains) 2
- 表及其链的功能 2
Filter表 2
NAT表 2
MANGLE表 2 - iptables的工作流程 3
- iptables表和链的工作流程图 3
二、 iptables实战应用 4 - iptables命令参数详解 4
iptables内核模块 4
清除默认规则 5
禁止规则 5
查看规则 5 - 详解匹配标准 5
通用匹配:源地址目标地址的匹配 5 - 企业生产环境防火墙配置 6
- 生产环境如何维护防火墙 7
- 企业iptables面试题:自定义链处理syn攻击 8
- 部署企业及IDC机房网关 8
服务器网关需具备如下条件 8
加载iptables内核模块 8
局域网的机器: 8
局域网共享的两条命令方法 9
把外部lP地址及端口映射到内部服务器地址及端口 9 - 企业内部局域网生产映射案例 9
一对一ip映射 9
映射多个外网IP上网 9 - 企业案例:dmesg里面显示错误 9
- iptables生产应用场景 9
iptables防火墙
一、iptables防火墙介绍
1.iptables防火墙简介
Netfilter/Iptables(以下简称Iptables)是unix/linux自带的一款优秀且开放源代码的完全自由的基于包过滤的防火墙工具,它的功能十分强大,使用非常灵活,可以对流入和流出服务器的数据包进行很精细的控制。特别是它可以在一台非常低的硬件配置下跑的非常好(本人曾经在赛扬50OHZ cpu 64M内存的情况部署网关防火墙)提供近400人的上网服务丝毫不逊色企业级专业路由器防火墙)。
IPtables是linux2.4及2.6内核中集成的服务。其功能与安全性比其老一辈ipfwadm,ipchains强大的多(长江水后浪推前浪啊),Iptables主要工作在OSI七层的二、三、四层,如果重新编译内核,Iptables也可以支持七层控制(squid代理+iptables)。
2.Iptables名词和术语
l、容器:包含或者说属于的关系:
2、Netfilter/iptables是表的容器,iptables包含的各个表(filter,NAT,MANGLE,RAW)
3、iptables的表又是链的容器。链:INPUT,0UTPUT,FORWARD,PREROUTING,POSTROUTING
4、链是规则容器:
5、规则:一条条过滤的语句
3.iptables表(tables)和链(chains)
下面的表格展示了表和链的对应关系。
表(iptables) 链(chains)
INPUT FORWARD OUTPUT PREROUTING POSTROUTIING
FILTER
NAT
MANGLE
提示:所有链名都要大写
4.表及其链的功能
Filter表
主要和主机自身有关,真正负责主机防火墙功能的(过滤流入流出主机的数据包)。filter表是iptables默认使用的表。这个表定义了三个链(chains):
企业工作场景:主机防火墙。
INPUT:负责过滤所有目标地址是本机地址的数据包。通俗的讲,就是过滤进入主机的数据包
FORWARD:负责转发流经主机的数据包。起转发的作用,和Nat关系很大,后面会详细介绍。Lvs NAT模式。net.ipv4.ip_forward=0
OUTPUT:处理所有源地址是本机地址的数据包,通俗的讲,就是处理从主机发出去的数据包。
强调:对于Filter表的控制是我们实现本机防火墙功能的重要手段,特别是对INPUT链的控制
NAT表
负责网络地址转换,即来源与目的ip地址和port的转换。应用:和主机本身无关。一般用于局域网共享上网或者特殊的端口转换服务相关。
NAT功能一般企业工作场景.
l)用于做企业路由(zebra)或网关(iptables),共享上网(POSTROUTING)
2)做内部外部IP地址一对一映射(dmz),硬件防火墙映射IP到内部服务器,FTP
服务。(PREROUTING),
3)web,单个端口的映射,直接映射80端口(PREROUTING)。
这个表定义了三个链(chains),nat功能就相当于网络的acl控制。和网络交换机acl类似。
INPUT:和主机发出去的数据包有关。改变主机发出数据包的目标地址。
PREROUTING:在数据包到达防火墙时进行路由判断之前执行的规则,作用是改变数据包的目的地址、目的端口等。(通俗比喻,就是收信时,根据规则重写收件人的地址,这看上去很不地道啊!哈哈。)例如:把公网IP;124.42.60.113映射到局域网的10.0.0.19服务器上。如果是web服务,可以把80转为局域网的服务器上9000端口。
POSTROUTING:在数据包离开防火墙时进行路由判断之后执行的规则,作用改变数据包的源地址、源端口等。(通俗比喻,就是寄信时,写好发件人的地址,要让人家回信时能够有地址可回。),例如:我们现在的笔记本和虚拟机都是10.0.0,0/24,就是出网的时候被我们企业路由器把源地址改成了公网地址了。生产应用:局域网共享上网。
MANGLE表
主要负责修改数据包中特殊的路由标记,如TTL,TOS,MAARK等。这个表定义5个链(Chains)。
INPUT、FORWARD、OUTPUT、PREROUTING、POSTROUTING。
由于这个表与特殊标记相关,一般情况下,我们用不到这个mangle表,这里就不做详细介绍了。
5.iptables的工作流程
前面介绍己经提到,iptables是采用数据包过滤机制工作的,所以它会对请求的数据包的包头数据进行分析,并根据我们预先设定的规则进行匹配来决定是否可以进入主机。
数据包的流向是从左向右的
小结:
防火墙是层层过滤的。实际是按照配置规则的顺序从上到下,从前到后进行过滤的。
如果匹配上规则,即明确表明是阻止还是通过,数据包就不在向下匹配新规则了。
如果所有规则中没有明确表明是阻止还是通过,也就是没有匹配规则,向下进行匹配,直到匹配默认规则得到明确的阻止还是通过。
防火墙默认规则是所有的规则执行完才会执行的。
重点:匹配上了拒绝规则也是匹配,例如
[root@mysql ~]# iptables -A INPUT -p tcp --dport 3306 -j DROP
[root@mysql ~]# iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
此时telnet ip address 3306 是不同的,原因就是telnet请求已先匹配上了拒绝规则,因此不会再找下面的规则匹配了。如果希望telnet ip address 3306连通,可以把ACCEPT规则中的-A改为-I,即iptables -I INPUT -p tcp --dport 3306 -j ACCEPT,把允许规则放于INPUT链的第一行生效
6.iptables表和链的工作流程图
下面的这张图清晰的描绘了netfilter对包的处理流程
二、iptables实战应用
1.iptables命令参数详解
iptables内核模块
[root@mysql ~]# /etc/init.d/iptables start #启动防火墙
如果遇到iptables无法启动,可以通过setup–firewall configure–enable
[root@mysql ~]# lsmod|egrep “nat|filter|ipt” #iptables默认加载内核模块
iptable_filter 2793 1
ip_tables 17831 1 iptable_filter
加载如下模块到linux内核
modprobe ip_tables
modprobe iptable_filter
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_state
清除默认规则
[root@mysql ~]# iptables -h #查看帮助
[root@mysql ~]# iptables -F #清除所有规则,不会处理默认的规则。
[root@mysql ~]# iptables -X #删除用户自定义的链。
[root@mysql ~]# iptables -Z #链的记数器清零。
–flush -F [chain] Delete all rules in chain or all chains
–delete-chain -X [chain] Delete a user-defined chain
–zero -Z [chain [rulenum]] Zero counters in chain or all chains
禁止规则
[root@mysql ~]# iptables -t filter -A INPUT -p tcp --dport 22 -j DROP #禁止访问22端口
[root@mysql ~]# iptables -t filter -A INPUT -i eth0 -s 10.0.0.0/24 -j DROP #禁止IP地址段进入eth0网卡的流量
–table -t table table to manipulate (default: `filter’)
–append -A chain Append to chain #添加链,最后一条
–new -N chain Create a new user-defined chain #创建一个新链
–policy -P chain target Change policy on chain to target
–insert -I chain [rulenum] Insert in chain as rulenum (default 1=first) #添加链第一条
–delete -D chain Delete matching rule from chain #删除链
–proto -p proto protocol: by number or name, eg. ‘tcp’
–dport #指定目的端口
–in-interface -i input name[+] network interface name ([+] for wildcard)
–source -s address[/mask][…] source specification
-j, --jump target #对规则进行ACCEPT(接受)、DROP(丢弃)、REJECT(拒绝)
打台球:如果对方告诉你不去,REJECT(拒绝),如果对方没反应,DROP(丢弃),DROP好于REJECT
使用-I和-A的顺序,防火墙的过滤根据规则顺序的
-A是添加规则到指定链的结尾,最后一条。
-I是添加规则到指定链的开头,第一条。此参数经常用来封IP
测试配置拒绝规则也是匹配
下面的测试有两个要点:非的作用,匹配拒绝也是匹配
Centos5.8版本:iptables -t filter -A INPUT -i eth0 -s ! 192.168.80.1 -j DROP
Centos6.4版本:iptables -t filter -A INPUT -i eth0 ! -s 192.168.80.1 -j DROP
查看规则
[root@mysql ~]# iptables -L -n --line-numbers #以数字形式列出防火请规则
–list -L [chain [rulenum]] List the rules in a chain or all chains
–numeric -n numeric output of addresses and ports
–line-numbers print line numbers when listing #可以用此参数显示的序号删除规则
[root@mysql ~]# iptables -t filter -D INPUT 1 #删除第一条规则
2.详解匹配标准
通用匹配:源地址目标地址的匹配
-s:指定作为源地址匹配,这里不能指定主机名称,必须是IP
IP | IP/MASK | 0.0.0.0/0.0.0.0
而且地址可以取反,加一个“!”表示除了哪个IP之外
-d:表示匹配目标地址
-p:用于匹配协议的(这里的协议通常有3种,TCP/UDP/ICMP)
-i eth0:从这块网卡流入的数据
流入一般用在INPUT和PREROUTING上
-o eth0:从这块网卡流出的数据
流出一般在OUTPUT和POSTROUTING上
隐含扩展:对协议的扩展
-p tcp :TCP协议的扩展。一般有三种扩展
–dport XX-XX:指定目标端口,不能指定多个非连续端口,只能指定单个端口,比如
–dport 21 或者 --dport 21-23 (此时表示21,22,23)
–sport:指定源端口
–tcp-fiags:TCP的标志位(SYN,ACK,FIN,PSH,RST,URG)
对于它,一般要跟两个参数:
-p udp:UDP协议的扩展
–dport
–sport
-p icmp:icmp数据报文的扩展
–icmp-type:
echo-request(请求回显),一般用8 来表示
所以 --icmp-type 8 匹配请求回显数据包
echo-reply (响应的数据包)一般用0来表示
显式扩展(-m)
扩展各种模块
-m multiport:表示启用多端口扩展
之后我们就可以启用比如 --dports 21,23,80
iptables -t filter -A INPUT -p icmp --icmp-type 8 ! -s 192.168.80.1 -j DROP #禁止ping
iptables -A INPUT -d 192.168.80.100 -p tcp --dport 80 -j ACCEPT
iptables -t filter -A OUTPUT -s 172.16.100.1 -d 192.168.80.0/24 -p tcp --dport 22 -j ACCEPT
iptables -I INPUT -p tcp ! --dport 22 -s 192.168.80.1 -j DROP
iptables -I INPUT -p tcp -m multiport --dport 21,22,23,24 -j ACCEPT #正确
iptables -I INPUT -p tcp --dport 21:24 -j ACCEPT #正确
iptables -I INPUT -p tcp --dport 21,22,23,24 -j ACCEPT #错误
iptables -A INPUT -p tcp --sport 1024: --dport 1024: -m state –-state ESTABLISHED -j ACCEPT
3.企业生产环境防火墙配置
清除默认规则
iptables -F
iptables -X
iptables -Z
设置允许本地网段ssh登录
iptables -A INPUT -p tcp --dport 52113 -s 192.168.80.0/24 -j ACCEPT
设置允许本机lo通信
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
设置默认的防火墙禁止和允许规则:DROP掉FORWARD、INPUT,允许OUTPUT
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
开启信任的ip网段
#允许IDC LAN/WAN和办公网IP的访问,及对外合作机构访问
iptables -A INPUT -s 124.43.62.95/27 -p all -j ACCEPT #办公室固定IP段
iptables -A INPUT -s 192.168.1.0/24 -p all -j ACCEPT #IDC机房的内网网段
iptables -A INPUT -s 10.0.0.0/27 -p all -j ACCEPT #其他机房的内网网段
iptables -A INPUT -s 203.83.24.0/24 -p all -j ACCEPT #IDC机房的外网网段
iptables -A INPUT -s 201.82.34.0/24 -p all -j ACCEPT #其他IDC机房的外网网段
允许业务服务端口对外访问(80)
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
允许icmp类型协议通过
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT 如果不想开,就不执行此步
iptables -A INPUT -p icmp -s 192.168.80.0/24 -m icmp --icmp-type 8 -j ACCEPT #允许内网ping
允许关联的包通过(ftp协议)
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
使用其他主机扫描此主机的端口
[root@nfs ~]# nmap 192.168.80.105 -p 1-65535
Starting Nmap 5.51 ( http://nmap.org ) at 2016-05-20 20:14 CST
Nmap scan report for mysql.etiantian.org (192.168.80.105)
Host is up (0.00051s latency).
Not shown: 65533 filtered ports
PORT STATE SERVICE
80/tcp closed http
52113/tcp open unknown
MAC Address: 00:0C:29:5D:1D:81 (VMware)
Nmap done: 1 IP address (1 host up) scanned in 118.12 seconds
保存防火墙的配置
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上运维知识点,真正体系化!
加入社区》https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0
725608316211)]
[外链图片转存中…(img-4NObmQMa-1725608316212)]
[外链图片转存中…(img-rw4JGTxR-1725608316213)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上运维知识点,真正体系化!
加入社区》https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0