沪ICP备2021032517号-1

Iptables

  |   0 评论   |   0 浏览

Iptables

参考文章1 概念、原理、规则

参考文章2 原理、实例

参考文章3 实例

参考文章4 实例

在RHEL 7系统中,firewalld防火墙取代了iptables防火墙。

iptables是工作在TCP/IP的2、3、4层,当主机收到一个数据包后,数据包先在内核空间中处理,若发现目的地址是自身,则传到用户空间中交给对应的应用程序处理,若发现目的不是自身,则会将包丢弃或进行转发。

4张表(raw表、mangle表、net表、filter表)

5条链(INPUT链、OUTPUT链、PORWARD链、PREROUTING链、POSTROUTING链)。

大家无需深入了解诸如“四表五链”的理论概念,只需要掌握常用的参数并做到灵活搭配即可,这就足以应对日常工作了。

防火墙策略规则的匹配顺序是从上至下的,因此要把较为严格、优先级较高的策略规则放到前面,以免发生错误。

表8-1总结归纳了常用的iptables命令参数。再次强调,我们无需死记硬背这些参数,只需借助下面的实验来理解掌握即可

image.png

开启linux服务器路由转发功能

临时生效:

$ echo 1 >/proc/sys/net/ipv4/ip_forward

永久生效:

$ vi /etc/sysctl.conf   

net.ipv4.ip_forward = 1

sysctl  -p   

默认值0是禁止ip转发,修改为1即开启ip转发功能

配置文件

规则可以通过命令行执行命令实现、也可以在 /etc/sysconfig/iptables 添加命令实现

vi /etc/sysconfig/iptables

重启

systemctl restart iptables

不使用配置文件报存命令

service iptables save

查看已有的防火墙规则链:

iptables -L

清空已有的防火墙规则链:

iptables -F

防火墙策略规则的匹配顺序是从上至下的,因此要把较为严格、优先级较高的策略规则放到前面,以免发生错误

规则链:

1.INPUT——进来的数据包应用此规则链中的策略

2.OUTPUT——外出的数据包应用此规则链中的策略

3.FORWARD——转发数据包时应用此规则链中的策略

4.PREROUTING——对数据包作路由选择前应用此链中的规则

(所有的数据包进来的时侯都先由这个链处理)

5.POSTROUTING——对数据包作路由选择后应用此链中的规则

(所有的数据包出来的时侯都先由这个链处理)

iptables的语法格式

iptables [-t 表名] 命令选项 [链名] [条件匹配] [-j 目标动作或跳转

把INPUT、OUTPUT、FORWARD规则链的默认策略设置为拒绝:

iptables -P INPUT DROP

iptables -P OUTPUT DROP  

iptables -P FORWARD DROP

放行端口与禁止端口

ACCEPT 允许数据包通过

DROP 直接丢弃数据包、不给任何回应

禁止端口

iptables -t filter -A INPUT  -p tcp --dport 80 -j DROP

iptables -t filter -A OUTPUT -p tcp --sport 80 -j DROP

--dport 即 destination port,表示外部客户访问服务器时的目标端口。所以第一条规则就是禁止所有外部对本机 80 端口的 tcp 访问

--sport 即 source port,表示数据从服务器流向外部时的监听端口。所以第二条规则就是禁止所有本机在 80 端口的 tcp 对外数据发送

放行端口

iptables -t filter -A INPUT  -p tcp --dport 80 -j ACCEPT

iptables -t filter -A OUTPUT -p tcp --sport 80 -j ACCEPT

允许指定网段的主机访问本机某端口

将INPUT规则链设置为只允许指定网段的主机访问本机的22端口,拒绝来自其他所有主机的流量

iptables -I INPUT -s 192.168.10.0/24 -p tcp --dport 22 -j ACCEPT  
  
iptables -A INPUT -p tcp --dport 22 -j REJECT  

转发流量

iptables -t nat -A PREROUTING -p tcp --dport [端口号] -j DNAT --to-destination [目标IP]

iptables -t nat -A PREROUTING -p udp --dport [端口号] -j DNAT --to-destination [目标IP]

iptables -t nat -A POSTROUTING -p tcp -d [目标IP] --dport [端口号] -j SNAT --to-source [本地服务器IP]

iptables -t nat -A POSTROUTING -p udp -d [目标IP] --dport [端口号] -j SNAT --to-source [本地服务器IP]

上面第一条和第三条;第二条和第四条配合使用,比如第一条是规定"去" 从哪里走 第3条 从哪里"回"

把访问本机 3307 端口的请求转发到192.168.1.3:3306

iptables -t nat -A PREROUTING -p tcp --dport 3307 -j DNAT --to-destination 192.168.1.3:3306

iptables -t nat -A POSTROUTING -p tcp -d 192.168.1.3  --dport 3306 -j SNAT --to 192.168.1.2

-t 指定表

-A 链末尾添加规则

-p 匹配协议 -d 指定目标地址

--dport 匹配端口

-j 目标跳转

DNAT: 目标地址转换

SNAT:源地址转换


向防火墙的INPUT规则链中添加一条允许ICMP流量进入的策略

iptables -I INPUT -p icmp -j ACCEPT

删除INPUT规则链中刚刚加入的那条策略(允许ICMP流量),并把默认策略设置为允许:

iptables -D INPUT 1

iptables -P INPUT ACCEPT

再次重申,防火墙策略规则是按照从上到下的顺序匹配的,因此一定要把允许动作放到拒绝动作前面,否则所有的流量就将被拒绝掉,从而导致任何主机都无法访问我们的服务。

image.png

image.png