Avatar billede tigertool Nybegynder
09. juli 2007 - 21:07 Der er 17 kommentarer og
1 løsning

Firewall til webserver

Hej,

Jeg skal bruge et script til iptables som kun skal tillade følgende:
- SSH (kun fra min ip, 11.22.33.44)
- ftp (ProFTP, understøttelse for passive transfers)
- web (også ssl)
- pop3/smtp

alt andet skal lukkes - både udgående og indgående. Forward skal der ikke være noget af.

Jeg vil gerne have et script der passer til en Etch iptables.
Jeg har kun et netkort, og en fast public ip.
Avatar billede Slettet bruger
09. juli 2007 - 21:39 #1
Hejsa,

prøv det her:

#!/bin/sh

###############################################################################
#
# Local Settings
#

# sysctl location.  If set, it will use sysctl to adjust the kernel parameters.
# If this is set to the empty string (or is unset), the use of sysctl
# is disabled.

SYSCTL="/sbin/sysctl -w"

# To echo the value directly to the /proc file instead
# SYSCTL=""

# IPTables Location - adjust if needed

IPT="/sbin/iptables"
IPTS="/sbin/iptables-save"
IPTR="/sbin/iptables-restore"

# Internet Interface
INET_IFACE="eth0"

# Local Interface Information
LOCAL_IFACE="eth1"
LOCAL_IP="192.168.1.1"
LOCAL_NET="192.168.1.0/24"
LOCAL_BCAST="192.168.1.255"

# Localhost Interface

LO_IFACE="lo"
LO_IP="127.0.0.1"

# Save and Restore arguments handled here
if [ "$1" = "save" ]
then
    echo -n "Saving firewall to /etc/sysconfig/iptables ... "
    $IPTS > /etc/sysconfig/iptables
    echo "done"
    exit 0
elif [ "$1" = "restore" ]
then
    echo -n "Restoring firewall from /etc/sysconfig/iptables ... "
    $IPTR < /etc/sysconfig/iptables
    echo "done"
    exit 0
fi

###############################################################################
#
# Load Modules
#

echo "Loading kernel modules ..."

# You should uncomment the line below and run it the first time just to
# ensure all kernel module dependencies are OK.  There is no need to run
# every time, however.

# /sbin/depmod -a

# Unless you have kernel module auto-loading disabled, you should not
# need to manually load each of these modules.  Other than ip_tables,
# ip_conntrack, and some of the optional modules, I've left these
# commented by default.  Uncomment if you have any problems or if
# you have disabled module autoload.  Note that some modules must
# be loaded by another kernel module.

# core netfilter module
/sbin/modprobe ip_tables

# the stateful connection tracking module
/sbin/modprobe ip_conntrack

# filter table module
# /sbin/modprobe iptable_filter

# mangle table module
# /sbin/modprobe iptable_mangle

# nat table module
# /sbin/modprobe iptable_nat

# LOG target module
# /sbin/modprobe ipt_LOG

# This is used to limit the number of packets per sec/min/hr
# /sbin/modprobe ipt_limit

# masquerade target module
# /sbin/modprobe ipt_MASQUERADE

# filter using owner as part of the match
# /sbin/modprobe ipt_owner

# REJECT target drops the packet and returns an ICMP response.
# The response is configurable.  By default, connection refused.
# /sbin/modprobe ipt_REJECT

# This target allows packets to be marked in the mangle table
# /sbin/modprobe ipt_mark

# This target affects the TCP MSS
# /sbin/modprobe ipt_tcpmss

# This match allows multiple ports instead of a single port or range
# /sbin/modprobe multiport

# This match checks against the TCP flags
# /sbin/modprobe ipt_state

# This match catches packets with invalid flags
# /sbin/modprobe ipt_unclean

# The ftp nat module is required for non-PASV ftp support
/sbin/modprobe ip_nat_ftp

# the module for full ftp connection tracking
/sbin/modprobe ip_conntrack_ftp

# the module for full irc connection tracking
/sbin/modprobe ip_conntrack_irc


###############################################################################
#
# Kernel Parameter Configuration
#
# See http://ipsysctl-tutorial.frozentux.net/chunkyhtml/index.html
# for a detailed tutorial on sysctl and the various settings
# available.

# Required to enable IPv4 forwarding.
# Redhat users can try setting FORWARD_IPV4 in /etc/sysconfig/network to true
# Alternatively, it can be set in /etc/sysctl.conf
if [ "$SYSCTL" = "" ]
then
    echo "1" > /proc/sys/net/ipv4/ip_forward
else
    $SYSCTL net.ipv4.ip_forward="1"
fi

