20个Linux防火墙[iptables]应用技巧[转]

1.显示防火墙的状态

以root权限运行下面的命令:

  1. # iptables -L -n -v

参数说明:

  • -L:列出规则。
  • -v:显示详细信息。此选项会显示接口名称、规则选项和TOS掩码,以及封包和字节计数。
  • -n:以数字形式显示IP地址和端口,不使用DNS解析。

如果希望输出的结果中显示行号,可以运行:

  1. # iptables -L -n -v --line-nmubers

这样,就可以按照行号在防火墙中添加、删除规则。

要显示输入或输出链规则,可以运行:

  1. # iptables -L INPUT -n -v
  2. # iptables -L OUTPUT -n -v --line-numbers

2.停止、开启和重启防火墙

如果你使用的是RHEL/Fedora/CentOS系统,可以运行:

  1. # service iptables stop
  2. # service iptables start
  3. # service iptables restart

我们也可以使用iptables命令停止防火墙并删除所有规则:

  1. # iptables -F
  2. # iptables -X
  3. # iptables -t nat -F
  4. # iptables -t nat -X
  5. # iptables -t mangle -F
  6. # iptables -t mangle -X
  7. # iptables -P INPUT ACCEPT
  8. # iptables -P OUTPUT ACCEPT
  9. # iptables -P FORWARD ACCEPT

参数说明:

  • -F:删除所有的规则
  • -X:删除链
  • -t table_name:匹配表(称为nat或mangle)
  • -P:设置默认策略(如DROP、REJECT或ACCEPT)

3.删除防火墙规则

以带行号的形式显示已有的防火墙规则,请运行:

  1. # iptables -L INPUT -n --line-numbers
  2. # iptables -L OUTPUT -n --line-numbers
  3. # iptables -L OUTPUT -n --line-numbers | less
  4. # iptables -L OUTPUT -n --line-numbers | grep 202.54.1.1

下面我们使用行号删除规则:

  1. # iptables -D INPUT 4

将IP地址202.54.1.1从规则中删除:

  1. # iptables -D INPUT -s 202.54.1.1 -j DROP

参数说明:

  • -D:从选择的链中删除一条或多条规则

4.插入防火墙规则

首先运行下面的命令:

  1. # iptables -L INPUT -n --line-numbers

得到运行结果:

  1. Chain INPUT (policy DROP)
  2. num  target    prot opt source     destination
  3. 1   DROP      all  --  202.54.1.1  0.0.0.0/0
  4. 2   ACCEPT    all  --  0.0.0.0/0    0.0.0.0/0

在行1和行2之间插入规则:

  1. # iptables -I INPUT 2 -s 202.54.1.2 -j DROP

查看更新后的规则,会发现插入成功,下面是示例:

  1. Chain INPUT (policy DROP)
  2. Num  target    prot opt source    destination
  3. 1     DROP    all  --  202.54.1.1  0.0.0.0/0
  4. 2     DROP    all  --  202.54.1.2  0.0.0.0/0
  5. 3     ACCEPT  all  --  0.0.0.0/0    0.0.0.0/0

5.保存防火墙规则

在RHEL/Fedora/CentOS Linux下,可以使用下面的命令保存防火墙规则:

  1. # service iptables save

在其它Linux发行版(如Ubuntu)上,可以使用iptables-save命令保存防火墙规则:

  1. # iptables-save > /root/my.active.firewall.rules
  2. # cat /root/my.active.firewall.rules

6.重新加载防火墙规则

我们可以使用iptables-restore命令重新加载使用iptables-save命令保存的防火墙规则:

  1. # iptables-restore < /root/my.active.firewall.rules

我们还可以利用这种特性来快速部署防火墙规则。

7.设置默认防火墙策略

我们首先来配置一个防火墙策略,它默认丢弃所有的网络数据包:

  1. # iptables -P INPUT DROP
  2. # iptables -P OUTPUT DROP
  3. # iptables -P FORWARD DROP
  4. # iptables -L -v -n
  5. #连接失败,因为防火墙丢弃所有的网络数据包
  6. # ping cyberciti.biz
  7. # wget http://www.kernel.org/pub/linux/kernel/v3.0/testing/linux-3.2-rc5.tar.bz2

在此基础上,我们只关闭入站连接:

  1. # iptables -P INPUT DROP
  2. # iptables -P FORWARD DROP
  3. # iptables -P OUTPUT ACCEPT
  4. # iptables -A INPUT -m state --state NEW,ESTABLISHED -j ACCEPT
  5. # iptables -L -v -n
  6. #ping和wget可以正常工作
  7. # ping cyberciti.biz
  8. # wget http://www.kernel.org/pub/linux/kernel/v3.0/testing/linux-3.2-rc5.tar.bz2

8.在公网网络接口上停用私有网络地址

