两个路径下的iptables的区别

本文详细介绍了iptables的基本操作指令、配置文件的使用方法及注意事项,并提供了实际案例帮助理解如何配置防火墙规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.首先介绍一下指令和相关配置文件
启动指令:service iptables start   
重启指令:service iptables restart   
关闭指令:service iptables stop   
  
然后是相关配置:/etc/sysconfig/iptables   
如何操作该配置呢?   
vim /etc/sysconfig/iptables   
然后进去修改即可,修改完了怎么办?这里很多人会想到/etc/rc.d/init.d/iptables save指令,但是一旦你这么干了你刚才的修改内容就白做了。。。   
具体方法是:   
只修改/etc/sysconfig/iptables 使其生效的办法是修改好后先service iptables restart,然后才调用/etc/rc.d/init.d/iptables save,   
因为/etc/rc.d/init.d/iptables save会在iptables服务启动时重新加载,要是在重启之前直接先调用了/etc/rc.d/init.d/iptables save那么你   

的/etc/sysconfig/iptables 配置就回滚到上次启动服务的配置了,这点必须注意!!!  


2.下面介绍一些指令用法(主要还是man iptables看下相关资料才行)
-A:指定链名   
-p:指定协议类型   
-d:指定目标地址   
--dport:指定目标端口(destination port 目的端口)   
--sport:指定源端口(source port 源端口)   

-j:指定动作类型  


3.如果我不像修改文件直接打命令可以吗,当然没问题,步骤如下:
例如我给SSH加放行的语句:   
添加input记录: iptables -A INPUT -p tcp --dport 22 -j ACCEPT   
添加output记录: iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT   

最后注意需要再执行一下 /etc/init.d/iptables save,这样这两条语句就保存到刚才那个/etc/sysconfig/iptables 文件中了。  


4.接下来说明一下步骤,如果机器不在我身边,我只能SSH进去做iptables规则,那么我必须注意每一步,千万别搞错了,否则就SSH链接不上都有可能!

首先要做的是给咱的SSH进行ACCEPT配置,以免直接无法连接的情况发生:   


1.如果SSH端口是22(这里不建议用默认端口最好改掉SSH端口)   
iptables -A INPUT -p tcp --dport 22 -j ACCEPT   
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT   
注意要/etc/rc.d/init.d/iptables save,以下每一步都最好执行一遍此语句,以下不再累述。   
  
2.vim /etc/sysconfig/iptables确定是否已经加入配置,可以的话执行service iptables restart重启后生效   
  
3.下面是很危险的操作,如果你第一步没做就会直接可能导致你连不上SSH,此步骤前切记执行第一步!!!   
iptables -P INPUT DROP    
iptables -P OUTPUT DROP    
iptables -P FORWARD DROP   
这个步骤是把所有不符合自己配置的规则ACCEPT的连接全部DROP掉,执行完以后如果咱SSH还没掉,那么谢天谢地,安全了,重启下iptables后继续下面的配置!   
  
4.下面咱就不细说了,具体就是看自己服务器要开放哪些端口或者是要访问哪些端口来做具体的配置,下面是我自己的机器的配置:   
  