# This enables dynamic address hacking.
# This may help if you have a dynamic IP address \(e.g. slip, ppp, dhcp\).
#if [ "$SYSCTL" = "" ]
#then
#    echo "1" > /proc/sys/net/ipv4/ip_dynaddr
#else
#    $SYSCTL net.ipv4.ip_dynaddr="1"
#fi

# This enables SYN flood protection.
# The SYN cookies activation allows your system to accept an unlimited
# number of TCP connections while still trying to give reasonable
# service during a denial of service attack.
if [ "$SYSCTL" = "" ]
then
    echo "1" > /proc/sys/net/ipv4/tcp_syncookies
else
    $SYSCTL net.ipv4.tcp_syncookies="1"
fi

# This enables source validation by reversed path according to RFC1812.
# In other words, did the response packet originate from the same interface
# through which the source packet was sent?  It's recommended for single-homed
# systems and routers on stub networks.  Since those are the configurations
# this firewall is designed to support, I turn it on by default.
# Turn it off if you use multiple NICs connected to the same network.
if [ "$SYSCTL" = "" ]
then
    echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter
else
    $SYSCTL net.ipv4.conf.all.rp_filter="1"
fi

# This option allows a subnet to be firewalled with a single IP address.
# It's used to build a DMZ.  Since that's not a focus of this firewall
# script, it's not enabled by default, but is included for reference.
# See: http://www.sjdjweis.com/linux/proxyarp/
#if [ "$SYSCTL" = "" ]
#then
#    echo "1" > /proc/sys/net/ipv4/conf/all/proxy_arp
#else
#    $SYSCTL net.ipv4.conf.all.proxy_arp="1"
#fi

# The following kernel settings were suggested by Alex Weeks. Thanks!

# This kernel parameter instructs the kernel to ignore all ICMP
# echo requests sent to the broadcast address.  This prevents
# a number of smurfs and similar DoS nasty attacks.
if [ "$SYSCTL" = "" ]
then
    echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
else
    $SYSCTL net.ipv4.icmp_echo_ignore_broadcasts="1"
fi

# This option can be used to accept or refuse source routed
# packets.  It is usually on by default, but is generally
# considered a security risk.  This option turns it off.
if [ "$SYSCTL" = "" ]
then
    echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route
else
    $SYSCTL net.ipv4.conf.all.accept_source_route="0"
fi

# This option can disable ICMP redirects.  ICMP redirects
# are generally considered a security risk and shouldn't be
# needed by most systems using this generator.
#if [ "$SYSCTL" = "" ]
#then
#    echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects
#else
#    $SYSCTL net.ipv4.conf.all.accept_redirects="0"
#fi

# However, we'll ensure the secure_redirects option is on instead.
# This option accepts only from gateways in the default gateways list.
if [ "$SYSCTL" = "" ]
then
    echo "1" > /proc/sys/net/ipv4/conf/all/secure_redirects
else
    $SYSCTL net.ipv4.conf.all.secure_redirects="1"
fi

# This option logs packets from impossible addresses.
if [ "$SYSCTL" = "" ]
then
    echo "1" > /proc/sys/net/ipv4/conf/all/log_martians
else
    $SYSCTL net.ipv4.conf.all.log_martians="1"
fi


###############################################################################
#
# Flush Any Existing Rules or Chains
#

echo "Flushing Tables ..."

# Reset Default Policies
$IPT -P INPUT ACCEPT
$IPT -P FORWARD ACCEPT
$IPT -P OUTPUT ACCEPT
$IPT -t nat -P PREROUTING ACCEPT
$IPT -t nat -P POSTROUTING ACCEPT
$IPT -t nat -P OUTPUT ACCEPT
$IPT -t mangle -P PREROUTING ACCEPT
$IPT -t mangle -P OUTPUT ACCEPT

# Flush all rules
$IPT -F
$IPT -t nat -F
$IPT -t mangle -F

# Erase all non-default chains
$IPT -X
$IPT -t nat -X
$IPT -t mangle -X

if [ "$1" = "stop" ]
then
    echo "Firewall completely flushed!  Now running with no firewall."
    exit 0
fi

###############################################################################
#
# Rules Configuration
#

###############################################################################
#
# Filter Table
#
###############################################################################

# Set Policies

$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP

###############################################################################
#
# User-Specified Chains
#
# Create user chains to reduce the number of rules each packet
# must traverse.

echo "Create and populate custom rule chains ..."

# Create a chain to filter INVALID packets

$IPT -N bad_packets

# Create another chain to filter bad tcp packets

$IPT -N bad_tcp_packets

