赞
踩
netfilter
它处于系统内核空间,和操作系统离得是最近的。- 在 ccentos7 系统下,防火墙它又做了改进
- firewalld软件,又替代了 iptables 工具。
- iptables 是把用户配置的防火墙规则,交给内核层的 netfilter工具去处理
- firewalld 服务把用户配置的防火墙规则,交给内核层的 nftables 网络过滤器工具去处理
- 两个工具二选一即可,用哪个都可以
-
- 下一节介绍 iptables 如何去用,如何去写规则?
- # 查看防火墙规则 流量把控,
- iptables -L # 这条命令是查看默认防火墙规则
-
- root@ubuntu-master:~# iptables -L
- Chain INPUT (policy ACCEPT) # 默认输入策略 默认链的输入是全部放行 第一条链
- target prot opt source destination
-
- Chain FORWARD (policy ACCEPT) # 默认转发链是放行的
- Chain FORWARD (policy DROP) # 转发策略 转发链 策略下降
- target prot opt source destination
- DOCKER-USER all -- anywhere anywhere
- DOCKER-ISOLATION-STAGE-1 all -- anywhere anywhere
- ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
- DOCKER all -- anywhere anywhere
- ACCEPT all -- anywhere anywhere
- ACCEPT all -- anywhere anywhere
-
- Chain OUTPUT (policy ACCEPT) # 默认输出策略 默认输出链也是放行的
- target prot opt source destination
-
- Chain DOCKER (1 references)
- target prot opt source destination
-
- Chain DOCKER-ISOLATION-STAGE-1 (1 references)
- target prot opt source destination
- DOCKER-ISOLATION-STAGE-2 all -- anywhere anywhere
- RETURN all -- anywhere anywhere
-
- Chain DOCKER-ISOLATION-STAGE-2 (1 references)
- target prot opt source destination
- DROP all -- anywhere anywhere
- RETURN all -- anywhere anywhere
-
- Chain DOCKER-USER (1 references)
- target prot opt source destination
- RETURN all -- anywhere anywhere
- root@ubuntu-master:~#
- 语法
- iptables (选项)(参数)
-
- 这些选项指定执行明确的动作:若指令行下没有其他规定,该行只能指定一个选项,对于长格式的命令和选项名,所用字母长度只...
-
- -A -append
- 在所选择的链来添加一条或更多规则。当源(地址) 或者/与 目的(地址)转换为多于一个(多个)地址时,这条规则会加到所有可能的地址(组合)后面
-
- -D -delete
- 从所选链中删除一条或更多规则。这条命令可以有两种方法:可以把被删除规则 指定为链中的序号(第一条序号为1),或者指定为要匹配的规则
-
- -R -replace
- 从选中的链中取代一条规则。如果源(地址)或者/与 目的(地址)被转换为多地址,该命令会失败。规则序号从1开始。
-
- -I -insert
- 根据给出的规则序号向所选链中插入一条或更多规则。所以,如果规则序号为1,规则会被插入链的头部。这也是不指定规则序号...
-
- -L -list
- 显示所选链的所有规则。如果没有选择链,所有链将被显示。也可以和 z 选项一起使用,这时链会被自动列出和归零。精确输出...
-
- -F -flush
- 清空所选链。这等于把所有规则一个个的删除。
-
- --Z -zero
- 把所有链的包及字节的计数器清空。它可以和 -L 配合使用,在清空前察看计数器,请参-前文。
-
- -N -new-chain
- 根据给出的名称建立一个新的用户定义链。这必须保证没有同名的链存在。
-
- -X -delete-chain
- 删除指定给的用户自定义链。这个链必须没有被引用,如果被引用,在删除之前你必须删除或者替换之有关的规则。如果没有给...
-
- -P -policy
- 设置链的目标规则。
-
- -E -rename-chain
- 根据用户给出的名字对指定链进行重命名,这仅仅是修饰,对整个表的结构没有影响。 TARGES 参数给出一个合法的目标。只...
-
- -h Help
- 帮助。给出当前命令语法非常简短的说明。
-
- p -protocal [!]protocol
- 规则或者包检查(待检查包)的协议,指定协议可以是tcp,udp,icmp中的一个或者全部也可以是数值,代表这些协议中的...
-
- -s -source [!] address[/mask]
- 指定源地址,可以是主机名,网络名和清楚的 IP 地址,mask说明可以是网络掩码,或者清楚的数字,在网络掩码的左边指定网络掩码左边 "1" 的个数,因此,mask 值为 24 等于 255.255.255.0.在指定地址前加上 "1" 说明指定了相反的地址段。标志
- --src 是这个选项的简写。
-
- -d --destination [!] address[/mask]
- 指定目标地址,要获取详细说明请参见 -s 标志的说明。标志 --dst 是这个选项的简写。
-
- -j --jump target
- ( -j 目标跳转)指定规则的目标:也就是说,如果包匹配应当做什么。目标可以是用户自定义链(不是这条规则所在的),某个。。。
-
- -i -in-interface [!] [name]
- (i -进入的(网络) 接口 [!] [名称])这是包经由该接口接收的可选的入口名称,包通过该接口接收(在链 INPUT.FORWARD...)...
-
- -o --out-interface [!] [name]
- (-o --输出接口【名称】)这是包经由该接口送出的可选的出口名称,包通过该口输出(在 链 FORWARD,OUTPUT 和 POSTROUTING...)...
-
- --dport num 匹配目标端口号
- --sport num 匹配来源端口号
iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作
- -s -source [!] address[/mask]
- 指定源地址,可以是主机名,网络名和清楚的IP地址,mask 说明可以是网络掩码或清楚的数字,在网络掩码左边指定网络掩码左边 "1" 的个数,因此,mask 值为24 等于 255.255.255.0.在指定地址前加上 "1" 说明指定了相反的地址段。标志
- --src 是这个选项的简写。
-
- -A -append
- 从所选择的链未添加一条或更多规则,当源(地址)或者/与 目的(地址) 转换 为 多与一个(多个)地址时,这条规则会加到所有可能的地址(组合)后面。
-
- -D -delete
- 从所选链中删除一条或更多规则,这条命令可以有两种方法:可以把被删除规则 指定为链中的序号(第一条序号为1),或者指定为要匹配的规则。
- root@ubuntu-master:~# iptables -L
- Chain INPUT (policy ACCEPT)
- target prot opt source destination
-
- Chain FORWARD (policy DROP)
- target prot opt source destination
-
- Chain OUTPUT (policy ACCEPT)
- target prot opt source destination
- iptables -F
-
- root@ubuntu-master:~# iptables -F
- root@ubuntu-master:~#
- iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -j REJECT
-
- 参数解释
- '-A' 指定链 比如 INPUT.OUTPUT,FORWARD,PREROUTING,POSTROUTING
- '-P' 指定网络协议为 icmp
- '--icmp-type 8' 指定 icmp 协议类型
- '8' 表示回旋协议
- '-s' 指定源 IP 网段
- '0/0' 表示所有网段(任何ip,任何子网掩码都可以)
- '-j' 代表你要执行的动作 比如 REJECT
- root@ubuntu-master:~# iptables -D INPUT 1
- root@ubuntu-master:~#
iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -j DROP
iptables -A INPUT -p tcp --dport 80 -j DROP
- # 禁止服务器的 FTP 端口被访问 端口默认是21
- iptables -A INPUT -p tcp --dport 21 -j ACCEPT
-
- # 禁止服务器的 MYSQL 端口被访问 端口默认是3306
- iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
-
-
- 1. 允许某一个客户端连接该服务器的22端口 只允许局域网段连接该服务器
- iptables -A INPUT -s 172.18.22.0/24 -p tcp --dport 22 -j ACCEPT
-
-
-
- 2.拒绝所有其他流量
- # 如下命令慎用,一旦用了,远程连接就禁用了,若要重新恢复远程连接,就必须找到该服务器本体,在服务器是找到下面这条命令执行的结果,然后用 iptables -D INPUT n 删除下面这条命令执行的结果,恢复远程连接。
- iptables -A INPUT -s 0/0 -p tcp --dport 22 -j DROP
-
- # iptables 自上而下的匹配规则,一旦找到匹配,就不在向下匹配
-
- [点击并拖拽以移动]
-
iptables -A INPUT -p tcp -s 172.18.22.0/24 --dport 80 -j REJECT
- iptables -A INPUT -p tcp -s 0/0 --dport 8000:9000 -j REJECT
- iptables -A INPUT -p udp -s 0/0 --dport 8000:9000 -j REJECT
-
- 参数解释
- '8000:9000' 表示从8000端口到9000端口
- '0/0' 表示所有主机网段
-
- 注意:这里要写所有的tcp 和 udp 连接
- 1. 在服务端执行的命令
- # 查看 linux 本地的 iptables 规则
- root@ubuntu-master:~# iptables -L
- Chain INPUT (policy ACCEPT)
- target prot opt source destination
-
- Chain FORWARD (policy DROP)
- target prot opt source destination
-
- Chain OUTPUT (policy ACCEPT)
- target prot opt source destination
-
- Chain DOCKER (0 references)
- target prot opt source destination
-
- Chain DOCKER-ISOLATION-STAGE-1 (0 references)
- target prot opt source destination
-
- Chain DOCKER-ISOLATION-STAGE-2 (0 references)
- target prot opt source destination
-
- Chain DOCKER-USER (0 references)
- target prot opt source destination
-
- # 清空本地防火墙规则
- root@ubuntu-master:~# iptables -F
-
- # 禁止服务器被 ping,服务器拒绝 icmp 协议的流量
- root@ubuntu-master:~# iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -j REJECT
-
- # 再次查看 linux 本地的 iptables 规则 INPUT 链的规则有一条有关 icmp 协议的规则
- root@ubuntu-master:~# iptables -L
- Chain INPUT (policy ACCEPT)
- target prot opt source destination
- REJECT icmp -- anywhere anywhere icmp echo-request reject-with icmp-port-unreachable
-
- Chain FORWARD (policy DROP)
- target prot opt source destination
-
- Chain OUTPUT (policy ACCEPT)
- target prot opt source destination
-
- Chain DOCKER (0 references)
- target prot opt source destination
-
- Chain DOCKER-ISOLATION-STAGE-1 (0 references)
- target prot opt source destination
-
- Chain DOCKER-ISOLATION-STAGE-2 (0 references)
- target prot opt source destination
-
- Chain DOCKER-USER (0 references)
- target prot opt source destination
- root@ubuntu-master:~#
-
- # 删除指定的 iptables 规则
- root@ubuntu-master:~# iptables -D INPUT 1
- root@ubuntu-master:~#
-
- # 再次查看 linux 本地的 iptables 规则 INPUT 链的规则没有
- root@ubuntu-master:~# iptables -L
- Chain INPUT (policy ACCEPT)
- target prot opt source destination
-
- Chain FORWARD (policy DROP)
- target prot opt source destination
-
- Chain OUTPUT (policy ACCEPT)
- target prot opt source destination
-
- Chain DOCKER (0 references)
- target prot opt source destination
-
- Chain DOCKER-ISOLATION-STAGE-1 (0 references)
- target prot opt source destination
-
- Chain DOCKER-ISOLATION-STAGE-2 (0 references)
- target prot opt source destination
-
- Chain DOCKER-USER (0 references)
- target prot opt source destination
- root@ubuntu-master:~#
-
- # 服务器禁止 ping 直接丢弃请求,不给于响应 DROP
- root@ubuntu-master:~# iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -j DROP
-
- # 再次查看 linux 本地的 iptables 规则 INPUT 链的规则有一条有关 icmp 协议的规则
- root@ubuntu-master:~# iptables -L
- Chain INPUT (policy ACCEPT)
- target prot opt source destination
- DROP icmp -- anywhere anywhere icmp echo-request
-
- Chain FORWARD (policy DROP)
- target prot opt source destination
-
- Chain OUTPUT (policy ACCEPT)
- target prot opt source destination
-
- Chain DOCKER (0 references)
- target prot opt source destination
-
- Chain DOCKER-ISOLATION-STAGE-1 (0 references)
- target prot opt source destination
-
- Chain DOCKER-ISOLATION-STAGE-2 (0 references)
- target prot opt source destination
-
- Chain DOCKER-USER (0 references)
- target prot opt source destination
- root@ubuntu-master:~#
-
- # 禁止访问服务器的 80 端口
- root@ubuntu-master:~# iptables -A INPUT -p tcp --dport 80 -j DROP
- root@ubuntu-master:~# iptables -L
- Chain INPUT (policy ACCEPT)
- target prot opt source destination
- DROP tcp -- anywhere anywhere tcp dpt:http
-
- Chain FORWARD (policy DROP)
- target prot opt source destination
-
- Chain OUTPUT (policy ACCEPT)
- target prot opt source destination
-
- Chain DOCKER (0 references)
- target prot opt source destination
-
- Chain DOCKER-ISOLATION-STAGE-1 (0 references)
- target prot opt source destination
-
- Chain DOCKER-ISOLATION-STAGE-2 (0 references)
- target prot opt source destination
-
- Chain DOCKER-USER (0 references)
- target prot opt source destination
- root@ubuntu-master:~#
-
-
- # 指定允许的 IP 地址网段连接该服务器的22端口,指定客户端进行远程连接,拒绝所有其他的流量
-
- # 允许某一个客户端连接该服务器的22端口 只允许局域网段连接该服务器
- root@ubuntu-master:~# iptables -A INPUT -s 172.18.22.0/24 -p tcp --dport 22 -j ACCEPT
- root@ubuntu-master:~# iptables -L
- Chain INPUT (policy ACCEPT)
- target prot opt source destination
- DROP tcp -- anywhere anywhere tcp dpt:http
- ACCEPT tcp -- 172.18.22./24 anywhere tcp dpt:ssh
-
- Chain FORWARD (policy DROP)
- target prot opt source destination
-
- Chain OUTPUT (policy ACCEPT)
- target prot opt source destination
-
- Chain DOCKER (0 references)
- target prot opt source destination
-
- Chain DOCKER-ISOLATION-STAGE-1 (0 references)
- target prot opt source destination
-
- Chain DOCKER-ISOLATION-STAGE-2 (0 references)
- target prot opt source destination
-
- Chain DOCKER-USER (0 references)
- target prot opt source destination
- root@ubuntu-master:~#
-
- # 拒绝所有其他流量
- 拒绝所有其他流量
- # 如下命令慎用,一旦用了,远程连接就禁用了,若要重新恢复远程连接,就必须找到该服务器本体,在服务器是找到下面这条命令执行的结果,然后用 iptables -D INPUT n 删除下面这条命令执行的结果,恢复远程连接。
- iptables -A INPUT -s 0/0 -p tcp --dport 22 -j DROP
-
- # iptables 自上而下的匹配规则,一旦找到匹配,就不在向下匹配
-
-
-
- # 禁止指定的机器,访问本机 80 端口
- root@ubuntu-master:~# iptables -A INPUT -p tcp -s 172.18.22.0/24 --dport 80 -j REJECT
- root@ubuntu-master:~# iptables -L
- Chain INPUT (policy ACCEPT)
- target prot opt source destination
- REJECT tcp -- 172.18.22.0/24 anywhere tcp dpt:http reject-with icmp-port-unreachable
-
- Chain FORWARD (policy DROP)
- target prot opt source destination
-
- Chain OUTPUT (policy ACCEPT)
- target prot opt source destination
-
- Chain DOCKER (0 references)
- target prot opt source destination
-
- Chain DOCKER-ISOLATION-STAGE-1 (0 references)
- target prot opt source destination
-
- Chain DOCKER-ISOLATION-STAGE-2 (0 references)
- target prot opt source destination
-
- Chain DOCKER-USER (0 references)
- target prot opt source destination
- root@ubuntu-master:~#
-
-
-
-
-
-
- ---------客户端-----
- 1.执行ping命令
-
- # 没有在服务端添加 REJECT 之前,是可以 ping 通的
- root@ubuntu-node:~# ping 172.18.22.128
- PING 172.18.22.128 (172.18.22.128) 56(84) bytes of data.
- 64 bytes from 172.18.22.128: icmp_seq=1 ttl=64 time=1.16 ms
- ---172.18.22.128 ping statistics ---
- 9 packets transmitted, 9 received, 0% packet loss, time 8155ms
- rtt min/avg/max/mdev = 0.243/0.463/1.162/0.270 ms
-
-
- # 在服务端添加 REJECT 之后,服务器返回目的地不可达
- root@ubuntu-node:~# ping 172.18.22.128
- PING 172.18.22.128 (172.18.22.128) 56(84) bytes of data.
- From 172.18.22.128 icmp_seq=1 Destination Port Unreachable
-
- --- 172.18.22.128 ping statistics ---
- 9 packets transmitted, 0 received, +9 errors, 100% packet loss, time 8188ms
-
- # 在服务端添加 DROP 之后,执行 ping 命令 发生了数据包丢失
- root@ubuntu-node:~# ping 172.18.22.128
- PING 172.18.22.128 (172.18.22.128) 56(84) bytes of data.
- ^C
- --- 172.18.22.128 ping statistics ---
- 88 packets transmitted, 0 received, 100% packet loss, time 89095ms
-
- root@ubuntu-node:~# curl 172.18.22.128
-
- root@ubuntu-node:~# curl 172.18.22.128
- curl: (7) Failed to connect to 172.18.22.128 port 80 after 0 ms: Connection refused
- root@ubuntu-node:~#
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。