/etc/sysconfig/iptables文件配置如下:   
# Generated by iptables-save v1.4.7 on Fri Mar  2 19:59:43 2012   
*filter   
:INPUT DROP [0:0]   
:FORWARD DROP [0:0]   
:OUTPUT DROP [8:496]   
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT   
#ping使用的端口   
-A INPUT -p icmp -j ACCEPT   
-A INPUT -i lo -j ACCEPT   
-A INPUT -s 127.0.0.1/32 -d 127.0.0.1/32 -j ACCEPT   
-A INPUT -s 192.168.2.200/32 -d 192.168.2.200/32 -j ACCEPT   
#允许服务器自己的SSH(对外部请求来说服务器是目标所以使用--dport)   
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT   
#80端口不用说了吧,服务器网站访问端口   
-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 11211 -j ACCEPT   
-A INPUT -p tcp -m tcp --dport 11212 -j ACCEPT   
-A FORWARD -j REJECT --reject-with icmp-host-prohibited   
#53端口是DNS相关,TCP和UDP都要配置   
-A INPUT -p tcp -m tcp --dport 53 -j ACCEPT   
-A INPUT -p udp -m udp --dport 53 -j ACCEPT   
#ping使用的端口   
-A OUTPUT -p icmp -j ACCEPT   
-A OUTPUT -s 127.0.0.1/32 -d 127.0.0.1/32 -j ACCEPT   
-A OUTPUT -s 192.168.2.200/32 -d 192.168.2.200/32 -j ACCEPT   
#允许服务器SSH到其他机器(使用外部端口就使用--dport)   
-A OUTPUT -p tcp -m tcp --dport 22 -j ACCEPT   
#允许服务器自己的SSH(自已为源输出就使用--sport)   
-A OUTPUT -p tcp -m tcp --sport 22 -j ACCEPT   
#访问外部网站80端口(使用外部端口就使用--dport)   
-A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT   
#如果服务器需要访问外部网站,那么OUTPUT也需要配置53端口(使用外部端口就使用--dport)   
-A OUTPUT -p tcp -m tcp --dport 53 -j ACCEPT   
-A OUTPUT -p udp -m udp --dport 53 -j ACCEPT   
#如果有访问外部邮箱,那么打开邮箱相关端口(使用外部端口就使用--dport)   
-A OUTPUT -p tcp -m tcp --dport 465 -j ACCEPT   
-A OUTPUT -p tcp -m tcp --dport 25 -j ACCEPT   
-A OUTPUT -p tcp -m tcp --dport 110 -j ACCEPT   
#服务器网站访问端口(自已为源输出就使用--sport)   
-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 11211 -j ACCEPT   
-A OUTPUT -p tcp -m tcp --sport 11212 -j ACCEPT   
COMMIT   

# Completed on Fri Mar  2 19:59:43 2012  

5.可能有时候需要删除规则,最简单就是修改一下/etc/sysconfig/iptables然后service iptables restart,最后/etc/rc.d/init.d/iptables save即可。


当然也可以使用指令完成:

在网上找了一下,删除规则的方法:   
语法是: iptables -D chain rulenum [options]   
其中: chain 是链的意思,就是INPUT FORWARD 之类的   
             rulenum 是规则的编号。从1 开始。可以使用  --line-numbers 列出规则的编号   
    
所以,例如上面要删除一个INPUT链的规则的话可以这样:iptables -D INPUT 3   
意思是删除第3条规则。   
还有第二种方法。第二种办法是 -A 命令的映射,不过用-D替换-A。当你的链中规则很复杂,而你不想计算它们的编号的时候这就十分有用了。也就是说,你如何用iptables -A.... 语句定义了一个规则,则删除此规则时就用 -D 来代替- A  其余的都不变即可。   
======================   
说一下上面的 --line-numbers 选项,如下面的命令:   
iptables -L INPUT --line-numbers   列出INPUT 链所有的规则   
num  target     prot opt source               destination            
1    REJECT     tcp  --  anywhere             anywhere            tcp dpt:microsoft-ds reject-with icmp-port-unreachable   
2    REJECT     tcp  --  anywhere             anywhere            tcp dpt:135 reject-with icmp-port-unreachable   
3    REJECT     tcp  --  anywhere             anywhere            tcp dpt:netbios-ssn reject-with icmp-port-unreachable   
  
...   
...   
删除指定行规则:   

[root@localhost rc.d]# iptables -D INPUT 4  


  6.最后补充一下,如果想针对某IP进行单独开放端口可以如下配置:
如果我需要对内网某机器单独开放mysql端口,应该如下配置:   
iptables -A INPUT -s 192.168.2.6 -p tcp -m tcp --dport 3306 -j ACCEPT   

iptables -A OUTPUT -s 192.168.2.6 -p tcp -m tcp --sport 3306 -j ACCEPT  