# Create separate chains for icmp, tcp (incoming and outgoing),
# and incoming udp packets.

$IPT -N icmp_packets

# Used for UDP packets inbound from the Internet
$IPT -N udp_inbound

# Used to block outbound UDP services from internal network
# Default to allow all
$IPT -N udp_outbound

# Used to allow inbound services if desired
# Default fail except for established sessions
$IPT -N tcp_inbound

# Used to block outbound services from internal network
# Default to allow all
$IPT -N tcp_outbound

###############################################################################
#
# Populate User Chains
#

# bad_packets chain
#

# Drop packets received on the external interface
# claiming a source of the local network
$IPT -A bad_packets -p ALL -i $INET_IFACE -s $LOCAL_NET -j LOG \
    --log-prefix "Illegal source: "

$IPT -A bad_packets -p ALL -i $INET_IFACE -s $LOCAL_NET -j DROP

# Drop INVALID packets immediately
$IPT -A bad_packets -p ALL -m state --state INVALID -j LOG \
    --log-prefix "Invalid packet: "

$IPT -A bad_packets -p ALL -m state --state INVALID -j DROP

# Then check the tcp packets for additional problems
$IPT -A bad_packets -p tcp -j bad_tcp_packets

# All good, so return
$IPT -A bad_packets -p ALL -j RETURN

# bad_tcp_packets chain
#
# All tcp packets will traverse this chain.
# Every new connection attempt should begin with
# a syn packet.  If it doesn't, it is likely a
# port scan.  This drops packets in state
# NEW that are not flagged as syn packets.

# Return to the calling chain if the bad packets originate
# from the local interface. This maintains the approach
# throughout this firewall of a largely trusted internal
# network.
$IPT -A bad_tcp_packets -p tcp -i $LOCAL_IFACE -j RETURN

# However, I originally did apply this filter to the forward chain
# for packets originating from the internal network.  While I have
# not conclusively determined its effect, it appears to have the
# interesting side effect of blocking some of the ad systems.
# Apparently some ad systems have the browser initiate a NEW
# connection that is not flagged as a syn packet to retrieve
# the ad image.  If you wish to experiment further comment the
# rule above. If you try it, you may also wish to uncomment the
# rule below.  It will keep those packets from being logged.
# There are a lot of them.
# $IPT -A bad_tcp_packets -p tcp -i $LOCAL_IFACE ! --syn -m state \
#    --state NEW -j DROP

$IPT -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j LOG \
    --log-prefix "New not syn: "
$IPT -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j DROP

$IPT -A bad_tcp_packets -p tcp --tcp-flags ALL NONE -j LOG \
    --log-prefix "Stealth scan: "
$IPT -A bad_tcp_packets -p tcp --tcp-flags ALL NONE -j DROP

$IPT -A bad_tcp_packets -p tcp --tcp-flags ALL ALL -j LOG \
    --log-prefix "Stealth scan: "
$IPT -A bad_tcp_packets -p tcp --tcp-flags ALL ALL -j DROP

$IPT -A bad_tcp_packets -p tcp --tcp-flags ALL FIN,URG,PSH -j LOG \
    --log-prefix "Stealth scan: "
$IPT -A bad_tcp_packets -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP

$IPT -A bad_tcp_packets -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j LOG \
    --log-prefix "Stealth scan: "
$IPT -A bad_tcp_packets -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP

$IPT -A bad_tcp_packets -p tcp --tcp-flags SYN,RST SYN,RST -j LOG \
    --log-prefix "Stealth scan: "
$IPT -A bad_tcp_packets -p tcp --tcp-flags SYN,RST SYN,RST -j DROP

$IPT -A bad_tcp_packets -p tcp --tcp-flags SYN,FIN SYN,FIN -j LOG \
    --log-prefix "Stealth scan: "
$IPT -A bad_tcp_packets -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP

# All good, so return
$IPT -A bad_tcp_packets -p tcp -j RETURN

# icmp_packets chain
#
# This chain is for inbound (from the Internet) icmp packets only.
# Type 8 (Echo Request) is not accepted by default
# Enable it if you want remote hosts to be able to reach you.
# 11 (Time Exceeded) is the only one accepted
# that would not already be covered by the established
# connection rule.  Applied to INPUT on the external interface.
#
# See: http://www.ee.siue.edu/~rwalden/networking/icmp.html
# for more info on ICMP types.
#
# Note that the stateful settings allow replies to ICMP packets.
# These rules allow new packets of the specified types.

# ICMP packets should fit in a Layer 2 frame, thus they should
# never be fragmented.  Fragmented ICMP packets are a typical sign
# of a denial of service attack.
$IPT -A icmp_packets --fragment -p ICMP -j LOG \
    --log-prefix "ICMP Fragment: "
