Linux iptables 整理

news/2024/5/18 14:26:22 标签: linux, udp

Linux iptables 整理

  • 1. Linux iptables概念
    • 1.2 命令格式
    • 1.3命令常用参数
  • 2. iptables 常用命令整理
    • 1. 删除已有规则
    • 2.设置链的默认策略
    • 3. 阻止指定IP地址
    • 4. 允许所有SSH的连接请求
    • 5. 仅允许来自指定网络的SSH连接请求
    • 6.允许http和https的连接请求
    • 7. 使用multiport 将多个规则结合在一起
    • 8. 允许从本地发起的SSH请求
    • 9. 仅允许从本地发起到一个指定的网络域的SSH请求
    • 10. 允许从本地发起的HTTPS连接请求
    • 11. 负载平衡传入的网络流量
    • 12. 允许外部主机ping内部主机
    • 13. 允许内部主机ping外部主机
    • 14. 允许回环访问
    • 15. 允许内部网络域外部网络的通信
    • 16. 允许出站的DNS连接
    • 17. 允许NIS连接
    • 18. 允许来自指定网络的rsync连接请求
    • 19. 允许来自指定网络的MySQL连接请求
    • 20. 允许Sendmail, Postfix邮件服务
    • 21. 允许IMAP和IMAPS
    • 22. 允许POP3和POP3S
    • 23. 防止DoS攻击
    • 24. 端口转发
    • 25. 记录丢弃的数据表
  • 3. iptables 综合练习
    • 3.1 思路整理
    • 3.2 将伪代码转成代码
    • 3.3 将代码部分优化
    • 3.4 测试

1. Linux iptables概念

iptables其实不是真正的防火墙,我们可以把它理解成一个客户端代理,用户通过iptables这个代理,将用户的安全设定执行到对应的”安全框架”中,这个”安全框架”才是真正的防火墙,这个框架的名字叫netfilter
netfilter才是防火墙真正的安全框架(framework),netfilter位于内核空间。
iptables其实是一个命令行工具,位于用户空间,我们用这个工具操作真正的框架。
netfilter/iptables(下文中简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。
Netfilter是Linux操作系统核心层内部的一个数据包处理模块,它具有如下功能:

  • 网络地址转换(Network Address Translate)
  • 数据包内容修改
  • 以及数据包过滤的防火墙功能

所以说,虽然我们使用service iptables start启动iptables”服务”,但是其实准确的来说,iptables并没有一个守护进程,所以并不能算是真正意义上的服务,而应该算是内核提供的功能。

在这里插入图片描述

1.2 命令格式

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

1.3命令常用参数

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

2. iptables 常用命令整理

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.31.0/24域的用户的ssh连接请求

iptables -A INPUT -i eth0 -p tcp -s 192.168.31.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.31.0/24

iptables -A OUTPUT -o eth0 -p tcp -d 192.168.31.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.31.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.31.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.31.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.31.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.3101.0/24的rsync连接请求

iptables -A INPUT -i eth0 -p tcp -s 192.168.3101.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.31.0/24)直接登录数据库,可尝试以下命令:

iptables -A INPUT -i eth0 -p tcp -s 192.168.31.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.31.37 --dport 422 -j DNAT --to 192.168.31.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

3. iptables 综合练习

使用iptable实现: 放行ssh,telnet, ftp, web服务80端口,其他端口服务全部拒绝

3.1 思路整理

用伪代码先整理要求

  1. 其他端口服务全部拒绝
  2. 放行ssh 22端口
  3. 放行 telnet 23端口
  4. 放行ftp 21端口
  5. 放行web 80端口

服务和端口对应如果不清楚可以查看/etc/services

3.2 将伪代码转成代码

iptables -P INPUT DROP
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 23 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

3.3 将代码部分优化

iptables -A INPUT -i eth0 -p tcp -m multiport --dports 21,22,23,80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -P INPUT DROP

3.4 测试

在这里插入图片描述


http://www.niftyadmin.cn/n/1022197.html

相关文章

Shiro学习(7)与Web整合

Shiro提供了与Web集成的支持,其通过一个ShiroFilter入口来拦截需要安全控制的URL,然后进行相应的控制,ShiroFilter类似于如Strut2/SpringMVC这种web框架的前端控制器,其是安全控制的入口点,其负责读取配置(…

字体完全适应页面

如果是完全自适应,那么可以通过JS来控制具体代码如下: (function (doc, win) { var docEl doc.documentElement, resizeEvt orientationchange in window ? orientationchange : resize, recalc function () { var clientWidth docEl.c…

[ 程序员那些事 ]程序员下班后从不关电脑 ?

最近,总有人问我,为什么你电脑总是不关机呢 ?经常不关机对电脑损伤很大的~~~ 虽然我不是程序员,但我也属于半码农呀~~~呜呜~~~ 现在我们来聊聊程序员~~~ 为何程序员下班后从不关电脑 ? 首先把,这开机对于程序员来说…

1)jquery validate 远程验证remote,自定义验证 , 手机号验证 2)bootstrap validate 远程remote验证的方法....

1)jquery validate 远程验证remote,自定义验证 1-1: js 1 <script src"YYFramework/Public/js/jquery-3.1.1.js"></script>2 <script src"YYFramework/Public/js/jquery.validate.min.js"></script>3 <script src"YYFram…

[ 程序员那些事 ]程序员会修电脑?程序员到底是干嘛的?

你能把我的qq找回来吗&#xff1f;你能帮我修电脑吗&#xff1f; 好家伙&#xff0c;这些我都不会。 又有人问&#xff0c;那程序员到底是干什么的&#xff1f; 程序员到底是干啥的&#xff1f; 程序员就是敲代码的&#xff0c;将客户或者领导所需要的程序&#xff0c;软件及…

【立贴为证】二十年后2027,百度眼必然成人眼一个

【立贴为证】二十年后2027&#xff0c;百度眼必然成人眼一个 20年前的今天2017年&#xff0c;W还是一个狼厂的小程序猿&#xff0c;但仍然感觉很幸运&#xff0c;在互联网行业&#xff0c;在B&#xff0c;在做一线技术研发。 年轻时&#xff0c;大学的梦想是组织一个硬件和软件…

[ 应急响应 ]服务器(电脑)受到攻击该如何处理?(一)

[ 应急响应 ]服务器(电脑)受到攻击该如何处理?(一)[ 应急响应 ]服务器(电脑)受到攻击该如何处理?(二)[ 应急响应 ]服务器(电脑)受到攻击该如何处理?(三) 目录 一、应急响应是 安全相关岗位的 必问知识点 我们根据客户的描述&#xff0c;进行判断&#xff1a; 二、那么什么…

Linux NAT原理总结

NAT原理总结1. NAT 简介1.1 IP地址1.2 NAT1.2.1静态NAT1.2.2 动态NAT1.2.3网络地址端口转换NAPT2 NAT原理2.1 地址转换2.2 连接跟踪2.3 端口转换3 应用3.1 数据伪装3.2 端口转发3.3 负载平衡3.4 失效终结3.5 透明代理4 NAT的缺陷4.1 不能处理嵌入式IP地址或端口4.2 不能从公网访…