阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

25个iptables常用示例

25次阅读
没有评论

共计 6629 个字符,预计需要花费 17 分钟才能阅读完成。

本文由 LinuxProbe.Com 团队成员 烨子 整理发布,原文来自:Linux 就该这么学。

本文将给出 25 个 iptables 常用规则示例,这些例子为您提供了些基本的模板,您可以根据特定需求对其进行修改调整以达到期望。

格式

iptables [-t 表名] 选项 [链名] [条件] [-j 控制类型]

参数

-P 设置默认策略:iptables -P INPUT (DROP|ACCEPT)
-F 清空规则链
-L 查看规则链
-A 在规则链的末尾加入新规则
-I num 在规则链的头部加入新规则
-D num 删除某一条规则
-s 匹配来源地址 IP/MASK,加叹号 ”!” 表示除这个 IP 外。
-d 匹配目标地址
-i 网卡名称 匹配从这块网卡流入的数据
-o 网卡名称 匹配从这块网卡流出的数据
-p 匹配协议, 如 tcp,udp,icmp
–dport num 匹配目标端口号
–sport num 匹配来源端口号

示例

1. 删除已有规则

在开始创建 iptables 规则之前,你也许需要删除已有规则。命令如下:

iptables -F
(or)
iptables –flush

2. 设置链的默认策略

链的默认政策设置为”ACCEPT”(接受),若要将 INPUT,FORWARD,OUTPUT 链设置成”DROP”(拒绝),命令如下:

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

当 INPUT 链和 OUTPUT 链都设置成 DROP 时,对于每一个防火墙规则,我们都应该定义两个规则。例如:一个传入另一个传出。在下面所有的例子中,由于我们已将 DROP 设置成 INPUT 链和 OUTPUT 链的默认策略,每种情况我们都将制定两条规则。当然,如果你相信你的内部用户, 则可以省略上面的最后一行。例如:默认不丢弃所有出站的数据包。在这种情况下, 对于每一个防火墙规则要求, 你只需要制定一个规则——只对进站的数据包制定规则。

3. 阻止指定 IP 地址

例:丢弃来自 IP 地址 x.x.x.x 的包

BLOCK_THIS_IP="x.x.x.x"
iptables -A INPUT -s "$BLOCK_THIS_IP" -j DROP

注:当你在 log 里发现来自某 ip 地址的异常记录,可以通过此命令暂时阻止该地址的访问以做更深入分析

例:阻止来自 IP 地址 x.x.x.x eth0 tcp 的包

iptables -A INPUT -i eth0 -s "$BLOCK_THIS_IP" -j DROP
iptables -A INPUT -i eth0 -p tcp -s "$BLOCK_THIS_IP" -j DROP

4. 允许所有 SSH 的连接请求

例:允许所有来自外部的 SSH 连接请求,即只允许进入 eth0 接口,并且目标端口为 22 的数据包

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

5. 仅允许来自指定网络的 SSH 连接请求

例:仅允许来自于 192.168.100.0/24 域的用户的 ssh 连接请求

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

6. 允许 http 和 https 的连接请求

例:允许所有来自 web – http 的连接请求

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

例:允许所有来自 web – https 的连接请求

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

7. 使用 multiport 将多个规则结合在一起

允许多个端口从外界连入,除了为每个端口都写一条独立的规则外,我们可以用 multiport 将其组合成一条规则。如下所示:

例:允许所有 ssh,http,https 的流量访问

iptables -A INPUT -i eth0 -p tcp -m multiport --dports 22,80,443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -m multiport --sports 22,80,443 -m state --state ESTABLISHED -j ACCEPT

8. 允许从本地发起的 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

请注意, 这与允许 ssh 连入的规则略有不同。本例在 OUTPUT 链上,我们允许 NEW 和 ESTABLISHED 状态。在 INPUT 链上,我们只允许 ESTABLISHED 状态。ssh 连入的规则与之相反。

9. 仅允许从本地发起到一个指定的网络域的 SSH 请求

例:仅允许从内部连接到网域 192.168.100.0/24

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

10. 允许从本地发起的 HTTPS 连接请求

下面的规则允许输出安全的网络流量。如果你想允许用户访问互联网,这是非常有必要的。在服务器上,这些规则能让你使用 wget 从外部下载一些文件

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

注:对于 HTTP web 流量的外联请求,只需要将上述命令中的端口从 443 改成 80 即可。

11. 负载平衡传入的网络流量

使用 iptables 可以实现传入 web 流量的负载均衡,我们可以传入 web 流量负载平衡使用 iptables 防火墙规则。
例:使用 iptables nth 将 HTTPS 流量负载平衡至三个不同的 ip 地址。

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

12. 允许外部主机 ping 内部主机

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

13. 允许内部主机 ping 外部主机

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

14. 允许回环访问

例:在服务器上允许 127.0.0.1 回环访问。

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

15. 允许内部网络域外部网络的通信

防火墙服务器上的其中一个网卡连接到外部,另一个网卡连接到内部服务器,使用以下规则允许内部网络与外部网络的通信。此例中,eth1 连接到外部网络(互联网),eth0 连接到内部网络(例如:192.168.1.x)。

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

16. 允许出站的 DNS 连接

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

17. 允许 NIS 连接

如果你使用 NIS 管理用户帐户,你需要允许 NIS 连接。如果你不允许 NIS 相关的 ypbind 连接请求,即使 SSH 连接请求已被允许,用户仍然无法登录。NIS 的端口是动态的,先使用命令 rpcinfo –p 来知道端口号,此例中为 853 和 850 端口。

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

注:当你重启 ypbind 之后端口将不同,上述命令将无效。有两种解决方案:1)使用你 NIS 的静态 IP 2)编写 shell 脚本通过“rpcinfo – p”命令自动获取动态端口号, 并在上述 iptables 规则中使用。

18. 允许来自指定网络的 rsync 连接请求

例:允许来自网络 192.168.101.0/24 的 rsync 连接请求

iptables -A INPUT -i eth0 -p tcp -s 192.168.101.0/24 --dport 873 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 873 -m state --state ESTABLISHED -j ACCEPT

19. 允许来自指定网络的 MySQL 连接请求

很多情况下,MySQL 数据库与 web 服务跑在同一台服务器上。有时候我们仅希望 DBA 和开发人员从内部网络(192.168.100.0/24)直接登录数据库,可尝试以下命令:

iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT

20. 允许 Sendmail, Postfix 邮件服务

Sendmail 和 postfix 都使用了 25 端口,因此我们只需要允许来自 25 端口的连接请求即可。

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

21. 允许 IMAP 和 IMAPS

例:允许 IMAP/IMAP2 流量,端口为 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

22. 允许 POP3 和 POP3S

例:允许 POP3 访问

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 访问

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

23. 防止 DoS 攻击

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

上述例子中:
-m limit: 启用 limit 扩展
–limit 25/minute: 允许最多每分钟 25 个连接(根据需求更改)。
–limit-burst 100: 只有当连接达到 limit-burst 水平 (此例为 100) 时才启用上述 limit/minute 限制。

24. 端口转发

例:将来自 422 端口的流量全部转到 22 端口。

这意味着我们既能通过 422 端口又能通过 22 端口进行 ssh 连接。启用 DNAT 转发。

iptables -t nat -A PREROUTING -p tcp -d 192.168.102.37 --dport 422 -j DNAT --to 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

25. 记录丢弃的数据表

第一步:新建名为 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

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-25发表,共计6629字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中