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的主要内容,如果未能解决你的问题,请参考以下文章

iptables

iptables

防火墙

iptables

iptables简单设置

日常运维