iptables详解
来源:互联网 发布:python 函数作为参数 编辑:程序博客网 时间:2024/05/18 02:53
1
2
3
[root@WebServer ~]
# /etc/init.d/iptables restart # 重启iptables服务
[root@WebServer ~]
# service iptables restart
[root@WebServer ~]
# chkconfig iptables on # 设置开机自动启动
filter:过滤,防火墙;nat:network address translation;用于修改源IP或目标IP,也可以改端口;mangle:拆解报文,做出修改,并重新封装起来;raw:关闭nat表上启用的连接追踪机制;
1
iptables -t nat
PREROUTING:路由前INPUT:数据包流入口FORWARD:转发管卡OUTPUT:数据包出口POSTROUTING:路由后
filter表主要是过滤数据包的,IPTABLES几乎所有的数据包过滤都在此表中实现的,filter表也是IPTABLES中默认的表,此表中还包含三个链如下: INPUT链 过滤所有的目标地址是本机的数据包 OUTPUT链 过滤所有从本机出去的数据包 FORWORD链 过滤所有从本机路过的数据包
nat表主要是用于做网络地址转换的(NAT),在iptables中可以做SNAT(源地址转换),DNAT(目标地址转换),PANT(即跟SNAT差不多,不一样的是SNAT的源地址是固定的,而PNAT的源地址是不固定的,当使用ppp或pppoe的方式连接互联网的时候一般适应这个) nat表中包含两个链如下: a.PREROUTING链 在数据包到达防火墙的时候改变目标地址 DNAT应用于此链. b.OUTPUT链 可以改变本地产生的数据包的目标地址 c.POSTROUTING链 在数据包离开防火墙的时候改变源地址,SNAT应用于次链
mangle表主要是修改数据包头部信息的,此表中包含以下5条链: PREROUTING链, 在数据包进入防火墙之后,也称为路由前, POSTROUTING链, 在数据包确定目标地址后,也称为路由后, OUTPUT链 从本机出去的时间包路由前 INPUT链 数据包进入本机后,路由后 FORWARD链 第一次路由判断之后,最后一次路由判断之前改变数据包
NEW:新发出请求;连接追踪模板中不存在此连接的相关信息条目,因此,将其识别为第一次发出的请求;ESTABLISHED:NEW状态之后,连接追踪模板中为其建立的条目失效之前期间内所进行的通信状态;RELATED:相关联的连接;如ftp协议中的数据连接与命令连接之间的关系;INVALID:无效的连接;UNTRACKED:未进行追踪的连接;
iptables -A 添加一条新规则,追加,默认在最下面iptables -I 插入一条新规则 -I 后面加一数字表示插入到哪行,默认在最上面iptables -D 删除一条新规则 -D 后面加一数字表示删除哪行iptables -R 替换一条新规则 -R 后面加一数字表示替换哪行
1
2
3
4
5
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
# 在INPUT链添加一条规则
iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
# 在OUTPUT链添加一条规则
iptables -R INPUT 2 -s 172.16.0.0
/16
-d 172.16.100.1 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
# 将INPUT链上的第二条规则替换
iptables -R OUTPUT 1 -m state --state ESTABLISHED -j ACCEPT
# 将OUTPUT链第一条规则替换
iptables -F 清空链中的所有规则iptables -N 新建一个链iptables -X 删除一个自定义链,删除之前要保证次链是空的,而且没有被引用iptables -E 重命名链
1
2
iptables -t nat -F PREROUTING
iptables -t nat -F 清空nat表的所有链
iptables -P 设置默认规
1
2
3
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD ACCEPT
# 设置这三条链上默认所有的数据包都drop掉
iptables -L 查看规则 –L 还有几个子选项如下iptables -L -n 以数字的方式显示iptables -L -v 显示详细信息iptables -L -x 显示精确信息iptables -L --line-numbers 显示行号
-s 源地址-d 目标地址-p 协议{tcp|udp|icmp}-i 从哪个网络接口进入,比如 -i eth0-o 从哪个网络接口出去,比如 -o eth0
-p {tcp|udp} --sport 指定源端口-p {tcp|udp} --dport 指定目标端口
-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 "xxxx" 匹配字符串-m time --timestart 8:00 --timestop 12:00 表示从哪个时间到哪个时间段-m time --days 表示那天-m mac --mac-source xx:xx:xx:xx:xx:xx 匹配源MAC地址-m layer7 --l7proto qq 表示匹配腾讯qq的 当然也支持很多协议,这个默认是没有的,需要我们给内核打补丁并重新编译内核及iptables才可以使用 -m layer7 这个显示扩展匹配
-j ACCEPT 允许-j REJECT 拒绝-j DROP 拒绝并提示信息-j SNAT 源地址转换-j DNAT 目标地址转换-j REDIRECT 重定向-j MASQUERAED 地址伪装-j LOG --log-prefix "说明信息,自己随便定义" 记录日志
8、iptables的脚本编写12345iptables -A INPUT -i eth0 -s 192.168.100.0
/24
-p tcp --dport 3128 -m state --state NEW,ESTABLISHED -j ACCEPT
# 允许192.168.100.0/24网段的机器发送数据包从eth0网卡进入。如果数据包是tcp协议,而且目的端口是3128(因为REDIRECT已经把80改为3128了,nat表的PREROUTING是在filter表的INPUT前面的),数据包的状态必须是NEW或者ESTABLISHED的(NEW代表tcp三段式握手的“第一握”,换句话说就是,允许客户端机器向服务器发出链接申请。ESTABLISHED表示通过握手已经建立起链接),通过。
iptables -A OUTPUT -o eth0 -d 192.168.100.0
/24
-p tcp --sport 3128 -m state --state ESTABLISHED -j ACCEPT
# 数据包还得通过服务器,转到内网网卡上。请注意,这里,是squid帮你去访问了你想要访问的网站。所以在内网中,你的机器是客户端角色,而squid是服务器角色。这与刚才对外访问的过程是不同的。所以在这里,源端口是3128,而不是32768:61000。
12iptables-save >
/PATH/TO/SOME_RULES_FILE
iptables-save >
/PATH/TO/SOME_RULES_FILE
123456789101112131415161718192021222324252627282930313233343536373839#vim iptables.sh
#!/bin/bash
#
#定义变量
mynet=10.10.10.0
/24
myip=10.10.10.100
IPT=
/sbin/iptables
#加载ftp模块
modprobe ip_conntrack-
ftp
modprobe ip_nat_ftp
#开启路由转发功能
echo
"1"
/proc/sys/net/ipv4/ip_forward
#清空所有表中的规则
$IPT -F
$IPT -t nat –F
$IPT -t mangle –F
#删除所有自定义链
$IPT -X
$IPT -t nat -X
$IPT -t mangle –X
#设置默认策略
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD ACCEPT
#允许状态为ESTABLISHED,RELATED的访问本机,及状态为NEW的从本机出去
$IPT -A INOUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#允许本地环回口访问
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
#允许管理员主机访问本地ssh服务
$IPT -A INPUT -s $myip -m state --state NEW -p tcp --dport 22 -j ACCEPT
$IPT -A OUTPUT -d $myip -p tcp --sport 22 -j ACCEPT
#允许局域网的ping请求
$IPT -A INPUT -s $mynet -p icmp --icmp-
type
8 -j ACCEPT
$IPT -A OUTPUT -d $mynet -p icmp --icmp-
type
0 -j ACCEPT
#为局域网做SNAT
$IPT -t nat -A POSTROUTING -s $mynet -j SNAT --to-
source
222.95.1.97
#为局域网内部的web服务器做DNAT
$IPT -t nat -A PREROUTING -d 222.95.1.97 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.1
(3)iptables 禁ping脚本123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657iptables -F
iptables -X
iptables -F -t mangle
iptables -t mangle -X
iptables -F -t nat
iptables -t nat -X
# 首先,把三个表清空,把自建的规则清空。
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD ACCEPT
# 设定INPUT、OUTPUT的默认策略为DROP,FORWARD为ACCEPT。
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# 先把“回环”打开,以免有不必要的麻烦。
iptables -A INPUT -i eth+ -p icmp --icmp-
type
8 -j ACCEPT
iptables -A OUTPUT -o eth+ -p icmp --icmp-
type
0 -j ACCEPT
# 在所有网卡上打开ping功能,便于维护和检测。
iptables -A INPUT -i eth0 -s 192.168.100.250 -d 192.168.100.1 -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -o eth0 -d 192.168.100.250 -s 192.168.100.1 -p tcp --sport 22 -j ACCEPT
# 打开22端口,允许远程管理。(设定了很多的附加条件:管理机器IP必须是250,并且必须从eth0网卡进入)
iptables -A INPUT -i eth0 -s 192.168.100.0
/24
-p tcp --dport 3128 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -d 192.168.100.0
/24
-p tcp --sport 3128 -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth1 -s 192.168.168.0
/24
-p tcp --dport 3128 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth1 -d 192.168.168.0
/24
-p tcp --sport 3128 -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth2 -p tcp --dport 32768:61000 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth2 -p tcp --sport 32768:61000 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth2 -p udp --dport 53 -j ACCEPT
iptables -A INPUT -i eth2 -p udp --sport 53 -j ACCEPT
这几条语句比较麻烦,逐一介绍:
#iptables -A INPUT -i eth0 -s 192.168.100.0/24 -p tcp --dport 3128 -m state --state NEW,ESTABLISHED -j ACCEPT
允许192.168.100.0
/24
网段的机器发送数据包从eth0网卡进入。如果数据包是tcp协议,而且目的端口是3128(因为REDIRECT已经把80改为3128了。nat表的PREROUTING是在filter表的INPUT前面的),再而且,数据包的状态必须是NEW或者ESTABLISHED的(NEW代表tcp三段式握手的“第一握”,换句话说就是,允许客户端机器向服务器发出链接申请。ESTABLISHED表示通过握手已经建立起链接),通过。
#iptables -A OUTPUT -o eth2 -p tcp --sport 32768:61000 -m state --state NEW,ESTABLISHED -j ACCEPT
我们先来看这一句。现在你的数据包已经进入到linux服务器防火墙上来了。squid需要代替你去访问,所以这时,服务器就成了客户端的角色,所以它要使用32768到61000的私有端口进行访问。(大家会奇怪应该是1024到65535吧。其实CentOS版的linux所定义的私有端口是32768到61000的,你可以通过
cat
/proc/sys/net/ipv4/ip_local_port_range
,查看一下。)再次声明:这里是squid以客户端的身份去访问其他的服务器,所以这里的源端口是32768:61000,而不是3128!
#iptables -A INPUT -i eth2 -p tcp --dport 32768:61000 -m state --state ESTABLISHED -j ACCEPT
当然了,数据有去就有回。
#iptables -A OUTPUT -o eth0 -d 192.168.100.0
/24
-p tcp --sport 3128 -m state --state ESTABLISHED -j ACCEPT
数据包还得通过服务器,转到内网网卡上。请注意,这里,是squid帮你去访问了你想要访问的网站。所以在内网中,你的机器是客户端角色,而squid是服务器角色。这与刚才对外访问的过程是不同的。所以在这里,源端口是3128,而不是32768:61000。
iptables -A OUTPUT -o eth2 -p udp --dport 53 -j ACCEPT
iptables -A INPUT -i eth2 -p udp --sport 53 -j ACCEPT
# 当然,DNS是不可缺少的。
iptables -A INPUT -i eth+ -p tcp --dport 80 -j LOG --log-prefix
"iptables_80_alert"
--log-level info
iptables -A INPUT -i eth+ -p tcp --dport 21 -j LOG --log-prefix
"iptables_21_alert"
--log-level info
iptables -A INPUT -i eth+ -p tcp --dport 22 -j LOG --log-prefix
"iptables_22_alert"
--log-level info
iptables -A INPUT -i eth+ -p tcp --dport 25 -j LOG --log-prefix
"iptables_25_alert"
--log-level info
iptables -A INPUT -i eth+ -p icmp --icmp-
type
8 -j LOG --log-prefix
"iptables_icmp8_alert"
--log-level info
# 记录日志
12345678910111213141516171819202122#!/bin/bash
iptables -F
iptables -F -t nat
iptables -X
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD ACCEPT
#load connection-tracking modules
modprobe ip_tables
modprobe iptable_nat
modprobe ip_nat_ftp
modprobe ip_nat_irc
modprobe ip_conntrack
modprobe ip_conntrack_ftp
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dports 22,80 -j ACCEPT
iptables -A INPUT -p icmp --icmp-
type
0 -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --dports 22,80 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-
type
8 -j ACCEPT
12345678910111213141516171819#!/bin/bash
iptables -F
iptables -X
iptables -Z
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
#load connection-tracking modules
modprobe ip_tables
modprobe iptable_nat
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dports 22,80 -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -nv -L
测试扫描端口
nmap -sT 192.168.18.254
1234567891011121314151617181920212223#!/bin/bash
iptables -F
iptables -X
iptables -Z
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD ACCEPT
#load connection-tracking modules
modprobe ip_tables
modprobe iptable_nat
modprobe ip_nat_ftp
modprobe ip_nat_irc
modprobe ip_conntrack
modprobe ip_conntrack_ftp
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 21 -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -nv -L
123456789101112131415161718192021222324252627#!/bin/bash
iptables -F
iptables -F -t nat
iptables -X
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
#load connection-tracking modules
modprobe iptable_nat
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -s 122.70.121.XXX -j ACCEPT
iptables -A INPUT -s 122.70.121.XXX -j ACCEPT
iptables -A INPUT -s 122.70.121.XXX -j ACCEPT
iptables -N synflood
iptables -A synflood -m limit --limit 10
/s
--limit-burst 100 -j RETURN
iptables -A synflood -p tcp -j REJECT --reject-with tcp-reset
iptables -A INPUT -p tcp -m state --state NEW -j synflood
iptables -A INPUT -p icmp --icmp-
type
echo
-request -m limit --limit 1
/s
--limit-burst 5 -j ACCEPT
iptables -A INPUT -p icmp --icmp-
type
echo
-request -j DROP
iptables -A INPUT -p tcp -m multiport --dport 80,22,8080,3306,5666,110,143,25,443 -j ACCEPT
测试:
端口扫描
nmap -P0 -sS 214.26.73.x
12345678910111213141516171819202122232425#!/bin/bash
echo
"1"
>
/proc/sys/net/ipv4/ip_forward
arp -f
/root/mac
.txt
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
iptables -F INPUT
iptables -F FORWARD
iptables -F POSTROUTING -t nat
iptables -p FORWARD DROP
#客户机绑定mac地址才能上网,这样防止恶意增加IP在公司内部上网,引起不安全隐患
cat
/root/mac
.txt |
while
read
LINE
do
ipaddress=`
echo
$LINE |
awk
'{print $1}'
`
macaddress=`
echo
$LINE |
awk
'{print $2}'
`
iptables -A FORWARD -s $ipaddress -m mac --mac-
source
$macaddress -j ACCEPT
done
#网关上有几块网卡,eth0接的是外网IP地址,eth1、eth2等对应该局域网IP,因是租用了电信的光纤,不存在着ADSL上网情况
iptables -A FORWARD -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.1.0
/24
-j SNAT --to 59.195.233.234
#iptables -t nat -A POSTROUTING -o eth0 -s 192.168.1.0/24 -j MASQUERADE
cat
/root/mac
.txt
192.168.1.50 00:16:D3:F6:BD:F5
192.168.1.57 00:16:36:B4:6C:5D
1[root@localhost ~]
# echo "/bin/bash /root/shell/iptables.sh" >> /etc/rc.local
阅读全文
0 0
- iptables 详解
- iptables详解
- iptables详解
- iptables 详解
- iptables详解
- iptables详解
- IPTABLES 详解
- Iptables详解
- Iptables详解
- iptables详解
- IPtables 详解
- IPTABLES详解
- iptables详解
- iptables详解
- iptables详解
- iptables详解
- iptables详解
- iptables详解
- Java知识:恒生电子的坑爹笔试题扩展的知识
- 分组(根据某一列的值处理成表格)
- 牛客网 二维数组中的查找python实现
- C++动态规划算法之计算字符串距离
- 银联支付jboss 环境下报异常JCE cannot authenticate the provider BC的解决方法
- iptables详解
- Java与js完成des+3des加密 、解密
- 使用@property
- 最新微信开通状态过滤程序
- 刷题记录-luoguP1113 杂务
- win10 CentOS7 UEFI+GPT 双系统安装
- 虚拟机双网卡配置以及注意事项
- Html,css,js总结问题
- html和css单闭合标签