防火墙

   netfilter/neiptables 的最大优点是它可以配置有状态的防火墙,这是 ipfwadm

和 ipchains 等以前的工具都无法提供的一种重要功能。有状态的防火墙能够

指定并记住为发送或接收信息包所建立的连接的状态。防火墙可以从信息包的

连接跟踪状态获得该信息。在决定新的信息包过滤时,防火墙所使用的这些状态

信息可以增加其效率和速度。这里有四种有效状态,名称分别为 ESTABLISHED 、

INVALID 、 NEW 和 RELATED。


   Iptables命令是用来设置、维护和检查Linux内核的IP包过滤规则的。

防火墙的逻辑结构

234200477.jpg234200250.png



表(table)

filter:专门用于过滤数据

nat:   用于地址转换(只匹配初始连接数据)

mangle:用于修改数据包内容

raw:   用于在连接追踪前预处理数据


优先级

raw-->mangle-->nat-->filter


链(chain)

FORWARD进行数据转发

INPUT         位于filter表,利用策略匹配目标地址是本机的数据包;

OUTPUT        位于filter表,匹配要穿越本机的数据包;

PREROUTING    位于nat表,用于DNAT(Destination address translation);

POSTROUTING   位于nat表,用于SNAT(Source address translation);




策略语法


iptables [-t table] -A <CHAIN>  [rule]   [-m <match>]    [-j TARGET]


iptables [-t 要操作的表]

           <操作命令>

           [要操作的链]

           [规则号码]

           [匹配条件]

            [-j 匹配到以后的动作]


-I        插入(Insert);

-A        追加(Append);

-D        删除指定条目的策略(delete);

-R        从选中的链中取代一条规则(replace);

-L        显示所选链的策略(list);

-F        清空所选链(flush)这等于把所有规则一个个的删除;

-P        默认策略(POLICY)


-v        详细信息

-x        在 v 的基础上,禁止自动单位换算(K、M)

-n        只显示 IP 地址和端口号码,不显示域名和服务名称

-s        源IP,-s后面加IP

-d        目标IP

-i        数据流的输入输出借口

-j        动作ACCEPT通过,DROP拒绝,REJECT作为对匹配的包的响应,返回一个错误的包,其他情况下和DROP相同;

-p        协议端口tcp,udp

--dport    目标端口

--sport    源端口


例子:

拒绝192.168.2.0/24网段访问

iptables -t filter -A INPUT -s 192.168.2.0/24 -j DROP//当即生效但是重启网卡不保存


保存策略

service iptables save

iptables:将防火墙规则保存到 /etc/sysconfig/iptables:     [确定]


查看策略表

iptables -nvL


REDIRECT 与 DNAT 的区别?


iptables -t nat -A PREROUTING  -i eth0 -p tcp  --dport 80  -j REJECT  --to 3128

把来自eth1设备80端口的数据目标地址转换为192.16.2.1端口为8080

iptables -t nat -A PREROUTING  -i eth1 -p tcp  --dport 80  -j DNAT  --to  192.168.2.1:8080


REDIRECT 是 DNAT 的一个特例, DNAT 的功能更强大



iptables -t filter -A INPUT -i eth0 -p tcp --syn -j DROP



基于ip地址

----------------------------------------------------------------

匹配的标准

IP: -s 192.168.0.0/24

        -d 192.168.0.1

NIC:  -i eth0

        -o eth1

!:      -i  eth0  ! -s 192.168.0.0/24


[root@localhost ~]# iptables -t filter -A INPUT -s 192.168.2.0/24 -j DROP


[root@localhost ~]# iptables -I INPUT ! -s 192.168.3.0/24 -j ACCEPT


[root@localhost ~]# iptables -I INPUT -i eth0 -j ACCEPT


[root@localhost ~]# service iptables save

iptables:将防火墙规则保存到 /etc/sysconfig/iptables:     [确定]



基于服务端口号

------------------------------------------------------

protocol port : -p tcp --dport 80

                      -p udp --sport 53

port range: 0:1024


ICMP: -p icmp --icmp-type host-unreachable


[root@localhost ~]# iptables -A INPUT -s 192.168.2.1 -p tcp --dport 80 -j DROP


默认策略

-P <chain> <ACCEPT|DROP|REJECT>

[root@localhost ~]# iptables -P INPUT ACCEPT


刷新一个chain的所有rule

[root@localhost ~]# iptables -F


基于链接状态,特有的状态防火墙

-----------------------------------------------------------

这里有四种有效状态,名称分别为 ESTABLISHED 、 INVALID 、 NEW 和 RELATED 。   

ESTABLISHED     指出该信息包属于已建立的连接,该连接一直用于发送和接收信息包并且完全有效。

INVALID         状态指出该信息包与任何已知的流或连接都不相关联,它可能包含错误的数据或头。

NEW             意味着该信息包已经或将启动新的连接,或者它与尚未用于发送和接收信息包的连接相关联。

RELATED         表示该信息包正在启动新连接,以及它与已建立的连接相关联。   


[root@localhost ~]#iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

[root@localhost ~]#iptables -A INPUT -m state --state NEW -p tcp --dport 25 -j ACCEPT

[root@localhost ~]#iptables -A INPUT -m state --state NEW -j DROP


----------------------------------------------------------------


192.168.1.1                     192.168.1.2

   A--------------------B

  sip                              dip

sport:随机                       dport:80

  smac                             dmac


iptables -t filter -L --line-numbers -n

iptables -t filter -A INPUT -s 192.168.1.1  -j DROP

iptables -t filter -A INPUT -s 192.168.2.1  -j ACCEPT

iptables -t filter -A INPUT -s 192.168.1.0/24 -j DROP // 192.168.1.0/24指的是192.168.1这个网段

iptables -t filter -F

iptables -t filter -D 3

iptables -t filter -I INPUT 3 -s 192.168.0.12 -j DROP

iptables -t filter -P INPUT -j DROP

iptables -t filter -A INPUT -p icmp jDROP

iptables -A INPUT -p tcp -s 192.168.0.0/24 --dport 22 -j DROP

iptables -A INPUT -p tcp -s ! 192.168.0.0/24 --dport 22 -j DROP

service iptables save             //保存,否则重启电脑就没了


DROP  ACCEPT  REJECT  LOG(匹配就记录日志里)


iptables -t talbe -A  chain      rules       -j target

iptables -t talbe -A  INPUT   -s ip/netmask  -j DROP

                 -I  FORWARD -d ip/netmask     ACCEPT

                     OUTPUT                    REJECT

                 -F

                 -L  -n --line-numbers

                 -D  

                 -P  

protocol: tcp upd icmp


233517102.jpg