$IPT -A icmp_packets --fragment -p ICMP -j DROP

# Echo - uncomment to allow your system to be pinged.
# Uncomment the LOG command if you also want to log PING attempts
#
# $IPT -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j LOG \
#    --log-prefix "Ping detected: "
# $IPT -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j ACCEPT

# By default, however, drop pings without logging. Blaster
# and other worms have infected systems blasting pings.
# Comment the line below if you want pings logged, but it
# will likely fill your logs.
$IPT -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j DROP

# Time Exceeded
$IPT -A icmp_packets -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT

# Not matched, so return so it will be logged
$IPT -A icmp_packets -p ICMP -j RETURN

# TCP & UDP
# Identify ports at:
#    http://www.chebucto.ns.ca/~rakerman/port-table.html
#    http://www.iana.org/assignments/port-numbers

# udp_inbound chain
#
# This chain describes the inbound UDP packets it will accept.
# It's applied to INPUT on the external or Internet interface.
# Note that the stateful settings allow replies.
# These rules are for new requests.
# It drops netbios packets (windows) immediately without logging.

# Drop netbios calls
# Please note that these rules do not really change the way the firewall
# treats netbios connections.  Connections from the localhost and
# internal interface (if one exists) are accepted by default.
# Responses from the Internet to requests initiated by or through
# the firewall are also accepted by default.  To get here, the
# packets would have to be part of a new request received by the
# Internet interface.  You would have to manually add rules to
# accept these.  I added these rules because some network connections,
# such as those via cable modems, tend to be filled with noise from
# unprotected Windows machines.  These rules drop those packets
# quickly and without logging them.  This prevents them from traversing
# the whole chain and keeps the log from getting cluttered with
# chatter from Windows systems.
$IPT -A udp_inbound -p UDP -s 0/0 --destination-port 137 -j DROP
$IPT -A udp_inbound -p UDP -s 0/0 --destination-port 138 -j DROP

# Dynamic Address
# If DHCP, the initial request is a broadcast. The response
# doesn't exactly match the outbound packet.  This explicitly
# allow the DHCP ports to alleviate this problem.
# If you receive your dynamic address by a different means, you
# can probably comment this line.
$IPT -A udp_inbound -p UDP -s 0/0 --source-port 67 --destination-port 68 \
    -j ACCEPT


# Not matched, so return for logging
$IPT -A udp_inbound -p UDP -j RETURN

# udp_outbound chain
#
# This chain is used with a private network to prevent forwarding for
# UDP requests on specific protocols.  Applied to the FORWARD rule from
# the internal network.  Ends with an ACCEPT


# No match, so ACCEPT
$IPT -A udp_outbound -p UDP -s 0/0 -j ACCEPT

# tcp_inbound chain
#
# This chain is used to allow inbound connections to the
# system/gateway.  Use with care.  It defaults to none.
# It's applied on INPUT from the external or Internet interface.

# Web Server

# HTTP
$IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 80 -j ACCEPT

# HTTPS (Secure Web Server)
$IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 443 -j ACCEPT

# FTP Server (Control)
$IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 21 -j ACCEPT

# FTP Client (Data Port for non-PASV transfers)
$IPT -A tcp_inbound -p TCP -s 0/0 --source-port 20 -j ACCEPT

# Passive FTP
#
# With passive FTP, the server provides a port to the client
# and allows the client to initiate the connection rather
# than initiating the connection with the client from the data port.
# Web browsers and clients operating behind a firewall generally
# use passive ftp transfers.  A general purpose FTP server
# will need to support them.
#
# However, by default an FTP server will select a port from the entire
# range of high ports.  It is not particularly safe to open all
# high ports.  Fortunately, that range can be restricted.  This
# firewall presumes that the range has been restricted to a specific
# selected range.  That range must also be configured in the ftp server.
#
# Instructions for specifying the port range for the wu-ftpd server
# can be found here:
# http://www.wu-ftpd.org/man/ftpaccess.html
# (See the passive ports option.)
#
# Instructions for the ProFTPD server can be found here:
# http://proftpd.linux.co.uk/localsite/Userguide/linked/x861.html

$IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 62000:64000 -j ACCEPT

# Email Server (SMTP)
$IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 25 -j ACCEPT

# Email Server (POP3)
$IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 110 -j ACCEPT

# Email Server (IMAP4)
$IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 143 -j ACCEPT

