学习如何在Linux中使用Iptables管理系统防火墙


Iptables 和 ip6tables 用于在 Linux 内核中建立、维护和检查 IPv4 和 IPv6 数据包过滤规则的表。可以定义多个不同的表。每个表包含一定数量的内置链,也可以包含用户定义的链。让我们来了解一下如何在 Linux 中使用 Iptables 管理系统防火墙。

安装 IP tables

要安装 IP tables,请使用以下命令:

$sudo apt-get install iptables

示例输出应如下所示:

Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
libecap3 squid-common squid-langpack
Use 'sudo apt autoremove' to remove them.
The following NEW packages will be installed:
iptables
0 upgraded, 1 newly installed, 0 to remove and 261 not upgraded.
Need to get 266 kB of archives.
After this operation, 1,663 kB of additional disk space will be used.
Get:1 http://in.archive.ubuntu.com/ubuntu xenial/main amd64 iptables amd64 1.6.0-2ubuntu3 [266 kB]
...........................................................................

IP tables 帮助

要获取有关 IP tables 的更多选项,请使用以下命令:

$ iptables --help

示例输出应如下所示:

iptables v1.6.0

Usage: iptables -[ACD] chain rule-specification [options]
      iptables -I chain [rulenum] rule-specification [options]
      iptables -R chain rulenum rule-specification [options]
      iptables -D chain rulenum [options]
      iptables -[LS] [chain [rulenum]] [options]
      iptables -[FZ] [chain] [options]
      iptables -[NX] chain
      iptables -E old-chain-name new-chain-name
      iptables -P chain target [options]
      iptables -h (print this help information)
   
Commands:
Either long or short options are allowed.
   --append -A chainAppend to chain
   --check -C chainCheck for the existence of a rule
   --delete -D chainDelete matching rule from chain
   --delete -D chain rulenum
      Delete rule rulenum (1 = first) from chain
   --insert -I chain [rulenum]
      Insert in chain as rulenum (default 1=first)
   --replace -R chain rulenum
      Replace rule rulenum (1 = first) in chain
   --list -L [chain [rulenum]]
      List the rules in a chain or all chains
   --list-rules -S [chain [rulenum]]
..............................................................................

显示防火墙状态

要显示防火墙状态,请使用以下命令:

$ sudo iptables -L -n -v

示例输出应如下所示:

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
   pkts bytes target prot opt in out source destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
   pkts bytes target prot opt in out source destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
   pkts bytes target prot opt in out source destination

启动防火墙

要启动防火墙,请使用以下命令:

$ sudo service iptables start

停止防火墙

要停止防火墙,请使用以下命令:

$ sudo service iptables stop

重启防火墙

要重启防火墙,请使用以下命令:

$sudo service iptables restart

阻止所有连接

要阻止来自某个 IP 地址的所有连接,请使用以下命令:

$ sudo iptables -A INPUT -s 100.100.100.100 -j DROP

在上面的命令中,100.100.100.100 是 IP 地址示例。

阻止特定网站

要阻止特定网站,请使用以下命令:

$ sudo iptables -A OUTPUT -p tcp -d 100.100.100.100/20 -j DROP

在上面的命令中,100.100.100.100/20 是特定 IP 地址的端口。

示例

例如,要阻止名为 www.orkut.com 的网站,请使用以下命令行:

$ sudo whois 104.198.199.158

在上面的命令中,104.198.199.158 表示 Orkut.com 的 IP 地址,结果应如下所示:

...........................
NetRange:          104.196.0.0 - 104.199.255.255
CIDR:              104.196.0.0/14
NetName:           GOOGLE-CLOUD
NetHandle:         NET-104-196-0-0-1
Parent:            NET104 (NET-104-0-0-0-0)
NetType:           Direct Allocation
OriginAS:          AS15169
Organization:      Google Inc. (GOOGL-2)
RegDate:           2014-08-27
Updated:           2015-09-21
.................................................

复制 CIDR 并使用以下命令阻止 orkut.com,如下所示:

$sudo iptables -A OUTPUT -p tcp -d 104.196.0.0/14 -j DROP

保存规则

要保存上述规则,请使用以下命令:

$ sudo /sbin/iptables-save

示例输出应如下所示:

# Generated by iptables-save v1.6.0 on Tue Jan 24 11:14:39 2017
*filter
:INPUT ACCEPT [258:45283]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [233:43953]
-A INPUT -s 10.10.10.10/32 -j DROP
-A OUTPUT -d 104.196.0.0/14 -p tcp -j DROP
-A OUTPUT -d 104.196.0.0/14 -p tcp -j DROP
COMMIT
# Completed on Tue Jan 24 11:14:39 2017

阻止传入 ping 请求

要阻止传入 ping 请求,请使用以下命令:

$ sudo iptables -A INPUT -p icmp -i eth0 -j DROP

丢弃未使用的数据包

要在 IP tables 中丢弃未使用的数据包,请使用以下命令:

$sudo iptables -A INPUT -m conntrack --ctstate INVALID -j DROP

阻止公共网络上的 IP 欺骗

要记录和阻止公共网络上的 IP 欺骗,请使用以下命令:

$sudo iptables -A INPUT -i eth1 -s 100.100.100.100/24 -j LOG --log-prefix "IP_SPOOF A:"
$sudo iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP

接受来自 MAC 地址的流量

要接受来自 MAC 地址的流量,请使用以下命令:

$sudo iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source 00:0F:EA:91:04:07 -j ACCEPT

阻止来自 MAC 地址的流量

要阻止来自 MAC 地址的流量,请使用以下命令:

$sudo iptables -A INPUT -m mac --mac-source 00:0F:EA:91:04:08 -j DROP

接受开放的端口范围

要接受开放的端口范围,请使用以下命令:

$sudo iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 7000:7010 -j ACCEPT

将 HTTP 请求设置到 iptables

要将 HTTP 请求设置到 iptables,请使用以下命令:

$ sudo iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 50 --connlimit-mask 24 -j DROP

在上面的命令中,我们给出了 50 个请求权限。

设置每个客户端主机的 SSH 连接数

要设置每个客户端主机的 SSH 连接数,请使用以下命令:

$sudo iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 10 -j REJECT

在上面的命令中,我们为每个客户端主机设置了 10 个 SSH 连接。

刷新 IP 表规则

要刷新所有 IP 表规则,请使用以下命令:

$ sudo iptables --flush

在本文中,我们学习了如何在 Linux 中使用 iptables 管理系统防火墙。在我们的下一篇文章中,我们将介绍更多基于 Linux 的技巧和提示。敬请关注。

更新于:2020年1月23日

浏览量 322 次

开启你的职业生涯

完成课程获得认证

开始学习
广告