一、iptables简介
Netfileter/iptables (以下简称iptables)是nuix/linux 系统自带的优秀且完全免费的基于包过滤的防火墙工具、它的功能十分强大、使用非常灵活、可以对流入、流出及流经服务器的数据包进行精细的控制。特别是它可以在一台非常低配置下跑的非常好。提供400台机器的办公上网共享服务丝毫不逊色数万RMB企业级专业路由器防火墙
Iptables 是linux2.4及2.6内核中集成的服务、其功能与安全性比老一辈ipvfwadm、ipchanins强大的多、一般认为iptables工作在OSI七层的、二、三层、四层。
二、iptables专业术语
1、 iptables 名词和术语
不少刚接触到iptables的初学者会被iptables防火墙的相关名词搞的很晕、不知道其所云的具体意思、本章不会像某些书籍一样长篇大论、而是以最基本的能让大家容易理解。
1 什么是容器
容器就是装东西的。如(箱、包、坛、)、容器就是用来包装或转载物品的存寄器、在iptables里的呢、就是用来描述这种包含或者说术语的关系、喜爱按我就来说说这些包含关系
2 什么是Netfileter/iptables
Netfileter是表(tables)的容器,(还不知道啥意思的,请网上看)。这样解释大家肯定还晕、举例、如果吧Netfileter看成某小区的一栋大楼、那么表(tables)就是楼里的其中的一套房子。这套房子表(tables) 就属于这栋楼“Netfileter”。比如、你们家所在的小区所在楼当成netfileter
3 什么是表(tables)
表(tables)是链的容器、及所有的链(chains)都是属于表(tables),如上,如果把Netfileter看成某个小区的一栋楼、那么表(tables)就是楼里的某一套房子、比如你们家住的房子。当然了、表(tables)可能不止一个!
4 什么是链(chains)?
链(chains)是规则(Policys)的容器、链属于表,接上、如果表(tables)当做一套房子、那么链(chains)那么可以说是房子里的家具(桌子、柜子等)。每一套房子都可能会有桌子柜子等、
5 什么是规则(Policy)
规则(policy)就比较容易理解了、柜子(policy)属于链(chains)。就是iptables一系列过滤信息和具体操作方法、可以理解为购买什么家具、并且如何摆放、设计的更符合要求等、
图:
Netfileter/iptables |
表(tables) |
链(chains) |
规则(policy) |
小区的一栋楼 |
楼里的房子 |
房子里的柜子 |
增加、摆放的规则 |
三、iptables工作流程
防火墙是层层过滤的,实际是按照配置规则的顺序从上到下,从前到后
进行过滤的。
2. 如果匹配上规则,即明确表示是阻止还是通过,数据包就不再向下匹配
新的规则。3. 如果规则中没有明确表明是阻止还是通过的,也就是没有匹配规则,向
下进行匹配,直到匹配默认规则得到明确的阻止还是通过。
4. 防火墙的默认规则是所有规则执行完才执行的
四、iptables表和链
1、iptables 的filter表介绍
对于filter表的控制是我们实现本机防火墙功能的重要手段。
Filter表 |
和主机自身相关、负责防火墙(过滤本机流入、流出数据包)。 是iptables默认使用的表、这个表定义了三个链(chains)说明如下 |
|
|
INPUT |
负责过滤所有目标地址是主机(防火墙)地址的数据包、通俗的讲、就是过滤进入主机的数据包。 |
|
FORWARD |
负责转发流经主机但不进入本机的数据包、起转发作用、和NAT表关系很大、后面会详细介绍 |
|
OUTPUT |
处理所有原地址是本机地址的数据包、通俗的讲就是处理从主机发出去的数据包。 |
NAT表 |
是网络地址转换的意思。即负责来源与目的IP地址和port的转换、和主机本身无关。一般用于局域网多人共享上网或者内网IP映射外网IP及不同端口转换服务等功能。Nat表的功能很重要、这个表定义了三个链(chains) |
|
|
OUTPUT |
主机发出去的数据包有关、在数据包路由之前改变主机产生的数据包的目的地址等。 |
|
PREROUTING |
在数据包刚到达防火墙时、进行路由判断之前执行的规则、改变包的目的地址(DNAT功能)、端口等(通俗比喻,就是收信时、根据规则重写收件人的地址、这看上去不地道啊、)把公司IP映射到局域网的机器上、此链多用于把外部IP地址端口的服务、映射为内部IP地址及端口 |
|
POSTROUTING |
在数据包离开防火墙时进行路由判断之后执行的规则、改变包的源地址(SNAT)、端口等(通俗比喻、就是寄信时写好发件人的地址、要让人家回信是能够有地址可回)刺链多用于局域网共享上网,把所有局域网的地址、转换为公网地址上 |
由于这个表与特殊路由标记有关、一般在生产运维工作中、我们很少用到这个mangle表。我们就不做详细介绍了.
Mangle |
主要负责修改数据包中特殊的路由标记,如TTL、TOS、MARK等、这个表定义了5个链(chains) |
|
|
INPUT |
同filter表的INPUT |
|
FORWARD |
同filter表的FORWARD |
|
OUTPUT |
同fileter表的OUTPUT |
|
PREROUTING |
同nat表的PREROUTING |
|
POSTOUTING |
同nat表的POSTOUTING |
五、iptables安装
默认centos7是firewalld,没有iptables这个服务,但是有iptables这个命令。
1、安装iptables
[root@iptables ~]# yum install -y iptables-services
2、加载相关模块
#临时加载modprobe ip_tablesmodprobe iptable_filtermodprobe iptable_natmodprobe ip_conntrackmodprobe ip_conntrack_ftpmodprobe ip_nat_ftpmodprobe ipt_state#永久加载cat >>/etc/rc.local<<EOFmodprobe ip_tablesmodprobe iptable_filtermodprobe iptable_natmodprobe ip_conntrackmodprobe ip_conntrack_ftpmodprobe ip_nat_ftpmodprobe ipt_stateEOF
3、检查
[root@iptables ~]# lsmod |egrep 'filter|nat|ipt'
nf_nat_ftp 12770 0
nf_conntrack_ftp 18638 1 nf_nat_ftp
iptable_nat 12875 0
nf_nat_ipv4 14115 1 iptable_nat
nf_nat 26787 2 nf_nat_ftp,nf_nat_ipv4
nf_conntrack 133053 6 nf_nat_ftp,nf_nat,xt_state,nf_nat_ipv4,nf_conntrack_ftp,nf_conntrack_ipv4
iptable_filter 12810 0
ip_tables 27126 2 iptable_filter,iptable_nat
libcrc32c 12644 3 xfs,nf_nat,nf_conntrack
4、关闭firewalld启动iptables
[root@iptables ~]# systemctl stop firewalld
[root@iptables ~]# systemctl start iptables
六、iptables命令
1、命令参数
-L 显示表中的所有规则-n 不要把端口 或ip反向解析为 名字-t 指定表 不指定默认是fifilter表-A append 追加 加入准许类规则 使用-A-D delete 删除 -D INPUT 1-I insert 拒绝类规则放在所有规则最上面 拒绝类 -I-p协议 protocal tcp/udp/icmp/all--dport目标端口 dest destination 指定端口 加上协议 -p tcp--sport 源端口 source 源-s --source 源ip-d --destination 目标ip-m 指定模块 multiport-i input 输入的时候 从哪个网卡进来-o ouput 输出的时候 从哪个网卡出去-j满足条件后的动作 : DROP/ACCEPT/REJECTDROP REJECT拒绝的区别DROP把数据丢掉 不会返回信息给用户REJECT 拒绝 返回拒绝信息-F flflush 清除所有规则,不会处理默认的规则-X 删除用户自定义的链-Z 链的计数器清零(数据包计数器与数据包字节计数器
2、查看规则命令(默认是input表,accept规则)
清除规则
[root@iptables ~]# iptables -F
[root@iptables ~]# iptables -X
[root@iptables ~]# iptables -Z
[root@iptables ~]# iptables -nL
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-prohibitedChain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibitedChain OUTPUT (policy ACCEPT)
target prot opt source destination
3、 禁止访问80端口
[root@iptables ~]# iptables -t filter -I INPUT -p tcp --dport 80 -j DRO
4、查看规则序号
[root@iptables ~]# iptables -nL --line-number
5、删除规则
[root@iptables ~]# iptables -D INPUT 1
6、禁止某个IP
[root@iptables ~]# iptables -I INPUT -s 10.0.0.7 -j DROP
#禁止某个ip段
[root@iptables ~]# iptables -I INPUT -s 172.168.0.0/24 -p tcp --dport 8080 -j DROP
7、测试
服务端使用nc -l 8080进行监听端口
客户端使用talnet 8080进行测试
8、只允许某个IP段进行连接(利用!号取反)
[root@iptables ~]# iptables -I INPUT ! -s 11.0.0.0/24 -j DROP
9、修改默认规则为拒绝
1、在修改前先把自己加入白名单(要不然你直接修改拒绝规则,导致你最后也登录不上去了)
[root@iptables ~]# iptables -A INPUT -s 10.0.0.0/24 -j ACCEPT
2、修改默认拒绝规则[root@iptables ~]# iptables -P INPUT DROP
[root@iptables ~]# iptables -nL
Chain INPUT (policy DROP)3、修改回去
[root@iptables ~]# iptables -P INPUT ACCEPT
10、拒绝多个端口
#80和443
[root@iptables ~]# iptables -I INPUT -p tcp -m multiport ! --dport 80,443 -j DROP
#1024-65535
[root@iptables ~]# iptables -I INPUT -p tcp --dport 1024:65535 -j DROP
11、禁ping
[root@iptables ~]# iptables -I INPUT -p icmp --icmp-type 8 -j DROP
#也可以修改内核参数
[root@iptables ~]# cat /etc/sysctl.conf#/proc/sys/net/ipv4/icmp_echo_ignore_allnet.ipv4.icmp_echo_ignore_all = 1[root@iptables~]# sysctl -pnet.ipv4.icmp_echo_ignore_all = 1
12、网络匹配状态
-m state --stateNEW:已经或将启动新的连接ESTABLISHED:已建立的连接RELATED:正在启动的新连接INVALID:非法或无法识别的[root@iptables~]#iptables -A INPUT -m state --state ESTABLISHED,RELATED -jACCEPT[root@iptables~]#iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -jACCEPT
13、限流
-m limit --limit 10/minute #每分钟只能有10个数据包 每6秒生成-m limit --limit n/{second/minute/hour}:解释:指定时间内的请求速率”n”为速率,后面为时间分别为:秒 分 时
-m limit --limit 10/minute --limit-burst 5 每6秒释放工牌给别人使用#10个数据包前5个 1个1个工牌 从第6个开始 每6秒 才能释放1个工牌--limit-burst [n]解释:在同一时间内允许通过的请求”n”为数字,不指定默认为5
测试
[root@iptables~]#iptables -F[root@iptables~]#iptables -I INPUT -p icmp -m limit --limit 10/minute--limit-burst 5 -j ACCEPT[root@iptables~]#iptables -A INPUT -p tcp --dport -j ACCEPT[root@iptables~]#iptables -P INPUT DROP
14、防护强规则保存与恢复
/etc/sysconfig/iptables文件为iptables系统规则配置文件
#将当前的规则写入保存到配置文件中[root@iptables ~]# iptables-save >/etc/sysconfig/iptables
[root@iptables ~]# iptables-restore </etc/sysconfig/iptables
15、filter表小结
封ip 端口 网段禁止ping限制速度和并发iptables fifilter表 功能 可以在 云服务器使用
七、NAT表
1、清楚规则
[root@iptables ~]# iptables -P INPUT ACCEPT
[root@iptables ~]# iptables -P FORWARD ACCEPT
[root@iptables ~]# iptables -F
2、允许172.168.0.0的内网主机可以通过我的外网主机10.0.0.15进行上网
[root@iptables ~]# iptables -t nat -A POSTROUTING -s 172.168.0.0/24 -j SNAT --to-source 10.0.0.15
#开启内核转发
[root@iptables ~]# echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
[root@iptables ~]# sysctl -p|grep ip_forward
net.ipv4.ip_forward = 1
3、如果外网主机的公网ip不固定的情况
这样写[root@iptables ~]#iptables -t nat -A POSTROUTING -s 172.168.0.0/24 -j MASQUERADE
4、然后客户端配置指定网关
[root@iptables ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0TYPE=EthernetBOOTPROTO=noneNAME=eth0DEVICE=eth0ONBOOT=noIPADDR=10.0.0.7PREFIX=24GATEWAY=10.0.0.254DNS1=223.5.5.5GATEWAY=10.0.0.254[root@web01 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1TYPE=EthernetIPADDR=172.168.0.16PREFIX=24NAME=eth1DEVICE=eth1ONBOOT=yesGATEWAY=172.168.0.15DNS1=1.2.4.8
验证
然后在内网主机上面ping baidu 和输入ip r
还有route -n看下
八、端口转发
1、将本地(10.0.0.15)的9000端口映射到172.168.0.16主机的22。
[root@iptables ~]# iptables -t nat -A PREROUTING -d 10.0.0.15 -p tcp --dport 9000 -j DNAT --to-destination 172.16.1.7:22
九、IP映射
将本地主机(10.0.0.15)的请求都转发到远端的172.168.0.16
[root@iptables ~]# iptables -t nat -A PREROUTING -d 10.0.0.15 -j DNAT --to-destination 172.168.0.16
NAT表总结
ptables -I INPUT -s 10.0.0.188 -p tcp --dport 80 -j DROP
2、如何使在命令行执行的iptables规则永久
生效?iptables-save/etc/sysconfig/iptables
3、实现把
访问10.0.0.3:80的请求转到172.16.1.17:80iptables -t nat -A PREROUTING -d 10.0.0.3 -p tcp --dport80 -j DNAT --to-destination 172.16.xxxx:80
4、实现172.16.1.0/24段所有主机通过124.32.54.26外网IP共享上网。
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 123.32.54.26iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT MASQUERADE
有问题请加博主微信进行沟通!
全部评论