# sshd
# $IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 22 -j ACCEPT
$IPT -A tcp_inbound -p tcp -s 11.22.33.44 -d $LO_IFACE --sport 513:65535 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPT -A tcp_outbound -p tcp -s 0/0 -d 11.22.33.44 --sport 22 --dport 513:65535 -m state --state ESTABLISHED -j ACCEPT


# Not matched, so return so it will be logged
$IPT -A tcp_inbound -p TCP -j RETURN

# tcp_outbound chain
#
# This chain is used with a private network to prevent forwarding for
# requests on specific protocols.  Applied to the FORWARD rule from
# the internal network.  Ends with an ACCEPT


# No match, so ACCEPT
$IPT -A tcp_outbound -p TCP -s 0/0 -j ACCEPT

###############################################################################
#
# INPUT Chain
#

echo "Process INPUT chain ..."

# Allow all on localhost interface
$IPT -A INPUT -p ALL -i $LO_IFACE -j ACCEPT

# Drop bad packets
$IPT -A INPUT -p ALL -j bad_packets

# DOCSIS compliant cable modems
# Some DOCSIS compliant cable modems send IGMP multicasts to find
# connected PCs.  The multicast packets have the destination address
# 224.0.0.1.  You can accept them.  If you choose to do so,
# Uncomment the rule to ACCEPT them and comment the rule to DROP
# them  The firewall will drop them here by default to avoid
# cluttering the log.  The firewall will drop all multicasts
# to the entire subnet (224.0.0.1) by default.  To only affect
# IGMP multicasts, change '-p ALL' to '-p 2'.  Of course,
# if they aren't accepted elsewhere, it will only ensure that
# multicasts on other protocols are logged.
# Drop them without logging.
$IPT -A INPUT -p ALL -d 224.0.0.1 -j DROP
# The rule to accept the packets.
# $IPT -A INPUT -p ALL -d 224.0.0.1 -j ACCEPT

# Rules for the private network (accessing gateway system itself)
$IPT -A INPUT -p ALL -i $LOCAL_IFACE -s $LOCAL_NET -j ACCEPT
$IPT -A INPUT -p ALL -i $LOCAL_IFACE -d $LOCAL_BCAST -j ACCEPT


# Inbound Internet Packet Rules

# Accept Established Connections
$IPT -A INPUT -p ALL -i $INET_IFACE -m state --state ESTABLISHED,RELATED \
    -j ACCEPT

# Route the rest to the appropriate user chain
$IPT -A INPUT -p TCP -i $INET_IFACE -j tcp_inbound
$IPT -A INPUT -p UDP -i $INET_IFACE -j udp_inbound
$IPT -A INPUT -p ICMP -i $INET_IFACE -j icmp_packets

# Drop without logging broadcasts that get this far.
# Cuts down on log clutter.
# Comment this line if testing new rules that impact
# broadcast protocols.
$IPT -A INPUT -m pkttype --pkt-type broadcast -j DROP

# Log packets that still don't match
$IPT -A INPUT -m limit --limit 3/minute --limit-burst 3 -j LOG \
    --log-prefix "INPUT packet died: "

###############################################################################
#
# FORWARD Chain
#

echo "Process FORWARD chain ..."

# Used if forwarding for a private network

# Drop bad packets
$IPT -A FORWARD -p ALL -j bad_packets

# Accept TCP packets we want to forward from internal sources
$IPT -A FORWARD -p tcp -i $LOCAL_IFACE -j tcp_outbound

# Accept UDP packets we want to forward from internal sources
$IPT -A FORWARD -p udp -i $LOCAL_IFACE -j udp_outbound

# If not blocked, accept any other packets from the internal interface
$IPT -A FORWARD -p ALL -i $LOCAL_IFACE -j ACCEPT

# Deal with responses from the internet
$IPT -A FORWARD -i $INET_IFACE -m state --state ESTABLISHED,RELATED \
    -j ACCEPT

# Log packets that still don't match
$IPT -A FORWARD -m limit --limit 3/minute --limit-burst 3 -j LOG \
    --log-prefix "FORWARD packet died: "

###############################################################################
#
# OUTPUT Chain
#

echo "Process OUTPUT chain ..."

# Generally trust the firewall on output

# However, invalid icmp packets need to be dropped
# to prevent a possible exploit.
$IPT -A OUTPUT -m state -p icmp --state INVALID -j DROP

# Localhost
$IPT -A OUTPUT -p ALL -s $LO_IP -j ACCEPT
$IPT -A OUTPUT -p ALL -o $LO_IFACE -j ACCEPT

# To internal network
$IPT -A OUTPUT -p ALL -s $LOCAL_IP -j ACCEPT
$IPT -A OUTPUT -p ALL -o $LOCAL_IFACE -j ACCEPT

