Linux, 网络

iptables服务的配置及规则制定

iptables是管理linux防火墙模块netfilter的用户端接口程序,通过iptables可以方便的管理、设置内核的包过滤模块。

netfliter可以使用iptables管理也可以由firewalld管理,firewalld它是在 iptables 基础之上进行了一定的封装和抽象,提供了更加直观、易用的配置方式,比如使用区域(zone)的概念,不同的区域预定义了不同的网络访问策略。

iptables 的配置是直接作用于内核规则链,而 firewalld 是通过自身的配置逻辑(如区域配置、服务配置等)再去转化成内核规则。如果同时配置并启用二者,firewalld 后续更新配置生成新的内核规则时,可能会覆盖掉 iptables 手动精心配置的一些规则,使得 iptables 配置失效;反之亦然,iptables 手动添加的新规则也可能破坏 firewalld 按照区域等概念设定好的网络访问策略,导致 firewalld 配置出现紊乱,无法按照预期管控网络访问。
基于上述原因,在实际的 Linux 系统应用中,通常建议只选择使用 iptables 服务或者 firewalld 服务中的一种来进行系统的网络防火墙管理,避免二者同时启用带来的各种冲突问题。

iptabes依赖的软件有两个:iptables、iptables-services,一般系统会默认安装第一个包,第二个包是服务包,可以实现iptables规则的开机自动加载,关机自动保存等功能,结合一下配置内容实现。

iptables配置文件:/etc/sysconfig/iptables-config

IPTABLES_MODULES="nf_conntrack_ftp"      //设置iptables启动时默认加载的模块

IPTABLES_SAVE_ON_STOP="yes"              //设置停止时自动保存iptables规则

IPTABLES_SAVE_ON_RESTART="yes"           //设置重启时自动保存iptables规则

IPTABLES_RESTORE_WAIT=0                  //设置iptables开启后马上恢复原有规则

配置完成后重启iptables服务:systemctl enable iptables && systemctl restart iptables 即可生效。
默认iptables的规则自动保存在/etc/sysconfig/iptables中;可以使用 service iptables save 即刻保存规则。
iptables-save >/path/to/file 可以把防火墙规则保存到指定的路径。恢复指定的防火墙规则可以使用:iptables-restore </path/to/file

iptables的规则设置

在设置iptables规则前需要了解数据包在传输过程(如下图)

1、进入系统应用程序的数据包:

2、转发的数据包:

iptables中共有4张表

  • filter: 过滤功能,确定是否放行该数据包,属于真正防火墙
  • nat: 网络地址转换功能,修改数据包中的源、目标IP地址或端口
  • mangle: 对数据包进行重新封装功能,为数据包设置标记
  • raw: 确定是否对数据包进行跟踪

iptables中共有5条链

  • INPUT:处理入站数据包
  • OUTPUT:处理出站数据包
  • FORWARD:处理转发数据包(主要是将数据包转发至本机其它网卡)当数据报文经过本机时,网卡接收数据报文至缓冲区,内核读取报文ip首部,发现报文不是送到本机时(目的ip不是本机),由内核直接送到forward链做匹配,匹配之后若符合forward的规则,再经由postrouting送往下一跳或目标主机
  • PREROUTING:在进行路由选择前处理数据包,修改到达防火墙数据包的目的IP地址,用于判断目标主机
  • POSTROUTING:在进行路由选择后处理数据包,修改要离开防火墙数据包的源IP地址,判断经由哪一接口送往下一跳


iptables中表链之间的关系,每个表里面包含有多个链,不同的表包含的链是不一样的

  • filter表可以使用的链:INPUT,FORWARD,OUTPUT
  • nat表中可以使用的链:PREROUTING,OUTPUT ,POSTROUTING,INPUT
  • mangle 表中可以使用的链:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
  • raw表中可以的链:PREROUTING,OUTPUT

iptables语法结构

iptables [-t 表名] 管理选项 [链名] [条件匹配] [-j 目标动作或跳转]
tablecommand chainParameter & Xmatch target
iptables-t filter
nat
mangle
raw
-A
-I
-P
-D
-R
-F
-L
-Z
-n
-v
INPUT
FORWARD
OUPUT
PREROUTING
POSTROUTING
-p tcp/udp/icmp
–sport
–dport
-s
-d
-m multiport
–dports
-m state
-j ACCEPT
DROP
REJECT
DNAT
SNAT
MASQUERADE
LOG

配置样例:

#SNAT配置
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens34
-j SNAT --to-source 1.1.1.1
#或者
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens34
-j MASQUERADE

#DNAT配置
[root@localhost ~]# iptables -t nat -A PREROUTING -d 1.1.1.1 -p tcp --dport 80 -
j DNAT --to-destination 192.168.100.10

#基于状态过滤数据包
[root@localhost ~]# iptables -I INPUT -m state --state ESTABLISHED,RELATED -j
ACCEPT

#允许ping回应(echo-reply)
[root@localhost ~]# iptables -t filter -I INPUT -p icmp -m icmp --icmp-type
echo-reply -j ACCEPT 

#multiport:多端口
[root@localhost ~]#iptables -I INPUT -d 192.168.2.10 -p tcp -m multiport --
dports 22,80 -j ACCEPT

#-m iprange
#iprange多ip地址(-src-range原地址范围,--dst-range目的地址范围)
i[root@localhost ~]#ptables -A INPUT -d 192.168.2.10 -p tcp --dport 23 -m
iprange --src-range 192.168.2.11-192.168.2.21 -j ACCEPT

#每周1-5的8:00-18:00
[root@localhost ~]#iptables -A INPUT -d 192.168.2.10 -p tcp --dport 80 -m time -
-weekdays Mon,Tus,Wed,Thu,Fri --timestart 08:00:00 --time-stop 18:00:00 -j
ACCEPT

#2020-1-10的18点到2022-1-10的18点
[root@localhost ~]#iptables -I INPUT -s 172.17.1.132 -d 192.168.1.119 -m time
--datestart 2020-1-10T18:00:0 --datestop 2022-1-10T18:00:00 -j ACCEPT

#-m comment 对规则进行备注说明(添加注释)
[root@localhost ~]#iptables -A INPUT -s 192.168.2.250 -m comment --comment "注释
内容" -j REJECT

Leave a Reply