iptables详细解释


启动:service iptables start
重启:service iptables restart
停止:service iptables stop
相关的配置文件:/etc/sysconfig/iptables  
这里注意 如果是新装机器没有执行过/etc/rc.d/init.d/iptables save 可能是没有iptables文件

[root@localhost ~]# vi /etc/sysconfig/ip 
ip6tables-config  iptables-config     #没有iptables文件
[root@localhost ~]# /etc/rc.d/init.d/iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]

写入iptables文件:/etc/rc.d/init.d/iptables save  /如果没有此命令那么服务器重起 防火墙规则会失效
修改iptables文件写入iptables文件重起服务使iptables生效流程:
vi /etc/sysconfig/iptables--------/etc/rc.d/init.d/iptables save---------service iptables restart

指令的详细信息
-A:指定链名
-p:指定协议类型
-d:指定目标地址
--dport:指定目标端口(destination port 目的端口)
--sport:指定源端口(source port 源端口)
-j:指定动作类型
========
[root@localhost ~]#iptables -F      #清除所有规则链的规则
[root@localhost ~]#iptables -X     #清除所有使用都自定链规则
[root@localhost ~]#iptables -L -n  #查看防火墙状态信息
预设规则 这些一定要在实体机上面操作。如果用22端口连接, 那么就会连不上了
[root@localhost ~]# iptables -P INPUT DROP               #输入的全部阻挡
[root@localhost ~]# iptables -P OUTPUT ACCEPT        #输入的全部放行
[root@localhost ~]# iptables -P FORWARD DROP        #转发的全部阻挡
开始添加规则
1:放行22端口
[root@localhost ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
如果预设规则iptables -P OUTPUT ACCEPT写成iptables -P OUTPUT DROP 那么一定要加上下面这条规则
[root@localhost ~]# iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT
[root@localhost ~]# /etc/rc.d/init.d/iptables save    #写入iptables 文件
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]
[root@localhost ~]# service iptables restart             #重起iptables服务
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]
iptables: Flushing firewall rules:                         [  OK  ]
iptables: Unloading modules:                               [  OK  ]
iptables: Applying firewall rules:                         [  OK  ]
[root@localhost ~]# 
到这里我们就可以顺利的远程通过22端口连接系统操作了。

2:做不同的服务器开放不同的端口
 如果做WEB服务器 开放80端口
     [ root@localhost  ~]#iptables -A INPUT -p tcp --dport 80 -j ACCEPT
      如果做邮件服务器 开放25,110端口
    [ root@localhost ~]#iptables -A INPUT -p tcp --dport 110 -j ACCEPT
    [ root@localhost ~]#iptables -A INPUT -p tcp --dport 25 -j ACCEPT
     如果做FTP服务器 开放21端口
    [ root@localhost ~]#iptables -A INPUT -p tcp --dport 21 -j ACCEPT
    [ root@localhost ~]#iptables -A INPUT -p tcp --dport 20 -j ACCEPT
     如果做DNS服务器 开放53端口
    [ root@localhost ~]#iptables -A INPUT -p tcp --dport 53 -j ACCEPT
3:常用的允许规则
    让服务器通过ICMP
    [ root@localhost ~]# iptables -A INPUT -p icmp -j ACCEPT
   允许loopback!(不然会导致DNS无法正常关闭等问题)
    [ root@localhost  ~]# iptables-A INPUT -i lo -p all -j ACCEPT
4:阻止不安全的端口规则
     减少不安全的端口连接
     [ root@localhost ~]#iptables -A OUTPUT -p tcp --sport 31337 -j DROP
     [ root@localhost ~]#iptables -A OUTPUT -p tcp --dport 31337 -j DROP
     有些些特洛伊木马会扫描端口31337到31340(即黑客语言中的 elite 端口)上的服务。
      既然合法服务都不使用这些非标准端口来通信,阻塞这些端口能够有效地减少你的网络上可能被感染 的机器和它们的远程主服务器进行独立通信的机会
        还有其他端口也一样,像:31335、27444、27665、20034 NetBus、9704、137-139(smb),2049(NFS)端口也应被禁止,
        我在这写的也不全,有兴趣的朋友应该去查一下