# To internet
$IPT -A OUTPUT -p ALL -o $INET_IFACE -j ACCEPT

# Log packets that still don't match
$IPT -A OUTPUT -m limit --limit 3/minute --limit-burst 3 -j LOG \
    --log-prefix "OUTPUT packet died: "

###############################################################################
#
# nat table
#
###############################################################################

# The nat table is where network address translation occurs if there
# is a private network.  If the gateway is connected to the Internet
# with a static IP, snat is used.  If the gateway has a dynamic address,
# masquerade must be used instead.  There is more overhead associated
# with masquerade, so snat is better when it can be used.
# The nat table has a builtin chain, PREROUTING, for dnat and redirects.
# Another, POSTROUTING, handles snat and masquerade.

echo "Load rules for nat table ..."

###############################################################################
#
# PREROUTING chain
#


###############################################################################
#
# POSTROUTING chain
#

$IPT -t nat -A POSTROUTING -o $INET_IFACE -j MASQUERADE

echo "Load rules for mangle table ..."
Avatar billede tigertool Nybegynder
09. juli 2007 - 21:46 #2
Det ligner meget et jeg selv fandt på: http://easyfwgen.morizot.net/gen/

Det kan jeg desværre ikke bruge. Jeg har prøvet.
Avatar billede Slettet bruger
09. juli 2007 - 22:30 #3
Hvorfor kan du ikke bruge det?
Avatar billede tigertool Nybegynder
09. juli 2007 - 23:30 #4
1. det er lavet til 2 netkort med routing.
2. det fejler når jeg forsøger at bruge /sbin/modprobe ip_nat_ftp, /sbin/modprobe ip_conntrack_ftp, /sbin/modprobe ip_conntrack_irc
3. det lever ikke op til mit krav mht ssh-adgang
Avatar billede Slettet bruger
10. juli 2007 - 08:01 #5
1. Det kan vi da lave om på.
2. har du fejlen?
3. vil jeg da mene er opfyldt se følgende:

$IPT -A tcp_inbound -p tcp -s 11.22.33.44 -d $LO_IFACE --sport 513:65535 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPT -A tcp_outbound -p tcp -s 0/0 -d 11.22.33.44 --sport 22 --dport 513:65535 -m state --state ESTABLISHED -j ACCEPT
Avatar billede langbein Nybegynder
11. juli 2007 - 13:52 #6
#!/bin/bash

###########################################################################
#A simple firewall for a Linux server installation.
#For training purposes only. Can not be used for any production environments.
#Simple packet filtering for ingoing trafic. Full open for outgoing trafic.
#No guarantee.
###########################################################################

#Flush the firewall

iptables -F
iptables -X
iptables -Z

#Set the policies

iptables -P INPUT DROP
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

#Blocking out some certain source ip's. Edit the proper ip numbers.

#Open for local trafic

iptables -A INPUT -i lo -j ACCEPT

#Open for ingoing trafic to server functions

iptables -A INPUT -p tcp --dport 20 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 25 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 110 -j ACCEPT

#Dynamically opening of input ports for server function (statefull inspection)

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Avatar billede Slettet bruger
11. juli 2007 - 16:54 #7
Ellers prøv at kigge her: http://rocky.molphys.leidenuniv.nl/

Det bedste jeg har set. Tror endda at du kan intstallere det med apt-get
Avatar billede langbein Nybegynder
12. juli 2007 - 11:31 #8
Nei, synes ikke denne er spesielt godt egnet for en hjemmeserver, hvis det nå er det som det er snakk om. Firewall konfigureringsprosjektet i linken over bærer preg av å være et prosjekt på universitetsnivå for noen som har laget et prosjekt relatert til fagområdet. Det som lages i slike miljøer er ikke alltid optimalisert mot den praktiske anvendelse.

Den lille konfigureringstumpen som jeg la ut over inneholder den identisk samme "firewall" med den forskjell at den vil ha vesentlig bedre ytelse, enklere konfigurering og færre feil.

Selfølgelig medfører forenklingen at mange mer spesialiserte firewalling funsjonene er tatt vekk, samtidig som de ulemper som disse funksjonene medfører også er tatt vekk.

Hvis man skal ha noe utbytte av et slikt "universitetsprosjekt" som linken over peker til, så forutsetter dette etter min mening at man kjenner Linux firewall så godt at man forstår alle de firewalling funksjonen som er i funksjon og hvordan disse fungerer.

Den kanskje største risiko ved bruken av firewall produkter, det ligger etter min mening i det forholdet at den som bruker og konfigurerer firewallen ikke har en full eller tilstrekkelig nok forståelse av den firewall som vedkommende konfigurerer.

