码迷,mamicode.com
首页 > 其他好文 > 详细

Iptables基础整理

时间:2017-09-24 00:33:47      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:sgd   配置方法   off   .com   zsh   fss   sea   dtc   生效   

Iptables基础框架

技术分享

Iptables基于内核netfilter安全框架运行,主要有过滤数据包和NAT地址转换功能。

Iptables基本表链结构

filter
INPUT
FORWARD
OUTPUT
 
 
nat
 
 
OUTPUT
PREROUTING
POSTROUTING
mangle
INPUT
FORWARD
OUTPUT
PREROUTING
POSTROUTING
raw
 
 
OUTPUT
PREROUTING
 

Iptables主要通过规则链的方式进行数据包的过滤和转发以及NAT功能,表是具有相同功能的规则链的集合,方便我们进行管理。

Iptables常用条件类型

条件
参数
范例
源IP地址
-s
-s 172.16.1.1,172.16.1.2    -s 172.16.1.0/24   ! -s 172.16.1.0/24
目的IP地址
-d   
-d 172.16.1.1,172.16.1.2    -d 172.16.1.0/24   ! -d 172.16.1.0/24
源端口
-p tcp -m tcp --sport
-p tcp -m multiport --sports
-p tcp -m tcp --sport 22     -p tcp -m tcp --sport 22:25
-p tcp -m tcp --sport :22    -p tcp -m tcp --sport 80:
-p tcp -m tcp ! --sport 22   -p tcp -m multiport --sports 22,25
目的端口
-p tcp -m tcp --dport
-p tcp -m multiport --dports
-p tcp -m tcp --dport 22     -p tcp -m tcp --dport 22:25
-p tcp -m tcp --dport :22    -p tcp -m tcp --dport 80:
-p tcp -m tcp ! --dport 22   -p tcp -m multiport --dports 22,25
协议
-p
-p tcp   ! -p tcp   (tcp udp icmp)
网卡
-i 流入网卡  / -o流出网卡
-i eth0  ! -i eth0       /    -o eth0   ! -o eth0

Iptables常用扩展模块

扩展模块
参数
范例
tcp
-p tcp -m tcp --dport
-p tcp -m tcp --sport
-p tcp -m tcp --dport --tcp-flags 
-p tcp -m tcp --dport --syn
-p tcp -m tcp --dport 22 --tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN -j REJECT
-p tcp -m tcp --dport 22 --syn -j REJECT
udp
-p udp -m udp --dport
-p udp -m udp --sport
multiport
-p tcp -m multiport --dports
-p tcp -m multiport --sports
icmp
-p icmp -m icmp --icmp-type 8/0
-p icmp -m icmp --icmp-type 8
-p icmp -m icmp --icmp-type "echo-request"
-p icmp -m icmp --icmp-type 8/0 -j REJECT 禁止别人ping自己
-p icmp -m icmp --icmp-type 8 -j REJECT
-p icmp -m icmp --icmp-type "echo-request" -j REJECT
state
-m state --state 
-m state --state RELATED,ESTABLISHED -j ACCEPT

Iptables常用动作

动作
参数
范例
ACCEPT
-j ACCEPT
iptables -t filter -I INPUT -p tcp --dport 22 -j ACCEPT
DROP 
-j DROP
iptables -t filter -I INPUT -p tcp --dport 22 -j DROP
REJECT
-j REJECT <--reject-with>
iptables -t filter -I INPUT -p tcp --dport 22 -j REJECT --reject-with icmp-host-unreachable (提示为什么被拒绝)
LOG
-j LOG <--log-level> <--log-prefix>
iptables -I INPUT -p tcp --dport 22 -m state --state NEW -j LOG --log-prefix "want-in-from-port-22"
SNAT
-j SNAT --to-source 
iptables -t nat -A POSTROUTING -s 10.1.0.0/16 -j SNAT --to-source 192.168.1.146
DNAT
-j DNAT --to-destination
iptables -t nat -I PREROUTING -d 192.168.1.146 -p tcp --dport 3389 -j DNAT --to-destination 10.0.0.6:3389
MASQUERADE
-o eth0 -j MASQUERADE
iptables -t nat -I POSTROUTING -s 10.1.0.0/16 -o eth0 -j MASQUERADE (动态SNAT)
REDIRECT
-j REDIRECT --to-ports 
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

开启内核转发功能

在配置NAT网关、路由器或网络防火墙的时候,需要开启内核转发功能。

#使用如下两种方法均可临时开启核心转发,立即生效,但是重启网络配置后会失效。
方法一:echo 1 > /proc/sys/net/ipv4/ip_forward
方法二:sysctl -w net.ipv4.ip_forward=1
#使用如下方法开启核心转发功能,重启网络服务后永久生效。
配置/etc/sysctl.conf文件(centos7中配置/usr/lib/sysctl.d/00-system.conf文件),在配置文件中将 net.ipv4.ip_forward设置为1

 Iptables常用操作

查看规则
iptables -nvL
iptables -t filter -nvL
iptables -t filter -nvL INPUT
iptables --line-number -nvL INPUT
清空规则
iptables -F      清空filter表的规则
iptables -F INPUT
增加规则
iptables -t filter -I INPUT -s 192.168.1.1 -j DROP   // DROP表丢弃不响应   REJECT表拒绝并响应
iptables -t filter -I INPUT 2 -s 192.168.1.1 -j DROP
iptables -t filter -A INPUT -s 192.168.1.1 -j DROP
删除规则
iptables -t filter -D INPUT 3   删除INPUT链中第3条规则
iptables -t filter -D INPUT -s 192.168.1.1 -j ACCEPT
 
