本文主要是介绍linux防火墙如何配置?一看就会的iptables防火墙新手教程-icode9专业技术文章分享,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
对于一名合格的网络人员来说,自己服务器的安全与否是一个很重要的问题。虽然现在普遍都在使用高防服务器,但是众所周知,高防的成本很高,并且很多攻击尤其是渗透劫持都不是高防能解决的,因此我们就要依靠服务器的基本防火墙来进行这些攻击。今天icode9小编给大家带来保姆级的iptables防火墙教程,大家一起来看看吧。
本文适用于不了解网络或特别是iptables命令的用户。
1. 首先让我们对iptables命令有一个基本的了解。它是适用于 Linux 操作系统的标准防火墙。此命令(带有 t 开关)可以修改任何网络表过滤器、nat、mangle、raw 和security。
这里的filter是默认的表(如果没有传递-t选项的话);它用于数据包过滤。它包含内置链 INPUT(用于发往本地套接字的数据包)、FORWARD(用于通过盒子路由的数据包)和 OUTPUT(用于本地生成的数据包)。
壳1
$ 人iptables2
3 概要4
iptables [-t table] {-A|-C|-D} 链规则规范5
6 规则规范= [匹配...] [目标]7
8 match = -m matchname [每个匹配选项]9
10 target = -j targetname [每个目标选项]11
12 描述13
iptables 和 ip6tables 用于在Linux 内核中建立、维护和检查 IPv4 和 IPv6 包过滤规则表。可以定义几个不同的表。每个表包含许多内置链,也可能14
包含用户定义的链。15
16 每个链都是可以匹配一组数据包的规则列表。每个规则指定如何处理匹配的数据包。这称为“目标”,它可能是跳转到同一表中的用户定义链。17
18
目标19
防火墙规则指定数据包和目标的标准。如果数据包不匹配,则检查链中的下一条规则;如果匹配,则下一条规则由目标的值指定,该目标可以是20
用户定义的链,在iptables-extensions(8) 中描述的目标之一,或者特殊值 ACCEPT、DROP 或 RETURN 之一。21
22
ACCEPT 表示让数据包通过。DROP 表示将数据包丢弃在地板上。RETURN 表示停止遍历此链并在前一个(调用)链中的下一个规则处继续。如果到达内置链的末尾或规则23
在与目标 RETURN 匹配的内置链中,链策略指定的目标决定了数据包的命运。24
25 桌子26
目前有五个独立的表(哪些表随时存在取决于内核配置选项和存在哪些模块)。27
28
-t , --table表29
此选项指定命令应操作的数据包匹配表。如果内核配置了自动模块加载,则将尝试为该表加载适当的模块,如果它不是al-30
准备好了。31
32 表格如下:33
34
筛选:35
这是默认表(如果未传递-t选项)。它包含内置链 INPUT(用于发往本地套接字的数据包)、FORWARD(用于通过盒子路由的数据包)和 OUTPUT(用于本地生成的数据包)。36
37
纳特:38
当遇到创建新连接的数据包时,将查询此表。它由四个内置函数组成:PREROUTING(用于在数据包进入时立即更改数据包)、INPUT(用于更改发往本地sock的数据包)39
ets)、OUTPUT(用于在路由之前更改本地生成的数据包)和 POSTROUTING(用于更改即将发送的数据包)。IPv6 NAT 支持从内核3 .7 开始可用。40
41 粉碎:42
该表用于专门的数据包更改。在内核2 .4.17 之前,它有两个内置链:PREROUTING(用于在路由之前更改传入的数据包)和 OUTPUT(用于在路由之前更改本地生成的数据包)。43
从内核 2 .4.18 开始,还支持其他三个内置链:INPUT(用于进入盒子本身的数据包)、FORWARD(用于改变通过盒子路由的数据包)和 POSTROUTING(用于改变数据包,因为它们是44
即将出门)。45
46 生的:47
该表主要用于结合NOTRACK 目标配置连接跟踪豁免。它以更高的优先级在 netfilter 挂钩上注册,因此在 ip_conntrack 或任何其他挂钩之前被调用48
IP 表。它提供以下内置链: PREROUTING(用于通过任何网络接口到达的数据包) OUTPUT(用于本地进程生成的数据包)49
50 安全:51
此表用于强制访问控制 (MAC) 网络规则,例如由 SECMARK 和 CONNSECMARK 目标启用的规则。强制访问控制由 SELinux 等 Linux 安全模块实现。安全的52
rity 表在过滤表之后被调用,允许过滤表中的任意自主访问控制 (DAC) 规则在MAC 规则之前生效。此表提供以下内置链: INPUT(用于来自53
进入盒子本身),OUTPUT(用于在路由之前更改本地生成的数据包)和 FORWARD(用于更改通过盒子路由的数据包)。54
55
2. 让我们使用python实用程序启动一个基本的HTTP 服务器 。
壳1
$ python3 -m http.server2
在0 .0.0.0 端口8000 (http://0.0.0.0:8000/)上提供 HTTP ...3
3. 我们如何使用 iptables 命令列出防火墙规则。
$ sudo iptables -L -v -n
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
# Explanation of switch used
-v, --verbose
Verbose output.
-n, --numeric
Numeric output. IP addresses and port numbers will be printed in numeric format. By default, the program will try to dis‐
play them as host names, network names, or services (whenever applicable).
-L, --list [chain]
List all rules in the selected chain.
4. 访问 HTTP 服务器侦听我们开始使用 python 实用程序的 8000 端口。
$ curl -s -D - -o /dev/null http://localhost:8000
HTTP/1.0 200 OK
Server: SimpleHTTP/0.6 Python/3.10.6
Date: Sat, 14 Jan 2023 01:28:02 GMT
Content-type: text/html; charset=utf-8
Content-Length: 2571
Note:
-s hides the progress bar
-D - dump headers to stdout indicated by -
-o /dev/null send output (HTML) to /dev/null essentially ignoring it
# In http server, we can see GET entry.
$ python3 -m http.server
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
127.0.0.1 - - [14/Jan/2023 06:00:37] "GET / HTTP/1.1" 200 -
5. 阻止或丢弃到 8000 端口的传入流量。
壳1
$ sudo iptables -A INPUT -p tcp --dport 8000 -j DROP2
3 # 检查与端口的连通性4
$ 远程登录 本地主机80005
正在尝试127 .0.0.1...6
telnet:无法连接到远程主机:连接超时7
8 $ curl -v http://localhost:80009
* 尝试127 .0.0.1:8000...10
* 尝试 ::1:8000...11
* 连接到 ::1 端口8000失败:连接被拒绝12
13
6. 我们可以再次查看规则列表。但是,switch -S 为我们提供了一种方便的方式来列出规则。使用此开关,我们可以看到与应用规则相同格式的规则。这将有助于我们重用规则。
壳1
$ sudo iptables -S |grep DROP2
-A输入-p tcp -m tcp --dport 8000 -j DROP3
4 # 我们也可以只列出 INPUT 链的输出5
$ sudo iptables -L输入-v -n 6
Chain INPUT(策略接受0个数据包,0字节)7
pkts bytes target prot opt in out 源 目的地 8
33 1980下降 tcp -- * * 0 .0.0.0/0 0 .0.0.0/0 tcp dpt:80009
10 # 没有 -n 开关11
$ sudo iptables -L输入-v12
Chain INPUT(策略接受0个数据包,0字节)13
pkts bytes target prot opt in out 源 目的地 14
33 1980 DROP tcp -- 任何任何地方任何地方 tcp dpt:800015
16 # 没有冗长的选项17
$ sudo iptables -L输入-n 18
链输入(策略接受)19
目标保护选择源 目的地 20
丢弃 tcp -- 0 .0.0.0/0 0 .0.0.0/0 tcp dpt:800021
22
7.我们也可以列出带有行号的规则;这在删除特定规则时特别有用。
壳1
$ sudo iptables -L --行号2
链输入(策略接受)3
num target prot opt源 目的地 4
1 DROP tcp -- 任何地方 tcp dpt:80005
6 链 FORWARD(策略 DROP)7
num target prot opt源 目的地 8
1 DOCKER-USER all -- 任何地方 9
2 DOCKER-ISOLATION-STAGE-1 all -- anywhere anywhere 10
3 ACCEPT all -- anywhere anywhere ctstate RELATED, ESTABLISHED11
8. 删除规则。
壳1
# 删除 INPUT 链的第一条规则。2
$ sudo iptables -D输入13
4 # 再次检查连通性。5
$ 远程登录本地主机80006
正在尝试127 .0.0.1...7
连接到本地主机。8
转义字符是'^]'。9
10 $ curl -s -D - -o /dev/null http://localhost:800011 HTTP/1.0 200正常12
服务器:SimpleHTTP/0.6 Python/3.10.613
日期:2023年 1 月14日星期六02:07:12 GMT 14
内容类型:文本/html;字符集= utf-815
内容长度:257116
179. 我们还可以通过使用 -D 开关指定完整规则来删除规则。壳1
$ sudo iptables -A INPUT -p tcp --dport 8000 -j DROP2
3$ sudo iptables -S |grep 输入4
-A输入-p tcp -m tcp --dport 8000 -j DROP5
6$ sudo iptables -D INPUT -p tcp -m tcp --dport 8000 -j DROP7
8$ curl -s -D - -o /dev/null http://localhost:80009
HTTP/1.0 200正常10
服务器:SimpleHTTP/0.6 Python/3.10.611
日期:2023年 1 月14日星期六02:13:39 GMT 12
内容类型:文本/html;字符集= utf-813
内容长度:2571这就是本文的内容。我希望本文能帮助您对 iptables 命令有一个基本的了解。
标签:linux防火墙,iptables,防火墙
来源:
本站声明:
1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。
这篇关于linux防火墙如何配置?一看就会的iptables防火墙新手教程-icode9专业技术文章分享的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!