防火墙
netfilter/neiptables 的最大优点是它可以配置有状态的防火墙,这是 ipfwadm
和 ipchains 等以前的工具都无法提供的一种重要功能。有状态的防火墙能够
指定并记住为发送或接收信息包所建立的连接的状态。防火墙可以从信息包的
连接跟踪状态获得该信息。在决定新的信息包过滤时,防火墙所使用的这些状态
信息可以增加其效率和速度。这里有四种有效状态,名称分别为 ESTABLISHED 、
INVALID 、 NEW 和 RELATED。
Iptables命令是用来设置、维护和检查Linux内核的IP包过滤规则的。
防火墙的逻辑结构
表(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
转载于:https://blog.51cto.com/nginxs/1201298