centos iptables配置文件(centos镜像)
Centos7 开启 iptables 日志
Netfilter/Iptables(简称Iptables)是Unix/Linux系统自带的优秀且完全免费的基于包过滤的防火墙工具,其功能强大,使用灵活,能够对流入、流出及流经服务器的数据包进行精细控制。
在实际生产环境中,有时可能需要对特定数据包进行过滤。然而,在复杂的网络环境中,可能出现收不到正常的数据报文的情况。这时,查看数据报文是否被Iptables过滤导致无法接收就显得尤为重要。
下面介绍如何开启Iptables日志,以进行数据报文情况的查看:
首先,在rsyslog.conf中添加配置:
# vim/etc/rsyslog.conf
在文件中添加以下行:
kern.*/var/log/iptables.log
随后重启日志配置:
# systemctl restart rsyslog.service
接着,若需让日志滚动,可在配置文件中添加如下行:
# vim/etc/logrotate.d/syslog
添加以下行:
/var/log/iptables
在Iptables配置中添加日志选项,以测试配置是否生效:
# iptables-A INPUT-j LOG--log-prefix"iptables"
检查日志文件是否生成:
# tailf/var/log/iptables.log
完成测试后,删除测试链:
# iptables-D INPUT-j LOG--log-prefix"iptables"
清空Iptables日志文件:
# echo"">/var/log/iptables.log
此方法能够帮助用户追踪数据包过滤情况,提高网络管理效率。
centos7 iptables
在 CentOS7系统中,firewalld和 iptables是两种常见的网络防火墙解决方案。虽然两者都提供了类似的功能,但在使用场景和配置方式上存在显著差异。
iptables默认规则相对开放,而 firewalld默认规则相对封闭。因此,推荐使用 iptables进行更细致的网络控制。
iptables的规则在/etc/sysconfig/iptables中存储,而 firewalld的配置则储存在/usr/lib/firewalld/和/etc/firewalld/中的 XML文件中。iptables在更改规则时,会清除所有旧规则并读取新规则,而 firewalld则不会创建新规则,仅运行不同规则,使其在运行时改变设置而不丢失当前配置。
在使用 firewalld时,可以通过以下命令查看和管理防火墙规则:
bash
firewall-cmd--list-all
firewall-cmd--list-services
firewall-cmd--list-port
firewall-cmd--reload
firewall-cmd--add-port=8080/tcp--permanent
firewall-cmd--add-service=http--permanent
firewall-cmd--remove-port=8080/tcp--permanent
firewall-cmd--remove-service=http--permanent
firewall-cmd--add-forward-port=port=80:proto=tcp:toport=8080--permanent
firewall-cmd--zone=public--add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.217.128--permanent
为了使用 iptables,需先关闭 firewalld并安装 iptables:
bash
systemctl stop firewalld.service
systemctl disable firewalld.service
yum-y install iptables-services
systemctl restart iptables.service
在 iptables中配置规则的常用命令有:
bash
iptables-L-n
iptables-F
iptables-X
可以使用以下方式在 iptables中修改防火墙规则:
修改/etc/sysconfig/iptables文件(重启 iptables使更改生效)。
直接使用命令(需要使用 `save`命令使配置生效)。
例如,直接添加一条开放 8080端口的规则:
bash
iptables-I INPUT-p tcp-m state--state NEW-m tcp--dport 8080-j ACCEPT
service iptables save
遇到的问题是,使用 `iptables-A`添加规则时,虽然规则被写入配置文件,但无法访问。后来发现使用 `iptables-I`添加配置可以解决问题。原因是 `-A`添加在规则列表末尾,而 `-I`添加在第一条,因此优先级不同。
在 iptables中,可以使用以下规则进行更细粒度的控制:
同时开放多个端口:`iptables-I INPUT-p tcp-m multiport--dport 22,80-j ACCEPT`。
开放连续端口范围:`iptables-I INPUT-p tcp--dport 5000:6000-j ACCEPT`。
允许特定网段访问:`iptables-I INPUT-p all-s 0.0.0.0/0-j ACCEPT`。
允许特定 IP的特定端口访问:`iptables-I INPUT-p tcp-s 0.0.0.0-dport 8080-j ACCEPT`。
禁止特定主机访问:`iptables-I INPUT-p tcp-s 0.0.0.0-j DROP`。
移除规则:`iptables-D INPUT 7`。
在 iptables配置中,放行使用 `ACCEPT`,禁止使用 `DROP`。
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