7.彻底禁止某IP访问:
#屏蔽单个IP的命令是   
iptables -I INPUT -s 123.45.6.7 -j DROP   
#封整个段即从123.0.0.1到123.255.255.254的命令   
iptables -I INPUT -s 123.0.0.0/8 -j DROP   
#封IP段即从123.45.0.1到123.45.255.254的命令   
iptables -I INPUT -s 124.45.0.0/16 -j DROP   
#封IP段即从123.45.6.1到123.45.6.254的命令是   
iptables -I INPUT -s 123.45.6.0/24 -j DROP   
指令I是insert指令 但是该指令会insert在正确位置并不像A指令看你自己的排序位置,因此用屏蔽因为必须在一开始就要加载屏蔽IP,所以必须使用I命令加载,然后注意执行/etc/rc.d/init.d/iptables save进行保存后重启服务即可  
### 可能原因分析 两台主机配置 `iptables` 后仍无法互相 ping 通,可能涉及以下几个方面: 1. **防火墙规则未正确设置** 如果 `iptables` 防火墙规则阻止了 ICMP 数据包的传输,则可能导致无法 ping 通。ICMP 协议用于网络诊断工具(如 ping 和 traceroute),因此需要确保允许 ICMP 流量通过防火墙[^1]。 2. **IP 地址冲突或子网匹配** 主机之间的通信依赖于 IP 地址和子网掩码的正确配置。如果两台主机在同一子网中(例如 NAT 模式下的虚拟机宿主机),则需确保它们能够相互通信,通常可以通过调整 IP 地址前缀来实现[^2]。 3. **路由问题** 当目标可达时,可能会收到 “Destination Host Unreachable” 的错误消息。这表明数据包未能找到通往目标设备的有效路径,可能是由于缺少必要的静态路由条目所致[^3]。 4. **物理层/链路层故障** 虽然题目提到的是软件层面 (`iptables`) 导致的问题,但仍需排除硬件连接上的潜在障碍,比如网卡驱动异常或者交换机端口状态良等情况。 --- ### 解决方案 #### 方法一:修改 iptables 规则以支持 ICMP 请求 为了使两台机器间可以正常执行 Ping 命令操作,应当开放相应的 ICMP 类型流量处理策略。具体做法如下所示: ```bash # 清除现有针对icmp协议的所有限制条件 iptables -D INPUT -p icmp --icmp-type echo-request -j DROP iptables -D OUTPUT -p icmp --icmp-type echo-reply -j DROP # 添加新的接受规则到INPUT链表里去接纳外部发来的请求报文; iptables -A INPUT -p icmp --icmp-type any -j ACCEPT # 对OUTPUT方向也做同样的设定以便回应对方询问过来的信息。 iptables -A OUTPUT -p icmp --icmp-type any -j ACCEPT ``` 上述脚本片段的作用在于移除了之前可能存在的一些屏蔽措施并重新定义了一套宽松些的安全框架让双方都能顺利接收彼此发出的数据包。 #### 方法二:验证网络基础架构状况良好无误 确认所有参测试环节中的实体均已妥善接入局域环境之中,并且其各自分配得到独一无二有效的IPv4地址资源;另外还要留意是否存在其他第三方应用程序干扰到了正常的业务流程运行过程当中去了。 #### 方法三:检查路由表项是否完备合理 利用命令行工具查看当前系统的默认出口以及特定目的地所对应的下一跳节点信息是否有缺失现象发生。假如发现确实存在空白区域的话就应及时补充进去恰当的内容才行啊!以下是Linux平台下常用的几个指令示范例子供参考学习之用哦~ ```bash route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.1 dev eth0 #增加一条前往指定网段的新记录 ip route show table main | grep ^default #查询缺省网关详情情况如何呢? traceroute www.google.com #定位整个访问链条上每一个中间环节的表现特性怎样啦? ``` 以上这些技巧可以帮助我们快速定位出到底是哪个部分出了差错从而采取针对性更强的办法来进行修复工作咯~ --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lm_y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值