5:更详细的规则
    只允许某个IP能过SSH连接我电脑
         [ root@localhost  ~]#iptables -A INPUT -s 192.168.0.3 -p tcp --dport 22 -j ACCEPT
   如果是一个IP段:192.168.0.3/24或192.168.0.1-255

FORWARD链
上面FORWARD链的默认规则是DROP,所以我们就写需要ACCETP(通过)的链,
对正在转发链的监控.开启转发功能,(在做NAT时,FORWARD默认规则是DROP时,必须做)
1:丢弃坏的TCP包 也就是说eth0的包转到eth1 条件只允许状态为RELATED,ESTABLISHED
    [ root@localhost ~]#iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
2:eth0的包转到eth1 所有的包
    [ root@localhost ~]#iptables -A FORWARD -i eth1 -o eh0 -j ACCEPT
3:丢弃坏的TCP包
    [ root@localhost ~]#iptables -A FORWARD -p TCP ! --syn -m state --state NEW -j DROP
4:处理IP碎片数量,防止攻击,允许每秒100个
    [ root@localhost ~]#iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT
5:设置ICMP包过滤,允许每秒1个包,限制触发条件是10个包.
    [ root@localhost ~]#iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT

NAT
查看NAT信息
[root@localhost ~]# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination  

如果你想清除,命令是
 [ root@localhost ~]#iptables -F -t nat
 [ root@localhost ~]#iptables -X -t nat
 [ root@localhost ~]#iptables -Z -t nat
2,添加规则
添加基本的NAT地址转换,添加规则,我们只添加DROP链.因为默认链全是ACCEPT.防止外网用内网IP欺骗
prerouting -i (进站)
postrouting  -o (出站)
PREROUTING是目的地址转换(DNAT),要把别人的公网IP换成你们内部的IP,才让访问到你们内部受防火墙保护的服务器。
POSTROUTING是源地址转换(SNAT),要把你内部网络上受防火墙保护的ip地址转换成你本地的公网地址才能让它们上网。
 [ root@localhost ~]#iptables -t nat -A PREROUTING -i eth0 -s 10.0.0.0/8 -j DROP
 [ root@localhost ~]#iptables -t nat -A PREROUTING -i eth0 -s 172.16.0.0/12 -j DROP
 [ root@localhost ~]#iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.0/16 -j DROP
如果我们想,比如阻止MSN,QQ,BT等的话,需要找到它们所用的端口或者IP,(个人认为没有太大必要)
例:
禁止与211.101.46.253的所有连接
 [ root@localhost ~]#iptables -t nat -A PREROUTING -d 211.101.46.253 -j DROP
禁用FTP(21)端口
 [ root@localhost ~]#iptables -t nat -A PREROUTING -p tcp --dport 21 -j DROP
这样写范围太大了,我们可以更精确的定义.
 [ root@localhost ~]#iptables -t nat -A PREROUTING -p tcp --dport 21 -d 211.101.46.253 -j DROP
这样只禁用211.101.46.253地址的FTP连接,其他连接还可以.如web(80端口)连接.
按照我写的,你只要找到QQ,MSN等其他软件的IP地址,和端口,以及基于什么协议,只要照着写就行了.
最后:
drop非法连接
 [ root@localhost ~]#iptables -A INPUT -m state --state INVALID -j DROP
 [ root@localhost ~]#iptables -A OUTPUT -m state --state INVALID -j DROP
 [ root@localhost ~]#iptables-A FORWARD -m state --state INVALID -j DROP
允许所有已经建立的和相关的连接
 [ root@localhost ~]#iptables-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
 [ root@localhost ~]#iptables-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


你可能感兴趣的:(linux)