修改规则
iptables -t filter -R INPUT 1 -s 192.168.1.1 -j REJECT 
只能改动作,参数条件一个不能少,推荐先删除后添加的方式
修改默认规则
iptables -t filter -P FORWARD DROP
保存规则
service iptables save 
/etc/init.d/iptables save
cat /etc/sysconfig/iptables
白名单机制
iptables -P INPUT ACCEPT   默认设为ACCEPT防止清空后管理员无法登录
iptables -I INPUT -p tcp --dport 22 -j ACCEPT
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -j REJECT   在规则链最后加上拒绝,实现白名单机制
创建自定义链
iptables -t filter -N IN_WEB
引用自定义链
iptables -t filter -I INPUT -p tcp --dport 80 -j IN_WEB
重命名自定义链
iptables -E IN_WEB WEB
删除自定义链
iptables -X WEB   满足两个条件:自定义链没有被引用  自定义链中没有任何规则
计数器清零
iptables -Z 

网络防火墙配置

技术分享

网络防火墙=网关+Iptables过滤

#1.开启防火墙转发功能,实现网关
[root@B ~]# vim /etc/sysctl.conf

# Controls IP packet forwarding
net.ipv4.ip_forward = 1

[root@B ~]# sysctl -p   // 应用参数

#2.分别添加路由记录,设置网关
[root@A ~]# route add -net 172.16.1.0/24 gw 10.0.0.88

[root@C ~]# route add -net 10.0.0.0/24 gw 172.16.1.88

#3.配置防火墙Iptables过滤规则
[root@B ~]# iptables -nvL FORWARD
Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination     

[root@B ~]# iptables -A FORWARD -d 172.16.1.13 -j ACCEPT
[root@B ~]# iptables -A FORWARD -s 172.16.1.13 -j ACCEPT

#4.进行测试
[root@A ~]# ping 172.16.1.13
PING 172.16.1.13 (172.16.1.13) 56(84) bytes of data.
64 bytes from 172.16.1.13: icmp_seq=1 ttl=63 time=12.5 ms
64 bytes from 172.16.1.13: icmp_seq=2 ttl=63 time=1.03 ms

[root@C ~]# ping 10.0.0.100
PING 10.0.0.100 (10.0.0.100) 56(84) bytes of data.
64 bytes from 10.0.0.100: icmp_seq=1 ttl=63 time=0.391 ms
64 bytes from 10.0.0.100: icmp_seq=2 ttl=63 time=1.03 ms

 SNAT网关配置

技术分享

#严格上,配置网关=开启内核转发功能,配置方法同上
#添加SNAT功能
[root@B ~]# iptables -t nat -I POSTROUTING -s 10.0.0.0/24 -j SNAT --to-source 172.16.1.88
#测试
[root@A ~]# ping 172.16.1.13
PING 172.16.1.13 (172.16.1.13) 56(84) bytes of data.
64 bytes from 172.16.1.13: icmp_seq=1 ttl=63 time=0.796 ms
64 bytes from 172.16.1.13: icmp_seq=2 ttl=63 time=3.38 ms
64 bytes from 172.16.1.13: icmp_seq=3 ttl=63 time=1.34 ms

[root@C ~]# tcpdump -i eth1 -nn icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes
23:12:29.983216 IP 172.16.1.88 > 172.16.1.13: ICMP echo request, id 14715, seq 1, length 64
23:12:29.983239 IP 172.16.1.13 > 172.16.1.88: ICMP echo reply, id 14715, seq 1, length 64
23:12:30.998859 IP 172.16.1.88 > 172.16.1.13: ICMP echo request, id 14715, seq 2, length 64

 DNAT网关配置

技术分享

#网关配置同网络防火墙
#开启DNAT功能
[root@B ~]# iptables -t nat -I PREROUTING -d 10.0.0.88 -j DNAT --to-destination 172.16.1.13
#测试
[root@A ~]# ping 10.0.0.88
PING 10.0.0.88 (10.0.0.88) 56(84) bytes of data.
64 bytes from 10.0.0.88: icmp_seq=1 ttl=63 time=21.8 ms
64 bytes from 10.0.0.88: icmp_seq=2 ttl=63 time=2.03 ms
64 bytes from 10.0.0.88: icmp_seq=3 ttl=63 time=1.53 ms

[root@C ~]# tcpdump -i eth1 -nn icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes
23:31:30.079065 IP 10.0.0.100 > 172.16.1.13: ICMP echo request, id 20091, seq 1, length 64
23:31:30.079104 IP 172.16.1.13 > 10.0.0.100: ICMP echo reply, id 20091, seq 1, length 64
23:31:31.083794 IP 10.0.0.100 > 172.16.1.13: ICMP echo request, id 20091, seq 2, length 64
23:31:31.083853 IP 172.16.1.13 > 10.0.0.100: ICMP echo reply, id 20091, seq 2, lengt

 

Iptables基础整理

标签:sgd   配置方法   off   .com   zsh   fss   sea   dtc   生效   

原文地址:http://www.cnblogs.com/Peter2014/p/7583525.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!