Samtidig som "universitetsprosjektet" i linken over inneholder mange avanserte (og sansynligvis prosessorbelastende) funksjoner, så mangler det allikevell til dels elementære sikkerhetsfunksjoner. (Trafikkontroll i trafikkretning ut.)

PÅ den annen side så er det masse interesant "klipp og lim" som man saktens kan bruke i Linux firewall prosjekter.

Ellers så er det vel vanligvis slik at hver eneste linje i et Linux firewall konfigureringskript inneholder en fordel, den regel man ønsker å oppnå, i kombinasjon med den ulempe som den samme regelen medfører, slik at "mest" vanligvis ikke er "best".

Mange "avanserte" regler kan også medføre merkelige feil som det kan ta tid å finne ut av. Noen av disse reglene for eksempel rate og burst kontroll (som ligger i det aktuelle prosjektet) vil ut fra sin natur alltid medføre slike "tilsynelatende" feil.

Har ellers ikke testet firewall konfigureringsscriptet på Linux boks, bare lest gjennom filene. Ellers som nevnt veldig mye interessant, men ville tro at det ikke er helt like til å få dette til å fungere bra på en hjemmeserver.
Avatar billede langbein Nybegynder
12. juli 2007 - 11:41 #9
Rettelse: Det nevnte prosjektet inneholder faktisk regler for kontroll av utgående trafikk, samtidig som policy for utgående trafikk er satt til ACCEPT. Dette er vel ikke helt vanlig.
Avatar billede tigertool Nybegynder
14. juli 2007 - 00:26 #10
langbein, jeg benytter allerede en firewall som den du postede..
Kan det ikke anbefales at kontrollere udgående trafik?
Avatar billede langbein Nybegynder
14. juli 2007 - 22:19 #11
Er i utlandet og har ikke ae, oe, aa, untatt naar jeg kopler opp min notbook. Beklager dette ..

Jo, selvfolgelig kan man godt kontrollere utgaaende trafikk. Den eneste ulempe, det er at det til tider kan dukke opp problemstillinger som det kan vaere vanskelig aa finne ut av. Paa en server saa har man paa den annen side ganske god oversikt over hvilken trafikk ut som man behover.

Forsoker a modifisere litt paa sparket.

Hva mbehover man av trafikk ut ? Man behover da i hvert fall aa kunne sende ut mail, vil jeg tro, og da behover man ogsaa dns oppslag, det blir tcp port 25 og udp port 53, av det som jeg kan komme paa umiddelbart (midt paa natten for jeg legger meg.)

Ellers saa blir det jo ogsaa noedvendig aa aapne dynamisk i trafikkretning ut i forhold til server requester utenfra. Da skulle det bli noe slikt (kan vaere at det er noe jeg har glemt ..):

#!/bin/bash

###########################################################################
#A simple firewall for a Linux server installation.
#For training purposes only. Can not be used for any production environments.
#Simple packet filtering for ingoing and outgoing trafic. Not full opening
#for outgoing trafic anu more.
#Still no guarantee.
###########################################################################

#Flush the firewall

iptables -F
iptables -X
iptables -Z

#Set the policies

iptables -P INPUT DROP
iptables -P FORWARD ACCEPT
iptables -P OUTPUT DROP

#Blocking out some certain source ip's. Edit the proper ip numbers.
#Nothing here yet

#Open for local trafic

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUPUT -o lo -j ACCEPT

#Open for ingoing trafic to server functions

iptables -A INPUT -p tcp --dport 20 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 25 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 110 -j ACCEPT

#Open up for outgoing trafic

iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT


#Dynamically opening of input and output chains.

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


Du faar teste den om den fungerer.

Den kan eventuelt kun sende ut mail og stort sett ingentin mer utgaaende.

Andre funksjoner maa aapnes for for seg.
Avatar billede langbein Nybegynder
14. juli 2007 - 22:27 #12
En slik fitrering av utgaaende trafikk vil hindre eventuelle tojanere og virus som forsoker aa sette opp trafikk, hvis det naa eventuelt skulle finnes. Eventuelt saa skulle dette vare nyttig aa kombinere med logging av forsok paa uautorisert trafikk i trafikkretning ut. Klarer ikke aa ta problemstillingen med loggingen paa sparket.

