iptables
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iptables相关的知识,希望对你有一定的参考价值。
iptables
iptables的5条规则链
INPUT:数据包的目的地是访火墙
OUTPUT:数据的源地址是防火墙
FORWARD:数据包穿越访火墙
PREROUTING:路由前
POSTROUTING:路由后
man iptables
netfilter/iptables 表tables 链chains 规则policy
比喻:小区里的一栋楼 楼里的房子 房子里的柜子 增加,摆放的规则
提示
防火墙规则的执行顺序默认认为从前到后依次执行,遇到匹配的规则就不在继续向下检查,如果遇到不匹配的规则则会继续向下进行。
重点:匹配上了拒绝规则也是匹配,因为,不在继续向下进行。
iptables 选项
-I :插入规则第1行
常用的表 filter、net、mangle、raw
表tables 链chains
INPUT FORWARD OUTPUT PRERROUTING POSTROUTING
filter 1 1 1 - - *****
nat - - 1 1 1 *****
mangle 1 1 1 1 1 **
raw
iptables 指令格式
iptables [-t 表名] 选项 [链名] [条件匹配] [-j 目标操作]
表:filter
链:INPUT, FORWARD, OUTPUT
表:nat
链:INPUT, OUTPUT,POSTROUTING, PREROUTING
选项 A(添加) D(删除) I(插入) F(清空)
目标操作: REJECT DROP ACCEPT LOG
四元组是:
源IP地址、目的IP地址、源端口、目的端口
五元组是:
源IP地址、目的IP地址、协议号、源端口、目的端口
七元组是:
源IP地址、目的IP地址、协议号、源端口、目的端口,服务类型以及接口索引
#########
filter表:负责防火墙功能(过滤本机流入,流出的数据包)。是iptables默认使用的表,这个表定义了三个链(chanis)
1.INPUT :负责过滤所有目标地址是本机(防火墙)地址的数据包,通俗的讲,就是过滤进入主机的数据包。
2.FORWARD :负责转发流经主机但不进入本机的数据包。起转发的作用,和Nat表关系很大。
3.OUTPUT :处理所有源地址是本机地址的数据包,能俗的讲就是处理从主机发出去的数据包。
##########
nat表
网络地址转换,即负责来源与目的IP地址和port的转换,和主机本身无关,一般用于局域 网多人共享上网或者内网IP映射外网IP及不同端口转换服务等功能,nat表的功能很重要,这个表定义了三个链(chains)
1.OUTPUT
和主机发出去的数据包有关,在数据包路由之前改变主机产生的数据 包的目标地址等。
2.PREROUTING
在数据包刚到达防火墙时,进行路由判断之前执行的规则,改变包的目的地址(DNAT功能),端口等
3.POSTROUTING
在数据包离开防火墙时进行路由判断之后执行的规则,改变包的源地址(SNAT),端口等
mangle表
主要负责修改数据包中特殊的路由标记,如TTL,TOS,MARK等,这个表定义了5个链
1.INPUT
2.FORWARD
3.OUTPUT
4.PREROUTING
5.POSTROUTING
/etc/init.d/iptables start
/etc/init.d/iptables status 检查状态
如果防火墙开不起来,在linux命令行输入setup-->firewall configuration-->enable进行激活
iptables -L #列出所有链和规则
iptables -n #以数据字的形式输出
-t 指定默认的表
-v 显示详细信息
-x 禁止单位换算
-A 添加规则到最后1条
-p 指定协议
-j 形为
-s 指定源地址
-d 指定目标地址
-I 添加规则到第1条
--icmp-type 8 #8表示ping
-i 表示数据包进入接口为eth0,
-o 表示数据包流出的网络接口
! 取反
基本目标操作
iptables -L -n filter #查看filter表中的链
iptables -L -n net #查看filter表中的链
iptables -L -n mangle #查看filter表中的链
iptables -L -n -t filter #指定默认的表
清除默认规则 临时清除
iptables -F :删除所有的规则
iptables -X :把所有的规则指针清零
iptables -Z :删除自定义的链
例1:禁止ssh默认的22端口
iptables -A INPUT -p tcp --dport 22 -j DROP
iptables -t filter -A INPUT -p tcp --dport 22 -j DROP
删除规则
iptables -D INPUT -p tcp --dport 22 -j DROP
提示:
1.iptables默认用的是filter表,因此,以上两条命令等价
2.其中INPUT DROP 等关键字要大写
3.行为参数
--jump -j target
提示:target常见处理方法ACCEPT(接受),DROP(丢弃),REJECT(绝拒)。
一般不用REJECT(绝拒),会带来安全隐患,REJECT(绝拒)相当于明确拒绝
SNAT(对于源地址进行转换),DNAT(对于目的地址进行转换),MASQUERADE(伪装)
删除的方法
iptables -L -n --line-numbers 查看规则行号
1. iptables -D INPUT -p tcp --dport 22 -j DROP
2. iptables -D INPUT 1 #1表示行号进行删除规则
3. iptables -F service iptables save
例2:禁止10.0.0.0/24网段接入
iptables -t filter -A INPUT -i eth0 -s 10.0.0.0/24 -j DROP
例3:拒绝规则匹配
iptables -t filter -A INPUT -i eth0 -s ! 10.0.0.0/24 -j DROP
提示加!号,表示取反,
在生产环境中封一个非法的IP及端口
iptables -I INPUT -p tcp -s 10.0.0.189/24 -j DROP
禁止IP通过防火墙
iptables -I INPUT -p tcp -dport 22 -j DROP
禁止目的端口为22的的数据包通过防火墙
提示:-I 的参数意思是插 入到防火墙的第一条生效,-A 是添加到最后一条。
例3:源地址不是10.0.0.101禁止连接
iptables -t filter -I INPUT -i eth0 -s ! 10.0.0.101 -j DROP
iptables -t filter -I INPUT -p icmp --icmp-type 8 -i eth0 ! 10.0.0.101 -j DROP
提示:-i 表示数据包进入接口为eth0, -o 表示数据包流出的网络接口
例4.源地址不是10.0.0.0/24的禁止连接
iptables -t filter -A INPUT -i eth0 -s ! 10.0.0.101 -j DROP
iptables -t filter -A INPUT -i eth0 -s 10.0.0.101 -j ACCEPT
匹配指定的协议
iptables -A INPUT -p tcp
iptables -A INPUT -p udp
提示:-p参数可以匹配协议名或者协议号,支持tcp,udp,icmp,all四种
例5:匹配指定协议外的所有协议
iptables -A INPUT -p ! tcp
例6:匹配主机
iptables -A INPUT -s 10.0.0.12
iptables -A INPUT -s 10.0.0.0/24
iptables -A INPUT ! -s 10.0.0.12
iptables -A INPUT ! -s 10.0.0.0/24
例7:匹配端口
iptables -A INPUT -p tcp -sport 53 #源端口
iptables -A INPUT -p tcp -dport 53 #目标端口
例8:匹配端口范围
iptables -A INPUT -p tcp --sport 22:80 -j DROP #22到80端口
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dport 21,22,23,24 -j ACCEPT # -m多端口参数
例9:匹配ICMP端口类型
iptables -A INPUT -P icmp --icmp-type 8 -j DROP
iptables -A INPUT -P icmp -m --icmp-type any -j ACCEPT
iptables -A FORWARD -s 192.168.1.0/24 -p icmp -m icmp --icmp-type any -j ACCEPT
例10:匹配指定的网络接口
iptables -A INPUT -i eth0
iptables -A INPUT -0 eth0
安全保护
Syn-flood protection:
iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
源地址伪装
iptables -t nat -A POSTROUTING -s 192.168.4.20 -j SNAT --to-source 176.130.11.84
局域网192.168.4.20伪装为源外网IP176.130.11.84上公网
##################
单机防火墙生产环境配置----------------》
1.配置防火墙
iptables -F
iptables -X
iptables -Z
iptables -t filter
2.配置允许SSH登陆端口进入
iptables -A INPUT -p tcp --dport 22 -s 10.0.0.0//24 -j ACCEPT
3.配置本机的lo接口进入和流出
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
4.设置默认的防火墙禁止和允许规则
#setting default firewall policy 设置默认DROP掉FORWARD,INPUT链,允许OUTPUT链
iptables --policy OUTPUT ACCEPT
iptables -P FORWARD DROP
iptables -P INPUT DROP
5.开启信任的IP段
iptables -A INPUT -s 192.168.1.0/24 -p all -j ACCEPT
6.允许HTTP服务无条件通过
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
7.允许icmp类型协议通过
iptables -A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
iptables -A INPUT -p icmp -s 192.168.1.0/24 -m icmp --icmp-type any -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
8.允许关联的状态包通过
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
永久保存配置文件
防火墙默认保存文件 /etc/sysconfig/iptables
方法1./etc/init.d/iptables save
方法2.iptables-save /etc/init.d/iptables
临时 封堵单个IP
iptables -I INPUT -s 10.2.1.2 -j DROP
#####################################################################
生产环境iptables规则实践
1.仅允许 内部合法的IP地址访问服务器
iptables -A INPUT -s 203.82.11.0/24 -p all -j ACCEPT
iptables -A INPUT -s 122.42.61.96/27 -p all -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -p all -j ACCEPT
iptables -A INPUT -s 10.0.0.0/24 -p all -j ACCEPT
2.仅允许合法的IP段访问监控服务nagios
iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 5666 -j ACCEPT
iptables -A INPUT -s 202.82.11.0/24 -p tcp --dport 5666 -j ACCEPT
3.仅允许内部合法的IP段访问mysql数据库和ORACLE数据库
iptable -A INPUT -s 192.168.1.0/24 -p tcp --dport 3306 -j ACCEPT
iptable -A INPUT -s 192.168.1.0/24 -p tcp --dport 3307 -j ACCEPT
iptable -A INPUT -s 192.168.1.0/24 -p tcp --dport 1521 -j ACCEPT
提示:以上仅适合于LAMP一体环境或都数据库有外网IP的情况,否则,可以不开启访火墙
4.仅允许内部合法的IP段访问SSH远程连接服务
iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 50718 -j ACCEPT
iptables -A INPUT -p tcp -s 203.82.11.0 --dport 50718 -j ACCEPT
5.对HTTP服务的不同限制
a:对外提供http服务的业务,要允许http服务通过,并且不限制制IP
iptables -A INPUT -p tcp -dport 80 -j ACCEPT
b:对内提供http服务的业务,一般用特殊端口,并且限制合法IP连接或VPN连接
iptables -A INPUT -s 192.168.1.0/24 -p tcp -m multiport -dport 8080,8081,8082 -j ACCEPT
iptables -A INPUT -s 203.82.11.0/24 -p tcp -m multiport -dport 8080,8081,8082 -j ACCEPT
6:snmp限制,允许以下IP地址来访问我的161端口,不允其它IP访问我的161端口
iptables -A INPUT -s 192.168.1.0/24 -p udp -dport 161 -j ACCEPT
iptables -A INPUT -s 203.82.11.0/24 -p udp -dport 161 -j ACCEPT
7:rsync服务的限制策略
iptables -A INPUT -s 192.168.1.0/24 -p tcp -m tcp --dport 873 -j ACCEPT
iptables -A INPUT -s 203.82.11.0/24 -p tcp -m tcp --dport 873 -j ACCEPT
提示:如果没有外网IP,可以不开启访火墙
8:nfs服务的限制
iptables -A INPUT -s 192.168.1.0/24 -p tcp -m multiport --dport 111,892,2049 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -p udp -m multiport --dport 111,892,2049 -j ACCEPT
9:ftp服务的限制
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
提示:以上内容表示已经建立连接的数据包,或者发出去的数据包允许通过
10.icmp协议的限制
iptables -A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
iptables -A INPUT -p icmp -s 10.0.0.0/24 -m icmp --imcp-type any -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
######################################################################
案例:设置访火墙
1.清除规则
iptables -F
iptables -Z
iptables -X
2.配置允许SSH登陆端口进入
iptables -A INPUT -p tcp --dport 22 -s 10.0.0.0/24 -j ACCEPT
提示:允许内部IP连接22号端口
3.配置允许lo接口的进入和流出
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
4.设置默认访火墙和允许规则
iptables --policy OUTPUT ACCEPT -t filter //出防火墙随便出
iptables --policy FORWARD DROP -t filter //不允许穿过访火墙转发
iptables --policy INPUT DROP -t filter //不允许进入访火墙
5.开启信任的IP段
iptables -A INPUT -s 124.43.62.96/27 -p all -j ACCEPT //远程机房
iptables -A INPUT -s 192.168.1.0/24 -p all -j ACCEPT //内部网络
iptables -A INPUT -s 10.0.0.0/24 -p all -j ACCEPT //信任网段
6.允许http服务无条件通过
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
7.允许icmp类型协议通过
iptables -A INPUT -p icmp -m -icmp --imcp-type any -j ACCEPT
iptables -A INPUT -p icmp -s 10.0.0.1/24 -m --imcp-type any -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
8.允许关联的状态包通过
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
提示:ESTABLISHED已经建立连接的包,RELATED和已有连接相关联的包
永久保存成配置文件
执行上面的配置后,配置结果都在内存里,这时一旦服务或者访火墙重启,所有的配置都会丢失,所以,在命令行的配置完毕后,我们需要把所有的配置保存成配置文件。方法如下:
法一:
/etc/init.d/iptables save
法二:
iptables-save > /etc/sysconfig/iptables
提示:/etc/sysconfig/iptables为iptables的默认配置文件路径
tcp状态标志:SYN同步,ACK应答,FIN结果,RST重设,URG紧急,PSH强追推送,ALL所有,NONE无
########################################################################################
把linux服务器配置为上网网关和端口映射功能
DNAT 目的IP地址转换
改变数据包目的IP地址等功能的技术,它可以使多台服务器共享一个IP地址连入internet,并且对外提供服务(请注意是对外提供服务),通过对同一个外部IP地址分配不同的端口,映射不同的内部服务器IP和端口,从而实现提供各服务的目的,除了进行端口映射外,还可以配合SNA的功能一起使用,实现类似访火墙设备才能实现DMZ功能,即IP的一对一映射
例:DNAT功能
iptables -t nat -A PREROUTING -d 202.3.2.3 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.1.100:80
将所有的访问ip202.3.3.3并且是80端口的请求,地址改写为内部的WEB服务器192.168.1.100的80端口,从而实现内部IP对外提供服务的目的
####
SNAT 源IP地址转换
这是一种改变数据包源IP地址等功能技术,经常用来使多台计算机共享一个internet地址访问互联网,如办室内部机器上网,IDC机房的内部机器上网等
SNAT功能
iptables -t nat -A POSTROUTING -s 192.168.1.0/255.255.255.0 -o eth0 -j SNAT --to-source 10.10.10.1:80
将源地址是 202.3.2.0的数据包地址改写为公网10.10.10.1出网,这是办公室或机房内部服务器共享上网常用方法
####
MASQUERADE伪装功能
为动态源地址转换,即当外部IP非固定IP时的场合经常使用的选项,例如ADSL拔号上网的情况,当然对固定单个或多个IP地址的情况,也可以使用MASQUERADE来完成共享上网
例如:
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE
将源地址是192.168.0.0/24的数据包进行地址伪装,此命令可以实现ADSL线路多台计算机共享上网
#########
生产实例
sysctl -p
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1 #把防火墙设为1,转发
172.16.1.3(linux内网IP eth1) 10.0.0.3(linux服务器 eth0)
linux服务器能ping通外网,但是172.16.1.0内部网络不能ping外网,必须经过NAT转发,172.16.1.0内部网络IP地址转发成 10.0.0.3(linux服务器 eth0),即可ping通外网
由于iptables是在内核中运行,我们需要检查或载入如下基本相关内核模块
modprobe ip_tables
modprobe iptables_filter
modprobe iptables_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_state
lsmod|grep ip
查看模块是否加载成功
iptables -t nat -L -n #查看nat表
1.实现内网172.16.1.0能ping通外网
iptables -t nat -A POSTROUTING -s 172.16.1.0/255.255.255.0 -o eth0 -j SNAT --to-source 10.0.0.3
或以伪装的方式ping能外网
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j MASQUERADE
2.实现外部 10.0.0.3 IP地址端口到 172.16.1.17 内部服务器IP和端口映射
iptables -t nat -A PREROUTING -d 10.0.0.3 -p tcp -m tcp --dport 80 -j DNAT --to-destination 172.16.1.17:80
提示:以上方法仅公是端口之间的映射
实际上我们也可以实现IP一对一的映射,即DMZ的功能
-A PREROUTING -d 124.43.60.112 -j DNAT --to-destination 10.0.0.8
-A POSTROUTING -s 10.0.0.8 -o eth0 -j SNAT --to-source 124.43.60.112
-A POSTROUTING -s 10.0.0.0/255.255.255.0 -d 10.0.0.8 -j SNAT --to-source 10.0.0.254
以上内容需要写入配置文件/etc/sysctl.conf
3.内网IP映射多个外网IP上网
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j SNAT --to-source 124.42.60.103-124.42.60.108
提示:通过映射多个内部IP到外网IP可以实现在外部看来你的IP变化
################################################################################
filter 防火墙
INPUT 主要用于主机防火墙,设置规则屏蔽处理进入本机的数据包
禁止 192.168.4.15 这个机器访问我本机的 web 服务
iptables -t filter -A INPUT -s 192.168.4.15 -p tcp --dport 80 -j DROP
除了 192.168.4.12 这个机器 ,其他 192.168.4.0 网段的机器禁止 ping 我
iptables -t filter -A INPUT ! -s 192.168.4.12 -j DROP
FORWARD 主要用于网络防火墙,设置规则处理穿过本机的数据包
禁止 192.168.4.11 的机器穿过防火墙访问后端的机器
iptables -t filter -A FORWARD -s 192.168.4.11 -j DROP
nat 防火墙,需要打开内核 ip 转发 (sysctl -w net.ipv4.ip_forward=1)
POSTROUTING 源地址伪装
通过伪装 192.168.4.0 网段的机器上网,首先防火墙本机可以访问互联网
iptables -t nat -A POSTROUTING -s 192.168.4.0 -j SNAT --to-source 防火墙外网ip地址
PERROUTING 目的地址转换
所有访问防火墙 10022 端口的请求都转发给后端的 192.168.4.15 的 22 端口
iptables -t nat -A PREROUTING -p tcp --dport 10022 -j DNAT --to-destination 192.168.4.15:22
############################
网络
RHEL6以ethX为网卡命名
RHEL7网卡命名方式
(1)如果是以太网写为en,如果是无线局域网写wl,如果是无线广域网写为ww
(2)网卡的第三个字符,如果是主板集成设备,写为o,如果eno1;如果是独立的网卡,写为s,如ens1;如果是扩展卡,表示物理位置,写为p,enp0s1;如果系统检测不到网卡类型,可能第三个字符写为x,后面跟上该网卡的mac地址
防火墙
1、RHEL6中使用iptables作为防火墙
2、iptables不是只有防火墙功能
3、iptables使用四张表来实现四种功能
filter:防火墙
nat:网络地址转换
mangle:流量标记
raw:状态跟踪、
4、iptables的5条规则链
INPUT:数据包的目的地是防火墙
OUTPUT:数据包的源地址是防火墙
FORWARD:数据包穿越防火墙
PREROUTING:路由前
POSTROUTING:路由后
5、启动防火墙
[[email protected] ~]# service iptables start
6、查看规则
[[email protected] ~]# iptables -t filter -L INPUT
[[email protected] ~]# iptables -L INPUT
[[email protected] ~]# iptables -L
7、清空默认规则
[[email protected] ~]# iptables -F
8、如果服务器是单一功能的服务器(如web服务),那么可以设置除了http协议,其他的任何访问都拒绝
9、将默认规则设置为DROP,再设置允许访问web和ssh服务
[[email protected] ~]# iptables -P INPUT DROP
[[email protected] ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
[[email protected] ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
10、拒绝指定的地址访问本机的http服务
[[email protected] ~]# iptables -A INPUT -s 192.168.122.0/24 -p tcp --dport 80 -j REJECT
11、查看规则序号
[[email protected] ~]# iptables -nL INPUT --line-numbers
12、根据序号删除规则
[[email protected] ~]# iptables -D INPUT 3
13、向INPUT链的头部插入规则
[[email protected] ~]# iptables -I INPUT 1 -s 192.168.122.0/24 -p tcp --dport 80 -j REJECT
14、iptables定义的状态
NEW:新建立连接
ESTABLISHED:已建立连接
RELATED:相关的
INVALID:无效的
UNTRACKED:未跟踪的
15、如果收到的数据包的状态是ESTABLISHED或RELATED,则接受
[[email protected] ~]# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
################################
例:
允许所以有用SSH连接目的主机
先允许22端口能过,不然,把自己退出连接终端
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -t filter -P INPUT DROP
允许外面所有端口访问我的80端口
iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
本文出自 “12177655” 博客,谢绝转载!
以上是关于iptables的主要内容,如果未能解决你的问题,请参考以下文章