centos nat iptables?iptables配置nat转发
在linux 下如何设置iptables 防火墙
Iptable-A Input-p Tcp-d自己的IP地址 b--dPort端口-J Reject
RedHat机器
cat/etc/sysconfig/iptables
*filter
:INPUT ACCEPT [10276:1578052]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [13784:16761487]
-A INPUT-s 10.0.0.0/255.0.0.0-i eth1-j DROP
-A INPUT-s 172.16.0.0/255.240.0.0-j DROP
-A INPUT-s 192.168.0.0/255.255.0.0-i eth1-j DROP#eth1 is interface to internet
# anti Sync Flood
-A FORWARD-p tcp-m tcp--tcp-flags SYN,RST,ACK SYN-m limit--limit 1/sec-j ACCEPT
# anti some port scan
-A FORWARD-p tcp-m tcp--tcp-flags FIN,SYN,RST,ACK RST-m limit--limit 1/sec-j ACCEPT
# anti ping of death
-A FORWARD-p icmp-m icmp--icmp-type 8-m limit--limit 1/sec-j ACCEPT
COMMIT
chkconfig iptables on
以后每次启动iptables就会自动读取配置文件(/etc/sysconfig/iptables)
自动启动
或者是/etc/rc.d/init.d/iptables start手工启动
/etc/rc.d/init.d/iptables stop手工停止
在LINUX下架设防火墙
linuxbird
随着Internet的普及,人们的日常工作与之的关系也越来紧密,因而越来越多的单位为员工开设了Internet的代理上网服务。但当一个企业的内部网络接上Internet之后,企业的内部资源就象待卖的羔羊一样,面临任人宰割的危险,因而系统的安全除了考虑计算机病毒、系统的健壮性等内部原因之外,更主要的是防止非法用户通过Internet的入侵。而目前防止的措施主要是靠防火墙的技术完成。
一、什么是防火墙
防火墙(firewall)是指一个由软件或和硬件设备组合而成,处于企业或网络群体计算机与外界通道(Internet)之间,限制外界用户对内部网络访问及管理内部用户访问外界网络的权限。主要是控制对受保护的网络(即网点)的往返访问,逼使各连接点的通过能得到检查和评估。
从诞生到现在,防火墙已经历了四个发展阶段:基于路由器的防火墙、用户化的防火墙工具套、建立在通用操作系统上的防火墙、具有安全操作系统的防火墙。目前防火墙供应商提供的大部分都是具有安全操作系统的软硬件结合的防火墙,象NETEYE、NETSCREEN、TALENTIT等。在LINUX操作系统上的防火墙软件也很多,除了下面要专门介绍的IPCHAINS外,还有很多,如:Sinus Firewall、Jfwadmin等。
目前的防火墙从结构上讲,可分为两种:
1)代理主机结构
内部网络<----->代理网关(Proxy Gateway)<----->Internet
2)路由器加过滤器结构
内部网络<----->过滤器(Filter)<---->路由器(Router)<---->Internet
二、用IPCHAINS构建局域网防火墙的原理
其实从本质上讲,用IPCHAINS构建局域网防火墙也是一种C/S模式的交互式的应用。一般服务器提供某特定功能的服务总是由特定的后台程序提供的。在TCP/IP网络中,常常把这个特定的服务绑定到特定的TCP或UDP端口。之后,该后台程序就不断地监听(listen)该端口,一旦接收到符合条件的客户端请求,该服务进行TCP握手后就同客户端建立一个连接,响应客户请求。与此同时,再产生一个该绑定的拷贝,继续监听客户端的请求。
IPCHAINS就是这样的一个SERVER。对内部网通往Intenet的请求,或从外部通往内部网的请求,都进行监听、检查、评估、转发、拒绝等动作。
常用的服务、协议与默认端口。
服务类型协议端口
WWW TCP/UDP 80
TELNET
ICMP
SMTP
POP3
FTP
DNS
三、用IPCHAINS作防火墙的步骤
1.安装
IPCHAINS现在的版本已经发展到1.3.9。一般在安装LINUX时都会安装上,如果没有的话可以到www.linux.org下载。下面笔者一TLC4.0为例安装IPCHAINS。由于它需IP-MASQ的支持,所以确定已安装了IP-MASQ模块。
在TLC4.0中,把该光盘放入光驱中,
#turbopkg
并选择ipchains,然后按OK就自动自动安装了。
如果你是下载ipchains安装包的话:
1)如果是rpm包:
#rpm–ivh*.rpm
2)如果是.tar.gz包
#tar xvfz*.tar.gz(先把包解开)
再到解开目录
#./configure
#make
#make install
这样就安装成功了。
2.启用ipchains
手工修改/proc/sys/net/ipv4/ipforward文件,将其内容置为1。
在/etc/rc.d/目录下用touch命令建立rc.ipfwadm文件
在/etc/rc.d/目录下的rc.local文件中加上下面这段代码:
if [-f/etc/rc.d/rc.ipfwadm ]; then/etc/rc.d/rc.ipfwadm; fi;
以后所有的ipchains的配置命令都将在rc.ipfwadm文件里修改。
3.配置ipchains(基本应用)
ipchains对机器的管理是通过对机器的ip地址作为标志的,因而首先得确保你的局域网的机器的ip地址已经配分配好,并且你对之相当熟悉。
Ipchains的配置规则一般是围绕着input、output、ipforward这三个规则进行的,其中input是指对内连接请求的过滤规则,output是指对外连接请求的过滤规则,ipforward是指对内部与外部通讯包的转发。Ipchains的命令格式一般是:
ipchains [ADC] ipchains规则 [ipchains选项]。
有关命令的详细用法请参考有关HOWTO文档。
现在我们假设企业的内部网网段为192.168.1.0~192.168.1.255.其中防火墙的主机的IP地址为:192.168.1.1,假设目前防火墙是进行代理上网,拒绝所有的外部telnet。对内部用户访问外部站点进行限制、并授予一些机器特权可任意访问外部机器、拒绝内部某些机器访问Internet等。网段示意图为:
+--------------+
|内部网段| 192.168.1.1 ISDN、PSDN
|+------------|firewall|<===============>Internet
| 192.168.1.0|+--------+
+--------------+
配置ipchains防火墙规则一般有两种方式:
1)首先允许所有的包,然后在禁止有危险的包通过防火墙;
2)首先禁止所有的包,然后再根据所需要的服务允许特定的包通过防火墙。
相比较而言,第二种方式的做法更为安全。
下面是我的rc.ipfwadm的文件内容:
/sbin/depmod–a
/*自动加载所需模块,如果觉得这样有危险,需手动指定安装模块,可以如下面这一小段就是手动指定加载模块*/
#/sbin/modprobe/lib/modules/2.2.10/ipv4/ip_masq_ftp
/*加载ip伪装的ftp模块*/
#/sbin/modprobe/lib/modules/2.2.10/ipv4/ip_masq_irc
/*加载ip伪装的irc模块*/
#/sbin/modprobe/lib/modules/2.2.10/ipv4/ip_masq_raudio
#/sbin/modprobe/lib/modules/2.2.10/ipv4/ip_masq_user
#/sbin/modprobe/lib/modules/2.2.10/ipv4/ip_masq_autofw
/sbin/modprobe-a-t/lib/modules/2.2.10/ipv4/ip_masq*
/*自动加载ip伪装的相关模块*/
ipchains–F
/*刷新所有的ipchains规则*/
ipchains-P forward DENY
/*拒绝转发所有的ip包*/
/*下面允许特定的包通过*/
/*开设权限比较高的主机*/
ipchains-A forward-s 192.168.1.10/32-j MASQ
/*允许内部的192.168.1.10主机不受限制访问。比如总经理*/
ipchains-A forward-s 192.168.1.12/32-j MASQ
/*允许内部的192.168.1.12主机不受限制访问。比如系统管理员,在依次添加*/
ipchains-A forward-s 192.168.1.41/32-j MASQ
/*for example linuxbird的主机地址:192.168.1.41*/
/*某些机器,因需要不能对外连接*/
ipchains-A forward-s 192.168.1.3/32-j DENY
/*此机器为内部文档专用机,不能访问外部*/
/*设置内部普通用户能访问的站点*/
ipchains-A forward-d 202.101.98.55/32-j MASQ# FJ-DNS
ipchains-A forward-d 202.101.0.133/32-j MASQ# FJ-DNS
/*这是上网的DNS服务器,本人用的是福州电信局的DNS*/
/*以下是普通用户能访问的站点,根据需要可以对其增删改*/
ipchains-A forward-d 202.101.98.50/32-j MASQ
/* public.fz.fj.cn*/
ipchains-A forward-d 202.101.98.60/32-j MASQ
/* pub5.fz.fj.cn*/
ipchains-A forward-d 202.96.44.14/24-j MASQ
/*freemail.263.net*/
ipchains-A forward-d 202.99.11.120/32-j MASQ
/*www.linuxaid.com.cn*/
ipchains-A forward-d 205.227.44.44/24-j MASQ
/* www.oracle.com*/
ipchains-A forward-d 205.227.44.46/32-j MASQ
/* lliance.oracle.com*/
#ipchains-A forward-d 205.227.44.237/32-j MASQ
/* support.oracle.com*/
ipchains-A forward-d 209.246.5.38/24-j MASQ
/* technet.oracle.com*/
ipchains-A forward-d 137.69.200.8/32-j MASQ
/* www.legato.com*/
ipchains-A forward-d 202.96.125.102/32-j MASQ
/*www.188.net*/
ipchains-A forward-d 207.105.83.51/32-j MASQ
/* www.borland.com*/
ipchains-A forward-d 207.46.131.30/24-j MASQ
/* www.microsoft.com*/
ipchains-A forward-d 207.46.130.30/24-j MASQ
/* www.microsoft.com*/
ipchains-A forward-d 204.146.81.99/32-j MASQ
/* www.ibm.com*/
ipchains-A forward-d 202.102.24.74/24-j MASQ
/* www.lodesoft.com*/
ipchains-A forward-d 210.77.34.109/32-j MASQ
/* www.csdn.net*/
ipchains-A forward-d 192.138.151.66/32-j MASQ
/* www.sybase.com*/
ipchains-A forward-d 202.102.26.1/32-j MASQ
/* www.nari-china.com*/
ipchains-A forward-d 202.102.26.51/32-j MASQ
/*www.aeps-info.com*/
ipchains-A forward-d 202.106.185.2/32-j MASQ
/* www.sohu.com*/
……
Linux下针对路由功能配置iptables的方法详解
作为公司上网的路由器需要实现的功能有nat地址转换、dhcp、dns缓存、流量控制、应用程序控制,nat地址转换通过iptables可以直接实现,dhcp服务需要安装dhcpd,dns缓存功能需要使用bind,流量控制可以使用tc,应用程序控制:例如对qq的封锁可以使用 netfilter-layer7-v2.22+17-protocols-2009-05-28.tar.gz来实现
1、网络规划
操作系统是centos5.8
2、安装dhcpd
代码如下:
yum install dhcp-3.0.5-31.el5
vim/etc/dhcp/dhcpd.conf
ddns-update-style interim;
ignore client-updates;
subnet 10.0.0.0 netmask 255.255.255.0{
option routers 10.0.0.1;
option subnet-mask 255.255.255.0;
option domain-name-servers 10.0.0.1;
range dynamic-bootp 10.0.0.100 10.0.0.200;
default-lease-time 21600;
max-lease-time 43200;
}
3、安装bind,实现dns缓存
代码如下:
yum install bind97.i386 bind97-libs.i386 bind97-utils.i386
vim/etc/named.conf
options{
directory"/var/named";
allow-recursion{ 10.0.0.0/24;};
recursion yes;
forward first;#将所有请求都进行转发
forwarders{ 114.114.114.114;};#定义转发服务器地址
};
zone"." IN{
type hint;
file"named.ca";
};
zone"localhost" IN{
type master;
file"named.localhost";
allow-transfer{ none;};
};
zone"0.0.127.in-addr.arpa" IN{
type master;
file"named.loopback";
allow-transfer{ none;};
};
创建根域文件,默认有
代码如下:
dig-t NS./var/named/named.ca
chown:named/var/named/named.ca
创建本地正向解析文件,默认有
代码如下:
vim/var/named/named.localhost
$TTL 1D
@ IN SOA@ rname.invalid.(
0; serial
1D; refresh
1H; retry
1W; expire
3H); minimum
NS@
A 127.0.0.1
chown:named/var/named/named.localhost
创建本地反向解析文件,默认有
代码如下:
vim/var/named/named.loopback
$TTL 1D
@ IN SOA@ rname.invalid.(
0; serial
1D; refresh
1H; retry
1W; expire
3H); minimum
NS@
A 127.0.0.1
PTR localhost.
chown:named/var/named/named.loopback
检查主配置文件
代码如下:
named-checkconf
检查根区域配置文件
代码如下:
named-checkzone“.”/var/named/named.ca
检查区域文件
代码如下:
named-checkzone“localhost”/var/named/named.localhost
启动服务
代码如下:
service named start
4、重新编译编译内核和iptables以支持应用层过滤
由于实行防火墙功能的是netfilter内核模块,所以需要重新编译内核,需要下载新的内核源码,并使用netfilter-layer7-v2.22作为内核的补丁一起编译到内核中。而控制netfiler的是iptables工具,因此iptables也必须重新编译安装,最后再安装应用程序过滤特征码库17-protocols-2009-05028.tar.gz
1、给内核打补丁,并重新编译内核
2、给iptables源码打补丁,并重新编译iptables
3、安装17proto
备份iptables脚本和配置文件
代码如下:
cp/etc/rc.d/init.d/iptables/root/iptables.sysv
cp/etc/sysconfig/iptables-config/root/iptables-config
2.6内核下载地址
netfilter下载地址
iptables源码下载地址
应用程序特征码库下载地址
代码如下:
xz-d linux-2.6.28.10.tar.xz
tar-xvf linux-2.6.28.10.tar.gz-C/usr/src#新的内核源码,用于重新编译
tar-zxvf netfilter-layer7-v2.22.tar.gz-C/usr/src#内核补丁和iptables补丁,只支持到2.6.28
#进入解压目录并创建软连接
pcd/usr/src
ln-sv linux-2.6.28.10 linux
#进入内核目录
pcd/usr/src/linux
#为当前内核打补丁
ppatch-p1../netfilter-layer7-v2.22/kernel-2.6.25-2.6.28-layer7-2.22.path
#为了方便编译内核将系统上的内核配置文件复制过来
pcp/boot/config-2.6.18-164.el5/usr/src/linux/.config
编译内核
代码如下:
make menuconfig
Networking support- Networking Options- Network packet filtering framework- Core Netfilter Configuration
Netfilter connection tracking support
"lawyer7" match support
"string" match support
"time" match support
"iprange" match support
"connlimit" match support
"state" match support
"conntrack" connection match support
"mac" address match support
"multiport" Multiple port match support
Networking support- Networign options- Network packet filtering framework- IP:Netfiltr Configuration
IPv4 connection tracking support(required for NAT)
Full NAT
MASQUERADE target support
NETMAP target support
REDIRECT target support
在Networking support中选择 Networking options
查找Network packet filtering framework(Netfilter)–Core Netfiler Configrationg–Netfilter connection tracking support(NEW),”layer7″ match support(NEW),”time” match support(NEW),”iprange”
查找IP:Netfilter Configuration–IPv4 connection tracking support,Full NAT(NEW)
代码如下:
make
make modules_install
make install
重启操作系统选择新内核登录
卸载旧的iptables
代码如下:
rpm-e iptables-1.3.5-9.1.el5 iptables-ipv6-1.3.5-9.1.el5 iptstate-1.4-2.el5--nodeps
安装新的iptables,以支持新的netfiler模块
代码如下:
tar-jsvf iptables-1.4.6.tar.bz2-C/usr/src
cd/usr/src/netfilter-layer7-v2.23
cd iptables-1.4.3forward-for-kernel-2.6.20forward
cp*/usr/src/iptables-1.4.6/extensions/
cd/usr/src/iptables-1.4.6/
./configure--prefix=/usr--with-ksource=/usr/src/linux
make
make install
查看安装后的iptables的文件
代码如下:
ls/usr/sbin|grep iptables
ls/usr/libexec/xtables
复制之前备份的配置文件和脚本
代码如下:
cp/root/iptables-config/etc/sysconfig/
cp/root/iptables.sysv/etc/rc.d/init.d/iptables
修改脚本中iptables的路径
代码如下:
vim/etc/rc.d/init.d/iptables
:.,$s@/sbin/$IPTABLES@/usr/sbin/$IPTABLES@g
让iptables服务开机自动启动
代码如下:
chkconfig--add iptables
修改iptables配置文件
将/etc/sysconfig/iptables-config中的
IPTABLES_MODULES=”ip_conntrack_netbios_ns”注释掉
安装协议特征码
代码如下:
tar xvf 17-protocols-2009-05028.tar.gz
make install
完成后在/etc/l7-protocols会生成文件
支持的协议/etc/l7-protocols/protocols
添加iptables策略,运行内部网络上网,禁止qq和视频
代码如下:
iptables-t nat-A POSTROUTING-s 10.0.0.0/24-j SNAT--to-soure 192.168.6.67
iptables-A FORWARD-m layer7--l7proto qq-j DROP
iptables-A FORWARD-m layer7--l7proto httpvideo-j DROP
iptables-A FORWARD-m layer7--l7proto httpaudio-j DROP
指定8点到12点无法上网
复制代码
代码如下:
iptables-A FORWARD-m time--timestart 08:00--timestop 12:00-j DROP
5、使用tc控制带宽
例如公司出口带宽是10Mbps,个用户A分配500KB的最大下载带宽,给用户B分配分配的最大下载带宽是200KB
A用户ip:10.0.0.100
B用户ip:10.0.0.101
代码如下:
#在eth0网卡上创建一个根队列规则,队列规则的算法使用htb,default 2表示指定一个默认类别编号,默认的流量控制策略,如果ip没有在后面的filter中被匹配到就都是有这个策略
tc qdisc add dev eth0 root handle 1:0 htb default 2
#在eth0网卡上定义一个类,prant 1:0中的1对应根队列规则中的handle 1:0,classid 1:2表示当前这个类的标识,用于应用在后面的得到filter中,rate 200kbsp表示带宽为200KB/s,ceil 200kbps表示最大带宽也为200KB/s,prio 2是优先级
tc class add dev eth0 parent 1:0 classid 1:2 htb rate 200kbps ceil 200kbps prio 2
tc class add dev eth0 parent 1:0 classid 1:3 htb rate 500kbps ceil 500kbps prio 2
#将两个类的默认的fifq队列规则改为sfq
tc qdisc add dev eth0 parent 1:2 handle 20 sfq
tc qdisc add dev eth0 parent 1:3 handle 30 sfq
#在网卡eth0上的1:0节点(对应qdisc中的handle 1:0)添加一个u32过滤规则,优先级为1,凡是目标地址是10.0.0.100的数据包都使用1:2类(对应classid为1:2的类)
tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip dst 10.0.0.100 flowid 1:2
tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip dst 10.0.0.101 flowid 1:3
如果还有其他用户例如用户C和D的ip是102、103,要求的下载带宽也要求500那么在加入
代码如下:
tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip dst 10.0.0.102 flowid 1:3
tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip dst 10.0.0.103 flowid 1:3
清除eth0上的规则
代码如下:
tc qdisc del dev eth1 root/dev/null
linux/unix -shell值iptables基础知识
原文参考:
iptables防火墙可以用于创建过滤(filter)与NAT规则。所有Linux发行版都能使用iptables,因此理解如何配置 iptables将会帮助你更有效地管理Linux防火墙。如果你是第一次接触iptables,你会觉得它很复杂,但是一旦你理解iptables的工作原理,你会发现其实它很简单。
首先介绍iptables的结构:iptables-> Tables-> Chains-> Rules.简单地讲,tables由chains组成,而chains又由rules组成。如下图所示。 [图片上传失败...(image-ba5408-1536195185275)]
图: IPTables Table, Chain, and Rule Structure
一、iptables的表与链
iptables具有Filter, NAT, Mangle, Raw四种内建表:
1. Filter表
Filter表示iptables的默认表,因此如果你没有自定义表,那么就默认使用filter表,它具有以下三种内建链:
2. NAT表
NAT表有三种内建链:
3. Mangle表
Mangle表用于指定如何处理数据包。它能改变TCP头中的QoS位。Mangle表具有5个内建链:
4. Raw表
Raw表用于处理异常,它具有2个内建链:
5.小结
下图展示了iptables的三个内建表:
[图片上传失败...(image-753d8c-1536195185272)]
图: IPTables内建表
二、IPTABLES规则(Rules)
牢记以下三点式理解iptables规则的关键:
目标值(Target Values)
下面是你可以在target里指定的特殊值:
如果你执行iptables–list你将看到防火墙上的可用规则。下例说明当前系统没有定义防火墙,你可以看到,它显示了默认的filter表,以及表内默认的input链, forward链, output链。
Chain INPUT(policy ACCEPT)
target prot opt source destination
Chain FORWARD(policy ACCEPT)
target prot opt source destination
Chain OUTPUT(policy ACCEPT)
target prot opt source destination
查看mangle表:
查看NAT表:
查看RAW表:
!注意:如果不指定-t选项,就只会显示默认的 filter表。因此,以下两种命令形式是一个意思:
(or)
以下例子表明在filter表的input链, forward链, output链中存在规则:
Chain INPUT(policy ACCEPT)
num target prot opt source destination
1 RH-Firewall-1-INPUT all— 0.0.0.0/0 0.0.0.0/0
Chain FORWARD(policy ACCEPT)
num target prot opt source destination
1 RH-Firewall-1-INPUT all– 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT(policy ACCEPT)
num target prot opt source destination
Chain RH-Firewall-1-INPUT(2 references)
num target prot opt source destination
1 ACCEPT all– 0.0.0.0/0 0.0.0.0/0
2 ACCEPT icmp– 0.0.0.0/0 0.0.0.0/0 icmp type 255
3 ACCEPT esp– 0.0.0.0/0 0.0.0.0/0
4 ACCEPT ah– 0.0.0.0/0 0.0.0.0/0
5 ACCEPT udp– 0.0.0.0/0 224.0.0.251 udp dpt:5353
6 ACCEPT udp– 0.0.0.0/0 0.0.0.0/0 udp dpt:631
7 ACCEPT tcp– 0.0.0.0/0 0.0.0.0/0 tcp dpt:631
8 ACCEPT all– 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
9 ACCEPT tcp– 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
10 REJECT all– 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
以上输出包含下列字段:
三、清空所有iptables规则
在配置iptables之前,你通常需要用iptables–list命令或者iptables-save命令查看有无现存规则,因为有时需要删除现有的iptables规则:
iptables–flush
或者
iptables-F
这两条命令是等效的。但是并非执行后就万事大吉了。你仍然需要检查规则是不是真的清空了,因为有的linux发行版上这个命令不会清除NAT表中的规则,此时只能手动清除:
iptables-t NAT-F
四、永久生效
当你删除、添加规则后,这些更改并不能永久生效,这些规则很有可能在系统重启后恢复原样。为了让配置永久生效,根据平台的不同,具体操作也不同。下面进行简单介绍:
1.Ubuntu
首先,保存现有的规则:
iptables-save>/etc/iptables.rules
然后新建一个bash脚本,并保存到/etc/network/if-pre-up.d/目录下:
iptables-restore</etc/iptables.rules
这样,每次系统重启后iptables规则都会被自动加载。
!注意:不要尝试在.bashrc或者.profile中执行以上命令,因为用户通常不是root,而且这只能在登录时加载iptables规则。
2.CentOS, RedHat
service iptables save
service iptables stop
service iptables start
查看当前规则:
cat/etc/sysconfig/iptables
五、追加iptables规则
可以使用iptables-A命令追加新规则,其中-A表示 Append。因此,新的规则将追加到链尾。
一般而言,最后一条规则用于丢弃(DROP)所有数据包。如果你已经有这样的规则了,并且使用-A参数添加新规则,那么就是无用功。
1.语法
iptables-A chain firewall-rule
2.描述规则的基本参数
以下这些规则参数用于描述数据包的协议、源地址、目的地址、允许经过的网络接口,以及如何处理这些数据包。这些描述是对规则的基本描述。
-p协议(protocol)
-s源地址(source)
-d目的地址(destination)
-j执行目标(jump to target)
-i输入接口(input interface)
-o输出(out interface)
3.描述规则的扩展参数
对规则有了一个基本描述之后,有时候我们还希望指定端口、TCP标志、ICMP类型等内容。
–sport源端口(source port)针对-p tcp或者-p udp
–-dport目的端口(destination port)针对-p tcp或者-p udp
-–tcp-flags TCP标志针对-p tcp
-–icmp-type ICMP类型针对-p icmp
4.追加规则的完整实例:仅允许SSH服务
本例实现的规则将仅允许SSH数据包通过本地计算机,其他一切连接(包括ping)都将被拒绝。
iptables-F
iptables-A INPUT-i eth0-p tcp–dport 22-j ACCEPT
iptables-A INPUT-j DROP
六、更改默认策略
上例的例子仅对接收的数据包过滤,而对于要发送出去的数据包却没有任何限制。本节主要介绍如何更改链策略,以改变链的行为。
1.默认链策略
/!\警告:请勿在远程连接的服务器、虚拟机上测试!
当我们使用-L选项验证当前规则是发现,所有的链旁边都有 policy ACCEPT标注,这表明当前链的默认策略为ACCEPT:
Chain INPUT(policy ACCEPT)
target prot opt source destination
ACCEPT tcp– anywhere anywhere tcp dpt:ssh
DROP all– anywhere anywhere
Chain FORWARD(policy ACCEPT)
target prot opt source destination
Chain OUTPUT(policy ACCEPT)
target prot opt source destination
这种情况下,如果没有明确添加DROP规则,那么默认情况下将采用ACCEPT策略进行过滤。除非:
a)为以上三个链单独添加DROP规则:
iptables-A INPUT-j DROP
iptables-A OUTPUT-j DROP
iptables-A FORWARD-j DROP
b)更改默认策略:
iptables-P INPUT DROP
iptables-P OUTPUT DROP
iptables-P FORWARD DROP
糟糕!!如果你严格按照上一节的例子配置了iptables,并且现在使用的是SSH进行连接的,那么会话恐怕已经被迫终止了!
为什么呢?因为我们已经把OUTPUT链策略更改为DROP了。此时虽然服务器能接收数据,但是无法发送数据:
Chain INPUT(policy DROP)
target prot opt source destination
ACCEPT tcp– anywhere anywhere tcp dpt:ssh
DROP all– anywhere anywhere
Chain FORWARD(policy DROP)
target prot opt source destination
Chain OUTPUT(policy DROP)
target prot opt source destination
七、配置应用程序规则
尽管5.4节已经介绍了如何初步限制除SSH以外的其他连接,但是那是在链默认策略为ACCEPT的情况下实现的,并且没有对输出数据包进行限制。本节在上一节基础上,以SSH和HTTP所使用的端口为例,教大家如何在默认链策略为DROP的情况下,进行防火墙设置。在这里,我们将引进一种新的参数-m state,并检查数据包的状态字段。
1.SSH
iptables-A INPUT-i eth0-p tcp–dport 22-m state–state NEW,ESTABLISHED-j ACCEPT
iptables-A OUTPUT-o eth0-p tcp–sport 22-m state–state ESTABLISHED-j ACCEPT
如果服务器也需要使用SSH连接其他远程主机,则还需要增加以下配置:
iptables-A OUTPUT-o eth0-p tcp–dport 22-m state–state NEW,ESTABLISHED-j ACCEPT
iptables-A INPUT-i eth0-p tcp–sport 22-m state–state ESTABLISHED-j ACCEPT
2.HTTP
HTTP的配置与SSH类似:
iptables-A INPUT-i eth0-p tcp–dport 80-m state–state NEW,ESTABLISHED-j ACCEPT
iptables-A OUTPUT-o eth0-p tcp–sport 80-m state–state ESTABLISHED-j ACCEPT
3.完整的配置
iptables-F
iptables-P INPUT DROP
iptables-P FORWARD DROP
iptables-P OUTPUT DROP
iptables-A INPUT-i eth0-p tcp–dport 22-m state–state NEW,ESTABLISHED-j ACCEPT
iptables-A OUTPUT-o eth0-p tcp–sport 22-m state–state ESTABLISHED-j ACCEPT
iptables-A OUTPUT-o eth0-p tcp–dport 22-m state–state NEW,ESTABLISHED-j ACCEPT
iptables-A INPUT-i eth0-p tcp–sport 22-m state–state ESTABLISHED-j ACCEPT
iptables-A INPUT-i eth0-p tcp–dport 80-m state–state NEW,ESTABLISHED-j ACCEPT
iptables-A OUTPUT-o eth0-p tcp–sport 80-m state–state ESTABLISHED-j ACCEPT
References
[1] Linux Firewall Tutorial: IPTables Tables, Chains, Rules Fundamentals
[2] IPTables Flush: Delete/ Remove All Rules On RedHat and CentOS Linux
[3] Linux IPTables: How to Add Firewall Rules(With Allow SSH Example)
[4] Linux IPTables: Incoming and Outgoing Rule Examples(SSH and HTTP)
[5] 25 Most Frequently Used Linux IPTables Rules Examples
[6] man 8 iptables