一、netfilter/iptables概念说明
netfilter: 是集成在linux内核中的模块,对数据包进行过滤、转发等
iptables: 用于管理netfilter模块(netfilter中的表和链)
iptables表 - 四张表 (表中有什么链是固定的)
raw表 | prerouting链、output链 |
---|---|
mangle表 | prerouting链、postrouting链、input链、forward链、output链 |
nat表 | prerouting链、postrouting链、output链 |
filter(默认表) | input链、forward链、output链 |
安装iptables
#yum install -y iptables-devel iptables
或
#yum install iptables* -y
[root@localhost ~]# rpm -qa|grep iptables
iptables-services-1.4.21-34.el7.x86_64
iptables-devel-1.4.21-34.el7.x86_64
iptables-1.4.21-34.el7.x86_64
iptables-utils-1.4.21-34.el7.x86_64
二、iptables命令语法
语法:iptables table command match target/jump
table 参数:
-t filter 指定filter表
-t net 指定net表
-t mangle 指定mangle表
-t raw 指定raw表
command 参数:
-A 顺序添加,添加一条新规则
-D 删除
-R 修改、删除一条新规则,-D后面加一个数字表示删除哪行
-I 插入一条新规则,-I后面加一个数字,表示插入到哪行
-L 查看
-F 清空链中的所有规则
-Z 清除链中使用的规则
-N 以数字的方式显示,前面一般加-L
-X 删除一个自定义链,删除这前要保证此链是空的,而且没有被引用
-P 大写P 设置默认规则
-E 重命令链
match 参数(隐含匹配):
-p 协议,tcp udp icmp,以下四行为-p后面跟的内容
–sport 指定源端口
–dport 指定目标端口
-s 源地址
-d 目的地址
-i 数据包进入的网卡
-o 数据包出口的网卡
-f 文件
动作:
target/jump参数:
-j ACCEPT 允许通过
-j DROP 删除
-j REJECT 不允许通过
DROP直接丢掉
ACCEPT 允许通过
REJECT 丢掉,但是回复信息
LOG --log-prefix"说明信息,自己随便定义",记录日志
SNAT 源地址转换
DNAT 目标地址转换
REDIRECT 重定向
MASQUERAED 地址伪装
扩展匹配:
-m state --state 匹配状态的
-m mutiport --source-port 端口匹配,指定一组端口
-m limit --limit 3/minute 每三分钟一次
-m limit --limit-burst 5 只匹配5个数据包
-m string --string --algo bm|kmp --string"xxx" 匹配字符串
-m time --simestart 8:00 --timestop 1200 表示从哪个时间到哪个时间
-mtime–days 表示哪天
-m mac --mac-source xx:xx:xx:xx:xx:xx 匹配源mac地址
-m layer7 --l7proto qq 表示匹配腾讯QQ的
三、案例 - 开放/禁止端口
开放80端口
[root@localhost ~]# iptables -t filter -A INPUT -m tcp -p tcp --dport 80 -j ACCEPT
允许ping
#iptables -p icmp -j ACCEPT
禁止192.168.1.110访问本机所有端口
-A INPUT -S 192.168.1.110 -j DROP
允许此MAC机器访问22端口
-A INPUT -m mac --mac-source f8:43:41:7e:d6:96 -p tcp --dport 22 -j ACCEPT
限制14:00至18:00可以访问80端口
-A INPUT -m time --timestart 14:00 --timestop 18:00 -p tcp --dport 80 -j ACCEPT
四、转发
查看转发规则
iptables -L -n -t nat
将目标为192.168.1.108(本机) 80端口的数据包转到192.168.1.109的8080端口
[root@localhost ~]# iptables -t nat -A PREROUTING -p tcp -m tcp -d 192.168.1.108 --dport 80 -j DNAT --to-destination 192.168.1.109:8080
[root@localhost ~]# iptables -t nat -A POSTROUTING -p tcp -m tcp -d 192.168.1.109 --dport 8080 -j SNAT --to-source 192.168.1.108
注,--to-source 192.168.1.108后面最好不要加:80,加了会返回时容易超时
开启转发功能
#echo 1 >/proc/sys/net/ipv4/ip_forward
或
[root@localhost subsys]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
#sysctl -p
允许伪装
#iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE
把默认INPUT链规则设置为允许
#iptables -t filter -P INPUT ACCEPT
把默认转发链规则设置为允许
#iptables -P FORWARD ACCEPT
要save保存
------------------------end