Man kan godt fitrere utgaaende trafikk gjennom en gateway paa samme maate. Ulempen med dette det er at det alltid vil finnes brukere som onsker aapning for nye og nye porter, slik at det blir mye aa folge opp (Naar det dreier seg om arbeidsstasjoner med variert bruk. For servere saa er jo trafikken mer lik eller ens fra dag til dag.
Avatar billede langbein Nybegynder
14. juli 2007 - 22:30 #13
Det er en spesiell grunn til disse to:

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUPUT -o lo -j ACCEPT

Uten denne aapningen saa vil ikke serveren kunne utfore en del komunikasjonsoppgaver internt med seg selv. Typisk problemstilling vil vaere hvis man kjoerer webmail saa vil webmail klienten ikke vaere i stand til aa hente ut mail paa egen server, med mindre at man altsaa har aapnet for dette.
Avatar billede langbein Nybegynder
15. juli 2007 - 07:21 #14
Hvis man ønsker å disable utgående filtrering i det siste scriptet så endrer man bare slik:

iptables -P OUTPUT DROP

settes til

iptables -P OUTPUT ACCEPT

(Det vil si at man setter policy eller den siste regel som gjelder til å akseptere all utgående trafikk.)
Avatar billede tigertool Nybegynder
19. juli 2007 - 18:54 #15
langbein -> kan du prøve at lave en firewall hvor der kun tillades ind- og udgående trafik for de services jeg nævner i starten af mit indlæg (plus selvfølgelig DNS), og hvor min ip 11.22.33.44 er den eneste der kan tilgå port 22/SSH ?
Avatar billede tigertool Nybegynder
22. august 2007 - 23:11 #16
Jeg benytter denne firewall:

#!/bin/bash

#Settings
IPT="/sbin/iptables"
SYSADM_IP="11.22.33.44"

IN_TCP_ALLOW_SYSADM="22"

OUT_TCP="22,25,80"
OUT_UDP="53"
IN_TCP="20,21,25,80,110"

fw_start()
{
        # Reset Default Policies
        $IPT -F
        $IPT -P INPUT ACCEPT
        $IPT -P FORWARD ACCEPT
        $IPT -P OUTPUT ACCEPT
        $IPT -t nat -P PREROUTING ACCEPT
        $IPT -t nat -P POSTROUTING ACCEPT
        $IPT -t nat -P OUTPUT ACCEPT
        $IPT -t mangle -P PREROUTING ACCEPT
        $IPT -t mangle -P OUTPUT ACCEPT

        # Flush all rules
        $IPT -F
        $IPT -t nat -F
        $IPT -t mangle -F

        # Erase all non-default chains
        $IPT -X
        $IPT -t nat -X
        $IPT -t mangle -X

        #Set the policies
        $IPT -P INPUT DROP
        $IPT -P FORWARD DROP
        $IPT -P OUTPUT DROP

        #Blocking out some certain source ip's. Edit the proper ip numbers.
        #Nothing here yet

        #Open for local trafic
        $IPT -A INPUT -i lo -j ACCEPT
        $IPT -A OUTPUT -o lo -j ACCEPT

        #Open for incomming trafic to server functions
        $IPT -A INPUT -s $SYSADM_IP -p tcp -m multiport --dport $IN_TCP_ALLOW_SYSADM -j ACCEPT
        $IPT -A INPUT -p tcp -m multiport --dport $IN_TCP -j ACCEPT

        #Open up for outgoing trafic
        $IPT -A OUTPUT -p tcp -m multiport --dport $OUT_TCP -j ACCEPT
        $IPT -A OUTPUT -p udp -m multiport --dport $OUT_UDP -j ACCEPT


        #Dynamically opening of input and output chains.
        $IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
        $IPT -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
}

fw_stop()
{
        $IPT -F
        $IPT -t nat -F
        $IPT -t mangle -F
        $IPT -P INPUT ACCEPT
        $IPT -P FORWARD ACCEPT
        $IPT -P OUTPUT ACCEPT
}

case "$1" in
        start)
                echo -n "Starting firewall.. "
                fw_stop
                fw_start
                echo "done"
        ;;
        stop)
                echo -n "Stopping firewall.. "
                fw_stop
                echo "done"
        ;;
        restart)
                echo -n "Restarting firewall.. "
                fw_stop
                fw_start
                echo "done"
        ;;
        clear)
                echo -n "Clearing firewall rules.. "
                fw_stop
                echo "done"
        ;;
        *)
        echo "Usage: $0 {start|stop|restart|clear}"
esac
exit 0


langbein og netguard3 > smid et svar, så fordeler jeg point. Og tak for hjælpen. Jeg har selv flækket det script sammen ud fra de informationer jeg har fået her.
Avatar billede tigertool Nybegynder
05. maj 2008 - 13:08 #17
langbein og netguard3 > Smid venligst svar
Avatar billede tigertool Nybegynder
03. maj 2009 - 18:09 #18
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester