linux中的iptables

作者:Garany 发布于:2015-11-04 分类:破万卷书
CentOS上默认是设有iptables规则的,建议你先清除规则,然后把清除后的规则保存:
    # iptables -nvL    查看规则
    # iptables -F    清除当前规则(临时的,重启系统或者重启iptalbes后还会加载已经保存的规则)
    # /etc/init.d/iptables save    保存规则(保存在了/etc/sysconfig/iptables)

1)iptalbes的三个表
filter 表用于过滤包,是系统预设的表,用的最多,内建三个链。
        INPUT作用于进入本机的包。
        OUTPUT作用于本机送出的包。
        FORWARD作用于跟本机无关的包。
nat 表用于网络地址转换,有三个链。
        PREROUTING 链在包刚刚到达防火墙时改变它的目的地址。
        OUTPUT 链改变本地产生的包的目的地址。
        POSTROUTING 链在包就要离开防火墙之前改变其源地址。
mangle 表主要是用于给数据包打标记,然后根据标记去操作哪些包。

2)iptables 基本语法
A. 查看规则:
    # iptables -t nat -nvL
-nvL 即查看该表的规则,
-n表示不针对IP反解析主机名;
-L表示列出的意思;
-v表示列出的信息更加详细。
-t 后面跟表名,不加-t ,则打印filter表的相关信息。
B. 增加规则
    # iptables -A INPUT -s 10.72.11.12 -p tcp --sport 1234 -d 10.72.137.159 --dport 80 -j DROP
增加一条规则,省略-t所以针对的是filter表。
-A 增加一条规则,另外还有-I 插入一条规则(和A一样),-D删除一条规则;
INPUT即链名称,还可以是OUTPUT或者FORWORD;
-s 指定源地址(可以是一个ip段),还有-d :指定目的IP(可以是一个ip段);
-p 协议(tcp, udp, icmp); 
--sport/--dport 后跟源端口/目标端口(跟-p一起使用);
-d 后跟目的IP(主要针对内网或者外网);
-j 后跟动作(DROP即把包丢掉,REJECT即包拒绝;ACCEPT即允许包)
-i :指定网卡;
C. 删除规则:
    # iptables -F    把所有规则全部删除
    # iptables -Z    把包以及流量计数器置零
不加-t默认是针对表filter来操作的
    有时候iptables过多了,想删除某一条规则时,一种比较简单的方法:
    # iptables -nvL --line-numbers  #列出规则标号
    # iptables -D INPUT 1  #删除链名为INPUT,规则号为1的规则
-D 后跟链名,然后是规则num,num就是查看iptables规则时第一列的值。
D. nat表的应用
假设你的机器上有两块网卡eth0和eth1,其中eth0的IP为10.0.2.68,eth1的IP为192.168.1.1 。eth0连接了intnet 但eth1没有连接,现在有另一台机器(192.168.1.2)和eth1是互通的,那么如何设置也能够让连接eth1的这台机器能够连接intnet(即能和10.0.2.68互通)?
    # echo "1" > /proc/sys/net/ipv4/ip_forward
打开路由转发功能
    # iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
iptables对nat表做了一个IP转发的操作
-o 选项后跟设备名,表示出口的网卡,
MASQUERADE表示伪装的意思。 
D. 保存以及备份iptalbes规则
设定的防火墙规则只是保存在内存中,并没有保存到某一个文件中,当系统重启后以前设定的规则就没有了,所以设定好规则后要先保存一下。
    # service iptables save    将防火墙规则保存到 /etc/sysconfig/iptables
需要把防火墙所有规则都清除,使用 iptables-F 命令。但是最好的办法是把防火墙服务停止:
    # service iptables stop
这样防火墙就失效了,但是一旦重新设定规则后(哪怕只有一条),防火墙服务会自动开启。
如果你遇到备份防火墙规则的任务,其实就是要拷贝一份这个文件的副本。
#################################
    # iptables -I INPUT -s 1.1.1.1 -j DROP
插入一条规则,把来自1.1.1.1的所有数据包丢掉。
    # iptables -D INPUT -s 1.1.1.1 -j DROP
删除刚刚插入的规则。
    # iptables -I INPUT -s 2.2.2.2 -p tcp --dport 80 -j DROP
插入一条规则,把来自2.2.2.2的tcp协议到本机80端口的数据包丢掉。--dport/--sport 必须和-p一起使用,否则会出错。
    # iptables -I OUTPUT -p tcp --dport 22 -d 10.0.1.14 -j DROP
插入一条规则,把发送到10.0.2.34的22端口的数据包丢掉。
    # iptables -A INPUT -s 192.168.1.0/24 -i eth0 -j ACCEPT
新建一条规则,把来自192.168.1.0/24网段的作用在eth0上的包放行。
    # iptables -I INPUT -p icmp --icmp-type 8 -j DROP
--icmp-type 这个选项是要跟-p icmp 一起使用的,后面指定类型编号。这个8指的是能在本机ping通其他机器,而其他机器不能ping通本机。

评论列表

李阳博客
2015-11-05 10:14
二货~
Garany
2015-11-06 16:45
@李阳博客:滚滚哒~

我来说说