iptables防火墙规则

文章目录

  • 简介
  • iptables的一些常用规则
    • 一、清空规则并设置默认链策略
    • 二、屏蔽指定的IP地址
    • 三、允许Ping测试
    • 四、允许环回访问
    • 五、允许SSH连接请求
    • 六、允许HTTP和HTTPS连接请求
    • 七、允许出站DNS连接
    • 八、允许NIS连接
    • 九、允许IMAP和IMAPS
    • 十、允许POP3和POP3S
    • 十一、防止DoS攻击
    • 十二、转发与NAT
      • 1. 允许路由
      • 2. DNAT与端口转发
      • 3. SNAT与MASQUERADE
      • 4. 负载平衡
    • 十三、自定义链记录丢弃的数据包


简介

iptables 是一个用于配置 Linux 内核防火墙规则的工具。它是一个强大而灵活的工具,可以用于定义数据包的过滤规则、网络地址转换 (NAT)、端口转发等。iptables 提供了一种对网络流量进行细粒度控制的方式,可以用于保护系统免受网络攻击,限制网络访问,实现网络地址转换等功能。

基本的 iptables 概念和使用方法:

  1. 表(Tables): iptables 有四个主要的表,分别是:

    • filter 表: 用于过滤数据包,决定是否允许或拒绝数据包通过。
    • nat 表: 用于网络地址转换,例如,将私有 IP 地址映射到公共 IP 地址。
    • mangle 表: 用于修改数据包的特定字段,如 TTL(生存时间)。
    • raw 表: 用于配置连接跟踪表规则。
  2. 链(Chains): 每个表包含一些链,链是规则的集合,用于定义数据包的处理流程。常见的链包括

    • INPUT(处理输入数据包)
    • OUTPUT(处理输出数据包)
    • FORWARD(处理转发数据包)
  3. 规则(Rules): 规则定义了数据包的匹配条件以及匹配条件满足时应该执行的动作。每个规则包含一个匹配条件和一个动作。常见的动作包括 :

    • ACCEPT(允许通过)
    • DROP(丢弃数据包)
    • REJECT(拒绝数据包并发送拒绝信息)
  4. 目标(Target): 目标是规则执行时的动作,例如 ACCEPT、DROP 等。目标指定了数据包应该如何处理。

iptables的一些常用规则

一、清空规则并设置默认链策略

清空现有规则:

iptables -F

设置默认链策略为DROP:

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

二、屏蔽指定的IP地址

屏蔽指定IP地址(例如BLOCK_THIS_IP):

BLOCK_THIS_IP="x.x.x.x"
iptables -A INPUT -i eth0 -s "$BLOCK_THIS_IP" -j DROP
# 或仅屏蔽来自该IP的TCP数据包
iptables -A INPUT -i eth0 -p tcp -s "$BLOCK_THIS_IP" -j DROP

三、允许Ping测试

允许外部对本机进行Ping测试:

iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

允许本机Ping外部主机:

iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT

四、允许环回访问

允许本机的环回访问:

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

五、允许SSH连接请求

允许所有来自外部的SSH连接请求:

iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

允许本机发起的SSH连接:

iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

六、允许HTTP和HTTPS连接请求

# 允许HTTP连接: 80端口
iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

# 允许HTTPS连接: 443端口
iptables -A INPUT -i eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT

七、允许出站DNS连接

iptables -A OUTPUT -p udp -o eth0 --dport 53 -j ACCEPT
iptables -A INPUT -p udp -i eth0 --sport 53 -j ACCEPT

八、允许NIS连接

# 获取NIS相关端口
rpcinfo -p | grep ypbind

# 允许连接到111端口的请求数据包,以及ypbind使用到的端口
iptables -A INPUT -p tcp --dport 111 -j ACCEPT
iptables -A INPUT -p udp --dport 111 -j ACCEPT
iptables -A INPUT -p tcp --dport 853 -j ACCEPT
iptables -A INPUT -p udp --dport 853 -j ACCEPT
iptables -A INPUT -p tcp --dport 850 -j ACCEPT
iptables -A INPUT -p udp --dport 850 -j ACCEPT

九、允许IMAP和IMAPS

# 允许IMAP连接: 143端口
iptables -A INPUT -i eth0 -p tcp --dport 143 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 143 -m state --state ESTABLISHED -j ACCEPT

# 允许IMAPS连接: 993端口
iptables -A INPUT -i eth0 -p tcp --dport 993 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 993 -m state --state ESTABLISHED -j ACCEPT

十、允许POP3和POP3S

# 允许POP3连接: 110端口
iptables -A INPUT -i eth0 -p tcp --dport 110 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 110 -m state --state ESTABLISHED -j ACCEPT

# 允许POP3S连接: 995端口
iptables -A INPUT -i eth0 -p tcp --dport 995 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 995 -m state --state ESTABLISHED -j ACCEPT

十一、防止DoS攻击

iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT

十二、转发与NAT

1. 允许路由

iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT

2. DNAT与端口转发

# 启用DNAT转发
iptables -t nat -A PREROUTING -p tcp -d 192.168.102.37 --dport 422 -j DNAT --to-destination 192.168.102.37:22
# 允许连接到422端口的请求
iptables -A INPUT -i eth0 -p tcp --dport 422 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 422 -m state --state ESTABLISHED -j ACCEPT

3. SNAT与MASQUERADE

SNAT:

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT --to-source 192.168.5.3

MASQUERADE:

iptables -t nat -A POSTROUTING -s 10.8.0.

0/255.255.255.0 -o eth0 -j MASQUERADE

4. 负载平衡

iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.101:443
iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 1 -j DNAT --to-destination 192.168.1.102:443
iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 2 -j DNAT --to-destination 192.168.1.103:443

十三、自定义链记录丢弃的数据包

# 新建名为LOGGING的链
iptables -N LOGGING
# 将所有来自INPUT链中的数据包跳转到LOGGING链中
iptables -A INPUT -j LOGGING
# 指定自定义的日志前缀"IPTables Packet Dropped: "
iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables Packet Dropped: " --log-level 7
# 丢弃这些数据包
iptables -A LOGGING -j DROP

以上是一些常用的iptables规则和设置,可以根据实际需求进行适当调整。iptables的配置需要谨慎,确保不影响正常的网络通信。

你可能感兴趣的:(iptables)