参考 linux IPtable防火墙 禁止和开放端口 , 写的很有价值,就是排版太烂了
iptbales配置详解:https://www.cnblogs.com/alimac/p/5848372.html
先从需求入手 全局默认规则 input output forward 丢弃
27100、 25565、 80、 22 、 3306 端口允许
允许与目标机 192.168.216.1 的连接
清空iptables表规则 script 1 2 3 # 清理iptables所有的表上的所有规则 iptables -F iptables --flush
设置默认丢弃包的策略。
script 1 2 3 iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT DROP
允许 22 端口的进出 script 1 2 3 4 5 # 允许 INPUT 时,由本机22端口进来的数据 iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 允许 OUTPUT 时,由本机22端口出去的数据 iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT */
-A 指定是 INPUT 还是 OUTPUT -p 指定是什么协议 –dport 目标端口 当数据从外部进入服务器为目标端口 –sport 来源端口 OUTPUT的时候,源端口在本机上。 -j 就是指定是 ACCEPT 接收 或者 DROP 不接收
注意 区分 INPUT –dport 22 与 INPUT –sport 27100 的意义,一个是许可目标端口为22的数据连接进入,另一个是许可来源端口为27100的数据连接进入。
script 1 2 3 4 5 6 # 允许来自 27100 端口的数据连接进入 iptables -A INPUT -p tcp --sport 27100 -j ACCEPT # 允许去往 27100 端口的数据发送出去 iptables -A OUTPUT -p tcp --dport 27100 -j ACCEPT iptables -A INPUT -p udp --sport 27100 -j ACCEPT iptables -A OUTPUT -p udp --dport 27100 -j ACCEPT
允许与 192.168.216.1 宿主机数据链接的全端口自由进出 script 1 2 3 4 5 # -t filter 可以免掉 # iptables -t filter -A INPUT -s 192.168.216.1 -p tcp -j ACCEPT # 在 minecraft 反向代理到主机的时候,连接是主动发起送给主机的,所以 INPUT 配合 -s iptables -A INPUT -s 192.168.216.1 -p tcp -j ACCEPT iptables -A OUTPUT -d 192.168.216.1 -p tcp -j ACCEPT
查看 iptable 的规则 script
移除 iptables 的规则 script 1 2 3 4 5 6 7 8 9 10 # 先查看先有规则的编码 iptables -L -n --line-number /* num target prot opt source destination 1 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:3306 */ # 然后根据编码,移除指定的规则 iptables -D INPUT 1
关于ping的问题 参考来源:
iptables设置ping协议ICMP
linux 中 iptables关于ping的问题
允许来自外部的ping测试 script 1 2 3 4 5 6 # --icmp 省略了 --icmp-type iptables -A INPUT -p icmp --icmp 8 -j ACCEPT #允许请求进来 iptables -A OUTPUT -p icmp --icmp 0 -j ACCEPT #允许响应出去 # 下面这两条也可以 iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
type 8为ping 命令请求信号 type 0为ping 命令响应信号
允许本机ping外部主机 script 1 2 iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
能ping通回环地址(有的称为 环回 loopback) 不设置会导致DNS无法正常关闭等问题
script 1 2 iptables -A INPUT -i lo -p all -j ACCEPT iptables -A OUTPUT -o lo -p all -j ACCEPT
能ping通域名 也就是我主动向外去连接53端口
script 1 2 iptables -A INPUT -p udp --sport 53 -j ACCEPT iptables -A OUTPUT -p udp --dport 53 -j ACCEPT # 参考的那篇博客这里dport写错了,妈逼的
注意保存规则 script 1 service iptables save && service iptables restart
配置完后的文件内容 配置完成之后的 /etc/sysconfig/iptables 文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 # Generated by iptables-save v1.4.21 on Sun Nov 3 14:04:33 2019 *filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT DROP [1:328] -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT -A INPUT -p tcp -m tcp --dport 25565 -j ACCEPT -A INPUT -p tcp -m tcp --sport 27100 -j ACCEPT -A INPUT -p udp -m udp --sport 27100 -j ACCEPT -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT -A INPUT -p icmp -m icmp --icmp-type 0 -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p udp -m udp --sport 53 -j ACCEPT -A INPUT -s 192.168.216.1/32 -p tcp -j ACCEPT -A OUTPUT -p tcp -m tcp --sport 22 -j ACCEPT -A OUTPUT -p tcp -m tcp --sport 80 -j ACCEPT -A OUTPUT -p tcp -m tcp --sport 3306 -j ACCEPT -A OUTPUT -p tcp -m tcp --sport 25565 -j ACCEPT -A OUTPUT -p tcp -m tcp --dport 27100 -j ACCEPT -A OUTPUT -p udp -m udp --dport 27100 -j ACCEPT -A OUTPUT -p icmp -m icmp --icmp-type 0 -j ACCEPT -A OUTPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT -A OUTPUT -o lo -j ACCEPT -A OUTPUT -p udp -m udp --dport 53 -j ACCEPT -A OUTPUT -d 192.168.216.1/32 -p tcp -j ACCEPT COMMIT # Completed on Sun Nov 3 14:04:33 2019
对yum放行 直接/etc/sysconfig/iptables 配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 # Generated by iptables-save v1.4.21 on Tue Nov 5 10:57:26 2019 *filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT DROP [24:1824] ....中间省略......... # ===主要靠下面的配置=== -A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT -A OUTPUT -p tcp -m tcp --dport 443 -j ACCEPT # Dont forget to open for the DNS as well # 下面是允许 dns 的意思 -A OUTPUT -p udp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT -A INPUT -p udp --sport 53 -m state --state ESTABLISHED -j ACCEPT -A OUTPUT -p tcp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT -A INPUT -p tcp --sport 53 -m state --state ESTABLISHED -j ACCEPT # and a line to accept packets from outbound connections # 下面是允许 出站(outbound) 数据包的连接 -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # ===到这=== COMMIT # Completed on Tue Nov 5 10:57:26 2019
解释 -m state –state <状态>
状态:
INVALID: 无效的封包
ESTABLISHED: 已经联机成功的联机状态
NEW: 想要新建立联机的封包状态
RELATED: 这个最常用,表示这个封包是与我们主机发送出去的封包有关,可能是响应封包或者是联机成功之后的传送封包!这个状态很常被设置,因为设定了他之后,只要未来由本机发送出去的封包,即使我们没有设定封包的 INPUT 规则,该有关的封包还是可以进入我们主机,可以简化相当多的设定规则。
参考链接 IPtables not allowing yum in centos 7
iptables参数-m state
对 /etc/sysconfig/iptables 文件内容的介绍 参考来源:https://zhidao.baidu.com/question/564388897.html
1 2 3 4 5 6 7 8 9 10 11 12 :INPUT ACCEPT [0:0] # 该规则表示INPUT表默认策略是ACCEPT :FORWARD ACCEPT [0:0] # 该规则表示FORWARD表默认策略是ACCEPT :OUTPUT ACCEPT [0:0] # 该规则表示OUTPUT表默认策略是ACCEPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 意思是允许进入的数据包只能是刚刚我发出去的数据包的回应,ESTABLISHED:已建立的链接状态。RELATED:该数据包与本机发出的数据包有关。 -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited # 这两条的意思是在INPUT表和FORWARD表中拒绝所有其他不符合上述任何一条规则的数据包。并且发送一条host prohibited的消息给被拒绝的主机。 这个是iptables的默认策略,你也可以删除这些,另外建立符合自己需求的策略。