我们可以从公网网络接口上删除私有IPv4网段,以防止IP欺骗。运行下面的命令,没有源路由地址的数据包会被丢弃:

  1. # iptables -A INPUT -i eth1 -s 192.168.0.0/24 -j DROP
  2. # iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP

下面是私有网络IPv4地址范围,请确认在公网接口予以屏蔽:

  • 10.0.0.0/8 -j (A)
  • 172.16.0.0/12 (B)
  • 192.168.0.0/16 (C)
  • 224.0.0.0/4 (多播 D)
  • 240.0.0.0/5 (E)
  • 127.0.0.0/8 (回环)

9.屏蔽IP地址访问

如果我们想屏蔽一个IP地址,比如1.2.3.4,可以运行:

  1. # iptables -A INPUT -s 1.2.3.4 -j DROP
  2. # iptables -A INPUT -s 192.168.0.0/24 -j DROP

10.屏蔽入栈端口请求

如果我们想80端口上屏蔽所有的服务请求,可以运行:

  1. # iptables -A INPUT -p tcp --dport 80 -j DROP
  2. # iptables -A INPUT -i eth1 -p tcp --dport 80 -j DROP

只想屏蔽IP地址1.2.3.4对80端口的请求,可以运行:

  1. # iptables -A INPUT -p tcp -s 1.2.3.4 --dport 80 -j DROP
  2. # iptables -A INPUT -i eth1 -p tcp -s 192.168.1.0/24 --dport 80 -j DROP

11.屏蔽出栈IP地址

现在我们来演示如何屏蔽对主机名和IP地址的出栈访问。

首先,我们来获取一个域名的IP地址:

  1. # host -t a cyberciti.biz

输出示例:

  1. cyberciti.biz has address 75.126.153.206

要屏蔽访问域名cyberciti.biz的网络数据包,可以运行:

  1. # iptables -A OUTPUT -d 75.126.153.206 -j DROP

下面是使用子网掩码的示例:

  1. # iptables -A OUTPUT -d 192.168.1.0/24 -j DROP
  2. # iptables -A OUTPUT -o eth1 -d 192.168.1.0/24 -j DROP

下面我们以屏蔽facebook.com为例,进行说明。首先,我们需要facebook的所有IP地址:

  1. # host -t a www.facebook.com

示例输出:

  1. www.facebook.com has address 69.171.228.40

找出IP地址69.171.228.40的CIDR:

  1. # whois 69.171.228.40 | grep CIDR

示例输出:

  1. CIDR:69.171.224.0/19

现在我们来阻止对facebook.com的访问:

  1. # iptables -A OUTPUT -p tcp -d 69.171.224.0/19 -j DROP

我们也可以直接屏蔽域名:

  1. # iptables -A OUTPUT -p tcp -d www.facebook.com -j DROP
  2. # iptables -A OUTPUT -p tcp -d facebook.com -j DROP

12.记录并丢弃数据包

在公网网络接口上记录并丢弃IP地址欺骗数据包:

  1. # iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j LOG --log-prefix "IP_SPOOF A: "
  2. # iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP

默认情况下日志记录在/var/log/messages文件中:

  1. # tail -f /var/log/messages
  2. # grep --color ‘IP SPOOF‘ /var/log/messages

我们还可以用-m参数对日志记录进行限制,以防止日志文件过度膨胀。

  1. # iptables -A INPUT -i eth1 -s 10.0.0.0/8 -m limit --limit 5/m --limit-burst 7 -j LOG --log-prefix "IP_SPOOF A: "
  2. # iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP

13.根据MAC地址允许或阻止数据包的传入

我们可以根据MAC地址允许或阻止数据包的传入:

  1. # iptables -A INPUT -m mac --mac-source 00:0F:EA:91:04:08 -j DROP

14.屏蔽ICMP ping请求

我们可以通过允许下面的命令屏蔽ping请求:

  1. # iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
  2. # iptables -A INPUT -i eth1 -p icmp --icmp-type echo-request -j DROP

也可以按照特定的网段和主机限制ping请求:

  1. # iptables -A INPUT -s 192.168.1.0/24 -p icmp --icmp-type echo-request -j ACCEPT

以下命令只接受受限制的ping请求:

  1. #假定默认INPUT策略为丢弃数据包
  2. # iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
  3. # iptables -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
  4. # iptables -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT
  5. #所有的服务器都对ping请求作出应答
  6. # iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

15.开启端口序列

下面的命令可以允许7000到7010范围内的TCP端口访问:

  1. # iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 7000:7010 -j ACCEPT

16.允许一系列IP地址访问

