防火墙介绍
与防火墙相关的配置文件
/etc/sysconfig/iptables-config
/etc/sysconfig/iptables
基本操作
1、清除所有的规则。
1)清除预设表filter中所有规则链中的规则。
# iptables -F
2)清除预设表filter中使用者自定链中的规则。
#iptables -X
#iptables -Z
2、设置链的默认策略。一般有两种方法。
1)首先允许所有的包,然后再禁止有危险的包通过放火墙。
#iptables -P INPUT ACCEPT
#iptables -P OUTPUT ACCEPT
#iptables -P FORWARD ACCEPT
2)首先禁止所有的包,然后根据需要的服务允许特定的包通过防火墙。
#iptables -P INPUT DROP
#iptables -P OUTPUT DROP
#iptables -P FORWARD DROP
3、列出表/链中的所有规则。默认只列出filter表。
#iptables -L
4、向链中添加规则。下面的语句用于开放网络接口:
#iptables -A INPUT -i lo -j ACCEPT
#iptables -A OUTPUT -o lo -j ACCEPT
#iptables -A INPUT -i eth0 -j ACEPT
#iptables -A OUTPUT -o eth1 -j ACCEPT
#iptables -A FORWARD -i eth1 -j ACCEPT
#iptables -A FORWARD -0 eth1 -j ACCEPT
注意:由于本地进程不会经过FORWARD链,因此回环接口lo只在INPUT和OUTPUT两个链上作用。
设置基本的规则匹配
1、指定协议匹配。
1)匹配指定协议。
#iptables -A INPUT -p tcp
2)匹配指定协议之外的所有协议。
#iptables -A INPUT -p !tcp
2、指定地址匹配。
1)指定匹配的主机。
#iptables -A INPUT -s 192.168.0.18
2)指定匹配的网络。
#iptables -A INPUT -s 192.168.2.0/24
3)匹配指定主机之外的地址。
#iptables -A FORWARD -s !192.168.0.19
4)匹配指定网络之外的网络。
#iptables -A FORWARD -s ! 192.168.3.0/24
3、指定网络接口匹配。
1)指定单一的网络接口匹配。
#iptables -A INPUT -i eth0
#iptables -A FORWARD -o eth0
2)指定同类型的网络接口匹配。
#iptables -A FORWARD -o ppp+
4、指定端口匹配。
1)指定单一端口匹配。
#iptables -A INPUT -p tcp --sport www
#iptables -A INPUT -p udp –dport 53
2)匹配指定端口之外的端口。
#iptables -A INPUT -p tcp –dport !22
3)匹配端口范围。
#iptables -A INPUT -p tcp –sport 22:80
4)匹配ICMP端口和ICMP类型。
#iptables -A INOUT -p icmp –icimp-type 8
5)指定ip碎片。
每个网络接口都有一个MTU(最大传输单元),这个参数定义了可以通过的数据包的最大尺寸。如果一个数据包大于这个参数值时,系统会将其划分成更小的数据包(称为ip碎片)来传输,而接受方则对这些ip碎片再进行重组以还原整个包。这样会导致一个问题:当系统将大数据包划分成ip碎片传输时,第一个碎片含有完整的包头信息(IP+TCP、UDP和ICMP),但是后续的碎片只有包头的部分信息(如源地址、目的地址)。因此,检查后面的ip碎片的头部(象有TCP、UDP和ICMP一样)是不可能的。假如有这样的一条规则:
#iptables -A FORWARD -p tcp -s 192.168.1.0/24 -d 192.168.2.100 –dport 80 -j ACCEPT
并且这时的FORWARD的policy为DROP时,系统只会让第一个ip碎片通过,而余下的碎片因为包头信息不完整而无法通过。可以通过—fragment/-f 选项来指定第二个及以后的ip碎片解决上述问题。
#iptables -A FORWARD -f -s 192.168.1.0/24 -d 192.168.2.100 -j ACCEPT
注意现在有许多进行ip碎片攻击的实例,如DoS攻击,因此允许ip碎片通过是有安全隐患的,对于这一点可以采用iptables的匹配扩展来进行限制。
设置扩展的规则匹配
1、多端口匹配。
1)匹配多个源端口。
#iptables -A INPUT -p tcp -m multiport –sport 22,53,80,110
2)匹配多个目的端口。
#iptables -A INPUT -p tcp -m multiport –dpoort 22,53,80
3)匹配多端口(无论是源端口还是目的端口)
#iptables -A INPUT -p tcp -m multiport –port 22,53,80,110
2、指定TCP匹配扩展
使用 –tcp-flags 选项可以根据tcp包的标志位进行过滤。
#iptables -A INPUT -p tcp –tcp-flags SYN,FIN,ACK SYN
#iptables -A FROWARD -p tcp –tcp-flags ALL SYN,ACK
上实例中第一个表示SYN、ACK、FIN的标志都检查,但是只有SYN匹配。第二个表示ALL(SYN,ACK,FIN,RST,URG,PSH)的标志都检查,但是只有设置了SYN和ACK的匹配。
#iptables -A FORWARD -p tcp --syn
选项—syn相当于”--tcp-flags SYN,RST,ACK SYN”的简写。
3、limit速率匹配扩展。
1)指定单位时间内允许通过的数据包个数,单位时间可以是/second、/minute、/hour、/day或使用第一个子母。
#iptables -A INPUT -m limit --limit 300/hour
2 )指定触发事件的阀值。
#iptables -A INPUT -m limit –limit-burst 10
用来比对一次同时涌入的封包是否超过10个,超过此上限的包将直接丢弃。
3)同时指定速率限制和触发阀值。
#iptables -A INPUT -p icmp -m limit –-limit 3/m –limit-burst 3
表示每分钟允许的最大包数量为限制速率(本例为3)加上当前的触发阀值burst数。任何情况下,都可保证3个数据包通过,触发阀值burst相当于允许额外的包数量。
4)基于状态的匹配扩展(连接跟踪)
每个网络连接包括以下信息:源地址、目标地址、源端口、目的端口,称为套接字对(socket pairs);协议类型、连接状态(TCP协议)
和超时时间等。防火墙把这些信息称为状态(stateful)。状态包过滤防火墙能在内存中维护一个跟踪状态的表,比简单包过滤防火墙具有更大的安全性,命令格式如下:
iptables -m state –-state [!]state [,state,state,state]
其中,state表是一个逗号分割的列表,用来指定连接状态,4种:
>NEW: 该包想要开始一个新的连接(重新连接或连接重定向)
>RELATED:该包是属于某个已经建立的连接所建立的新连接。举例:
FTP的数据传输连接和控制连接之间就是RELATED关系。
>ESTABLISHED:该包属于某个已经建立的连接。
>INVALID:该包不匹配于任何连接,通常这些包被DROP。
例如:
(1)在INPUT链添加一条规则,匹配已经建立的连接或由已经建立的连接所建立的新连接。即匹配所有的TCP回应包。
#iptables -A INPUT -m state –state RELATED,ESTABLISHED
(2)在INPUT链链添加一条规则,匹配所有从非eth0接口来的连接请求包。
#iptables -A INPUT -m state -–state NEW -i !eth0
防火墙配置举例
#lo config
-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
#ssh config
-A INPUT -s 172.16.15.0/24 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -s 172.16.209.0/24 -p tcp -m tcp --dport 22 -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 22 -j ACCEPT
-A INPUT -s 172.16.15.0/24 -p tcp -m tcp --sport 22 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 22 -j ACCEPT
#TCP
-A INPUT -p tcp --dport 53 -j ACCEPT
-A INPUT -p tcp --sport 53 -m state --state ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp --dport 53 -j ACCEPT
-A OUTPUT -p tcp --sport 53 -m state --state ESTABLISHED -j ACCEPT
##udp
-A INPUT -p udp --dport 53 -j ACCEPT
-A INPUT -p udp --sport 53 -m state --state ESTABLISHED -j ACCEPT
-A OUTPUT -p udp --dport 53 -j ACCEPT
-A OUTPUT -p udp --sport 53 -m state --state ESTABLISHED -j ACCEPT
#HTTP config
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 80 -j ACCEPT
#SMB config
-A INPUT -p tcp -m tcp --dport 137 -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 137 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 445 -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 445 -j ACCEPT
#TOMCAT config
-A INPUT -p tcp -m tcp --dport 8080 -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 8080 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 8430 -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 8430 -j ACCEPT
-A OUTPUT -p tcp --sport 8430 -m state --state ESTABLISHED -j ACCEPT
#maven service
-A INPUT -p tcp -m tcp --dport 9050 -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 9050 -j ACCEPT
#MSSQL out config
-A OUTPUT -p tcp --dport 1433 -j ACCEPT
-A INPUT -p tcp --sport 1433 -m state --state ESTABLISHED -j ACCEPT
#ICMP config
-A INPUT -p icmp -j ACCEPT
-A OUTPUT -p icmp -j ACCEPT
########SF
-A INPUT -p tcp -m tcp --dport 7080 -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 7080 -j ACCEPT
-A OUTPUT -p tcp --sport 7080 -m state --state ESTABLISHED -j ACCEPT
系统参数配置
网络参数配置
/etc/hosts 主机列表
/etc/sysconfig/network-s/ifcfg-eth* 网卡配置
/etc/resolv.conf dns解析配置
/etc/sysconfig/network 主机名网关配置
/etc/init.d/network restart重新启动网络配置
环境变量的配置
一般将变量放置在/etc/profile.d/下,比如:
我们定义一个YOWN_HOME目录,新建一个myapp_path.sh文件,输入内容:
export YOWN_HOME=/usr/java/jdk1.5
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
保存退出,重加载文件
source ./myapp_path.sh
这样,我们就配置好了环境变量YOWN_HOM
全局参数
在/etc/rc.d/rc.local中添加并在命令行
echo 65536>/proc/sys/fs/file-max 增加同时打开的文件数
echo 1 >/proc/sys/net/ipv4/tcp_syncookies来防止synflood攻击
echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all 拒绝所有的ICMP包
常用服务安装
与RPM安装有关的命令:
rpm -qa 查询系统全部安装的包
rpm -qf filename查询包含该文件的软件包
rpm-qp 软件包名,查询该软件包
rpm –ivh 包名,安装包
rpm –e 包名,删除安装
比如:rpm –qa |grep yown 查找是否安装了yown包
下面结合全部内容,举例说明
安装apache + mysql:
版本说明及下载地址:
Apache 2.2.4
http://www.axint.net/apache/httpd/httpd-2.2.4.tar.gz
MySQL 5.0.41
http://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-5.0.41-freebsd6.0-i386.tar.gz/from/http://ftp.stu.edu.tw/pub/Unix/Database/Mysql/
请先分别下载以上文件并上传到/usr/home/yown/install
以ROOT用户登录,开始安装
1.安装mysql数据库
先建立增加一个mysql的数据库用户,执行命令如下:
yownwww#pw groupadd mysql
yownwww#pw useradd mysql –g mysql –s /nonexistent
继续执行如下命令:
yownwww#cd /usr/home/yown/install
yownwww#tar –zvxf mysql-5.0.41-freebsd6.0-i386.tar.gz
yownwww#cd mysql-5.0.41-freebsd6.0-i386
继续执行如下编译命令:
yownwww#./configure --prefix=/usr/local/mysql
yownwww#make
yownwww#make install
yownwww#./scripts/mysql_install_db
修改如下文件以及文件夹权限,否则mysql不能正常启动
yownwww#chown –R root /usr/loca/mysql
yownwww#chgrp –R mysql /usr/local/mysql
yownwww#chown –R root /usr/local/mysql/bin
yownwww#chgrp –R mysql /usr/local/mysql/bin
yownwww#chown –R root /usr/local/mysql/var
yownwww#chgrp –R mysql /usr/local/mysql/var
yownwww#chmod 777 /usr/local/mysql/var
yownwww#chown –R root /usr/local/mysql/var/mysql
yownwww#chgrp –R mysql /usr/local/mysql/var/mysql
yownwww#chmod 777 /usr/local/mysql/var/mysql
yownwww#chown –R root /usr/local/mysql/var/mysql/*
yownwww#chgrp –R mysql /usr/local/mysql/var/mysql/*
yownwww#chmod 777 /usr/local/mysql/var/mysql/*
yownwww#chmod 777 /usr/local/mysql/lib/mysql/libmysqlclient.a
yownwww#/usr/local/mysql/bin/mysqld_safe --user=mysql &
2.安装apache服务器
执行如下命令:
yownwww#cd /usr/home/yown/install
yownwww#tar –zvxf httpd-2.2.4.tar.gz
yownwww#cd httpd-2.2.4
yownwww#./configure --prefix=/usr/local/apache --enable-so
yownwww#make
yownwww#make install
3.修改apache配置文件
假如服务器IP为192.168.1.6
执行如下命令:
yownwww#vi /usr/local/apache/conf/httpd.conf
(1)查找 #Listen 12.34.56.78:80 行,将该行下面的内容修改为
Listen 192.168.1.6:80 #此处为服务器的IP地址
(2)查找ServerAdmin you@your.address,将那行的email改为邮箱地址。
(3)查找DocumentRoot "/usr/local/apache/htdocs",将那行内容更改为DocumentRoot "/usr/home/www"。请先创建目录/usr/home/wwwi用于存放代码!
(4)查找DirectoryIndex index.html index.html.var,将那行内容更改为 DirectoryIndex index.html index.php index.htm
(6)查找AddDefaultCharset ISO-8859-1,将那行内容更改为AddDefaultCharset UTF-8
保存后退出,至此配置apache完毕,你可以访问一下http:// 192.168.1.6若没出错即配置成功!
4.让apache+mysql开机后自动运行
执行如下命令:
首先,产生apache服务启动脚本:
yownwww#cd /usr/local/etc/rc.d
yownwww#vi apache.sh
添加如下内容:
/usr/local/apache/bin/apachectl start &
执行:wq命令保存后退出,并执行如下命令:
yownwww#chmod 777 apache.sh
接着,产生mysql服务启动脚本:
yownwww#vi mysql.sh
添加如下内容:
/usr/local/mysql/bin/mysqld_safe &
执行:wq!命令保存后退出,并执行如下命令:
yownwww#chmod 777 mysql.sh
至此,我们已成功完成了apache+mysql的安装配置
NFS文件共享
rpm -qa|grep nfs 检查是否安装了NFS
rpm -qa|grep portmap检查是否安装了portmap (rpc)
服务器端的设定都在/etc/exports中
比如可以编辑/etc/exports为:
/home/yown/nfs_dir 192.168.0.*(rw) *(ro)
设定的参数主要:
rw:可读写的权限;
ro:只读的权限;
no_root_squash:登入到NFS主机的用户如果是ROOT用户,他就拥有ROOT的权限,此参数很不安全,建议不要使用。
root_squash:在登入 NFS 主机使用分享之目录的使用者如果是 root 时,那么这个使用者的权限将被压缩成为匿名使用者,通常他的 UID 与 GID 都会变成 nobody 那个系统账号的身份;
anonuid:将登入NFS主机的用户都设定成指定的user id,此ID必须存在于/etc/passwd中。
anongid:同 anonuid ,为group ID
sync:资料同步写入存储器中。
async:资料会先暂时存放在内存中,不会直接写入硬盘。
insecure 允许从这台机器过来的非授权访问。
设定好后执行以下命令启动NFS:
/etc/rc.d/init.d/portmap start (在REDHAT中PORTMAP是默认启动的)
/etc/rc.d/init.d/nfs start
exportfs命令:
如果我们在启动了NFS之后又修改了/etc/exports,可以用exportfs命令来使改动立刻生效
exportfs -rv 全部重新 export 一次
exportfs -au 全部都卸载。
客户端操作:
1、showmount命令用法
showmount
-a :这个参数是一般在NFS SERVER上使用,是用来显示已经mount上本机nfs目录的cline机器。
-e :显示指定的NFS SERVER上export出来的目录。
例如:
showmount -e 192.168.0.2
2、mount nfs目录的方法:
Linux: mount -t nfs 192.168.0.2:/home/yown/nfs_dir /mnt/nfs
Solaris:mount -F nfs 192.168.0.2:/home/yown/nfs_dir /mnt/nfs
BSD: mount 192.168.0.2:/home/yown/nfs_dir /mnt/nfs
3、mount nfs的其它可选参数:
HARD mount和SOFT MOUNT:
HARD: NFS CLIENT会不断的尝试与SERVER的连接(在后台,不会给出任何提示信息,在LINUX下有的版本仍然会给出一些提示),直到MOUNT上。
SOFT:会在前台尝试与SERVER的连接,是默认的连接方式。当收到错误信息后终止mount尝试,并给出相关信息。
例如:mount -F nfs -o hard 192.168.0.10:/nfs /nfs
对于到底是使用hard还是soft的问题,这主要取决于你访问什么信息有关。例如你是想通过NFS来运行X PROGRAM的话,你绝对不会希望由于一些意外的情况(如网络速度一下子变的很慢,插拔了一下网卡插头等)而使系统输出大量的错误信息,如果此时你用的是HARD方式的话,系统就会等待,直到能够重新与NFS SERVER建立连接传输信息。另外如果是非关键数据的话也可以使用SOFT方式,如FTP数据等,这样在远程机器暂时连接不上或关闭时就不会挂起你的会话过程。
4、与NFS有关的命令
nfsstat 查看NFS的运行状态
rpcinfo -p 192.168.0.2 查看rpc执行信息
5、注意NFS安全问题:
1、合理的设定/etc/exports中共享出去的目录,最好能使用anonuid,anongid以使MOUNT到NFS SERVER的CLIENT仅仅有最小的权限,最好不要使用root_squash。
2、使用IPTABLE防火墙限制能够连接到NFS SERVER的机器范围
iptables -A INPUT -i eth0 -p TCP -s 192.168.0.0/24 --dport 111 -j ACCEPT
iptables -A INPUT -i eth0 -p UDP -s 192.168.0.0/24 --dport 111 -j ACCEPT
iptables -A INPUT -i eth0 -p TCP -s 140.0.0.0/8 --dport 111 -j ACCEPT
iptables -A INPUT -i eth0 -p UDP -s 140.0.0.0/8 --dport 111 -j ACCEPT
3、为了防止可能的Dos攻击,需要合理设定NFSD 的COPY数目。
4、修改/etc/hosts.allow和/etc/hosts.deny达到限制CLIENT的目的
/etc/hosts.allow
portmap: 192.168.0.0/255.255.255.0 : allow
/etc/hosts.deny
portmap: ALL : deny
5、改变默认的NFS 端口
NFS默认使用的是111端口,但同时你也可以使用port参数来改变这个端口,这样就可以在一定程度上增强安全性。