Linux中iptables设置详细

来源:互联网 发布:谛听知乎 编辑:程序博客网 时间:2024/05/29 13:38

http://blog.csdn.net/guochunyang/article/details/49865441


高级讲述:http://www.zsythink.net/archives/1199


无论如何,iptables是一个需要特别谨慎设置的东西,万一服务器不在你身边,而你贸然设置导致无法SSH,那就等着被老板骂吧,呵呵。。。

以下内容是为了防止这种情况发生而写的,当然很初级,不过一般服务器也够用了:


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进行保存后重启服务即可  
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 学车对点对不上怎么办 发现老公有外遇最明智的怎么办 想开个童装店但是没经验怎么办 母乳不够吃宝宝又不喝奶粉怎么办 掉头发很厉害怎么办有什么偏方 红米2a刷死机了怎么办 公司退市我们买的股票怎么办 黑魂3把npc杀了怎么办 摔倒了膝盖摔肿了又痛怎么办 厕所堵了怎么办疏通马桶有妙招 月经不来怎么办如何让它快点来 苹果手机进水了开不了机怎么办 苹果5s进水了怎么办修要多少钱 吃了过期3年的药怎么办 离婚后孩子的抚养费不给怎么办 小车钥匙丢了怎么办配要多少钱 一键启动的车钥匙丢了怎么办 股票退市了手里的股票怎么办 3d硬金以后要换怎么办 偏指甲红肿长在了肉里怎么办 牙齿黄怎么办教你牙齿美白小窍门 2岁孩门牙磕断了怎么办 脸上用了含激素的产品应该怎么办 身上起红疙瘩水泡很痒怎么办 怀疑老公有外遇他不承认怎么办 苹果手机锁屏密码忘了怎么办 黑色t恤洗了掉毛怎么办 老婆要和我离婚我该怎么办 发现老婆有外遇最明智的怎么办 高度近视怎么办我快一千度近 天刀耐久度为0了怎么办 新车被4s店装了怎么办 h面和w面联系线怎么办 造梦西游3到80级怎么办 加95的车加了92怎么办 95的车加92的油怎么办 宝宝六个月了奶水变少了怎么办 六个月的宝宝不爱吃奶粉怎么办 脸上挤黑头留下的小坑怎么办 小孩身上起红疙瘩很痒怎么办 肛门上长了个肉疙瘩怎么办