下面的命令可以允许IP地址范围

  1. #运行IP地址范围192.168.1.100 到192.168.1.200 访问80端口
  2. # iptables -A INPUT -p tcp --destination-port 80 -m iprange --src-range 192.168.1.100-192.168.1.200 -j ACCEPT
  3. #NAT示例
  4. # iptables -t nat -A POSTROUTING -j SNAT --to-source 192.168.1.20-192.168.1.25

17.建立连接并重启防火墙

当重启iptables服务时,它会断开所有已建立的连接。这是因为在重启防火墙时,会卸载IPTABLES_MODULES_UNLOAD模块。

要解决这个问题,可以编辑/etc/sysconfig/iptables-config

  1. IPTABLES_MODULES_UNLOAD = no

18.使用Crit日志级别

  1. # iptables -A INPUT -s 1.2.3.4 -p tcp --destination-port 80 -j LOG --log-level crit

19.屏蔽或开启常见端口

屏蔽或开启常用的TCP、UDP端口:

  1. #可以使用DROP替换ACCEPT,实现端口屏蔽。
  2. #打开22端口(SSH)
  3. # iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
  4. # iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 22 -j ACCEPT
  5. #打开TCP/UDP631端口(打印服务)
  6. # iptables -A INPUT -s 192.168.1.0/24 -p udp -m udp --dport 631 -j ACCEPT
  7. # iptables -A INPUT -s 192.168.1.0/24 -p tcp -m tcp --dport 631 -j ACCEPT
  8. # 打开123端口,允许局域网用户进行NTP时间同步
  9. # iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p udp --dport 123 -j ACCEPT
  10. #打开25端口(SMTP)
  11. # iptables -A INPUT -m state --state NEW -p tcp --dport 25 -j ACCEPT
  12. # 打开DNS端口
  13. # iptables -A INPUT -m state --state NEW -p udp --dport 53 -j ACCEPT
  14. # iptables -A INPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT
  15. #打开http/https端口
  16. # iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
  17. # iptables -A INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT
  18. #打开TCP110端口(POP3)
  19. # iptables -A INPUT -m state --state NEW -p tcp --dport 110 -j ACCEPT
  20. #打开TCP143端口
  21. # iptables -A INPUT -m state --state NEW -p tcp --dport 143 -j ACCEPT
  22. #为局域网用户开启Samba访问
  23. # iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 137 -j ACCEPT
  24. # iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 138 -j ACCEPT
  25. # iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 139 -j ACCEPT
  26. # iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 445 -j ACCEPT
  27. #为局域网用户开启代理服务器访问
  28. # iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 3128 -j ACCEPT
  29. #为局域网用户开启MySQL访问
  30. # iptables -I INPUT -p tcp --dport 3306 -j ACCEPT

20.限制客户端IP的并发连接数

我们可以使用connlimit模块限制客户端IP的并发连接数。下面的命令允许每个客户端只能并发3个ssh连接:

  1. # iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT

设置HTTP并发连接为20个:

  1. # iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 --connlimit-mask 24 -j DROP

参数说明:

  • --connlimit-above 3:连接数超过3个自动匹配
  • --connlimit-mask 24:子网掩码匹配

更好的使用iptables

首先,我们要学会查看man手册:

  1. $ man iptables

我们还可以这样查看帮助:

  1. # iptables -h

我们还可以查看特定命令的帮助:

  1. # iptables -j DROP -h

测试防火墙

测试端口是否开放:

  1. # netstat -tulpn

测试TCP 80端口是否开放:

  1. # netstat -tulpn | grep :80

如果80端口未开放,请确保启动Apache服务器:

  1. # service httpd start

并确保打开iptables防火墙80端口:

  1. # iptables -L INPUT -v -n | grep 80

如果80端口没有开放,可以运行下面的命令:

  1. # iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
  2. # service iptables save

下面使用telnet命令测试是否可以连接到80端口:

  1. $ telnet www.cyberciti.biz 80

下面是示例输出:

  1. Trying 75.126.153.206...
  2. Connected to www.cyberciti.biz.
  3. Escape character is ‘^]‘.
  4. ^]
  5. telnet> quit
  6. Connection closed.

最后,我们也推荐使用嗅探工具(如tcpdump、ngrep)对防火墙设置进行测试。

以上只是一些基本的防火墙配置策略,如果你想构造更复杂的防火墙策略,需要对TCP/IP和Linux内核配置文件sysctl.conf进行更深入的学习。

时间: 2024-10-07 20:50:26

20个Linux防火墙[iptables]应用技巧[转]的相关文章

linux防火墙--iptables(二)

五.filter过滤和转发 a.打开内核的IP转发 # sysctl -w net.ipv4.ip_forward=1 或 # echo 1 > /proc/sys/net/ipv4/ip_forward b.基本匹配条件 ·通用匹配 → 可直接使用,不依赖于其他条件或扩展 → 包括网络协议.IP地址.网络接口等条件 ·隐含匹配 → 要求以特定的协议匹配作为前提 → 包括端口.TCP标记.ICMP类型等条件 类别 选项 用法 通用匹配 协议匹配 -p 协议名 地址匹配 -s 源地址      

Linux防火墙iptables简明教程

前几天微魔部落再次遭受到个别别有用心的攻击者的攻击,顺便给自己充个电,复习了一下linux下常见的防火墙iptables的一些内容,但是无奈网上的很多教程都较为繁琐,本着简明化学习的目的,微魔为大家剔除了许多冗余的内容,提取出尽量多的精华部分成文,和大家共同学习,本文涉及的内容包括如下 Linux防火墙iptables简明教程 1.安装iptables 2.查看现有的iptables规则 3.删除某iptables规则 4.清除现有iptables规则 5.创建规则 6.设置开机启动 7.保存i

linux防火墙--iptables(三)

七.SNAT源地址转换 ·Source Network Address Translation ·修改数据包的源地址 ·仅用于nat表的POSTROUTING链 Example:局域网共享公网IP上网 ·配置的关键策略 → 做完路由选择后,针对来自局域网.即将从外网接口发出去的数据包,将其源IP地址修改为 网关的公网IP地址  # iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth1 -j SNAT --to-source 69.166

linux 防火墙iptables简明教程

前几天微魔部落再次遭受到个别别有用心的攻击者的攻击,顺便给自己充个电,复习了一下linux下常见的防火墙iptables的一些内容,但是无奈网上的很多教程都较为繁琐,本着简明化学习的目的,微魔为大家剔除了许多冗余的内容,提取出尽量多的精华部分成文,和大家共同学习,本文涉及的内容包括如下 Linux防火墙iptables简明教程 1.安装iptables 2.查看现有的iptables规则 3.删除某iptables规则 4.清除现有iptables规则 5.创建规则 6.设置开机启动 7.保存i

关于Linux防火墙iptables的面试问答

关于Linux防火墙'iptables'的面试问答 Nishita Agarwal是Tecmint的用户,她将分享关于她刚刚经历的一家公司(印度的一家私人公司Pune)的面试经验.在面试中她被问及许多不同的问题,但她是iptables方面的专家,因此她想分享这些关于iptables的问题和相应的答案给那些以后可能会进行相关面试的人.       所有的问题和相应的答案都基于Nishita Agarwal的记忆并经过了重写.   "嗨,朋友!我叫  Nishita Agarwal.我已经取得了理学

Linux防火墙(Iptables)的开启与关闭

Linux防火墙(iptables)的开启与关闭 Linux中的防火墙主要是对iptables的设置和管理. 1. Linux防火墙(Iptables)重启系统生效 开启: chkconfig iptables on 关闭: chkconfig iptables off 2.Linux防火墙(Iptables) 即时生效,重启后失效 开启: service iptables start 关闭: service iptables stop 需要说明的是对于Linux下的其它服务都可以用以上命令执行

Linux服务器集群架构部署搭建(二)linux防火墙iptables使用及NAT共享

第一章 外网防火墙部署企业应用 1.1 生产中iptables的实际应用 ①iptables是基于内核的防火墙,功能非常强大,基于数据包的过滤!特别是可以在一台非常低的硬件配置下跑的非常好.iptables主要工作在OSI七层的2.3.4层.七层的控制可以使用squid代理+iptables. ②iptabes:生产中根据具体情况,一般,内网关闭,外网打开.大并发的情况不能开iptables,影响性能,iptables是要消耗CPU的,所以大并发的情况下,我们使用硬件防火墙的各方面做的很仔细.s

20个Linux防火墙应用技巧

转载 1.显示防火墙的状态 以root权限运行下面的命令: # iptables -L -n -v 参数说明: -L:列出规则. -v:显示详细信息.此选项会显示接口名称.规则选项和TOS掩码,以及封包和字节计数. -n:以数字形式显示IP地址和端口,不使用DNS解析. 如果希望输出的结果中显示行号,可以运行: # iptables -L -n -v --line-nmubers 这样,就可以按照行号在防火墙中添加.删除规则. 要显示输入或输出链规则,可以运行: # iptables -L IN

【Linux进阶】Linux防火墙iptables详解

前言 防火墙,其实说白了讲,就是用于实现Linux下访问控制的功能的,它分为硬件的或者软件的防火墙两种.无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘.而我们的任务就是需要去定义到底防火墙如何工作,这就是防火墙的策略,规则,以达到让它对出入网络的IP.数据进行检测. 目前市面上比较常见的有3.4层的防火墙,叫网络层的防火墙,还有7层的防火墙,其实是代理层的网关. 对于TCP/IP的七层模型来讲,我们知道第三层是网络层,三层的 防火墙会在这层对源地址和目标地址进行检测.但是对于七层的防火墙